https://www.hackerrank.com/challenges/ctci-array-left-rotation
对大小为 n 的数组执行左旋转操作会将数组的每个元素向左移动 1 个单位。例如,如果在数组 [1,2,3,4,5] 上执行 2 次左旋转,则数组将变为 [3,4,5,1,2]
执行 k 次旋转并打印。
这是我到目前为止得到的,但它只经过一次交互,看不出我做错了什么
int main(){
int n; //size
int k; //number of rotations
int a_i; //index
scanf("%d %d",&n,&k);
int *a = malloc(sizeof(int) * n); //input array
for(a_i = 0; a_i <= n; a_i++){
scanf("%d",&a[a_i]);
}
int temp;
for(a_i = 0; a_i <= k; a_i++){
temp = a[0];
for(a_i = 0; a_i < n-1; a_i++) {
a[a_i] = a[a_i+1];
}
a[a_i] = temp;
}
for(a_i = 0; a_i < n; a_i++){
printf("%d ", a[a_i]);
}
return 0;
}
试试这段代码,将数组向左旋转d次,这段代码对你有帮助!!
import java.util.ArrayList;
import java.util.Scanner;
/**
*
* @author Bilakhiya
*/
public class LeftRotate {
/**
* @param args the command line arguments
*/
static ArrayList<Integer> leftarray(ArrayList<Integer>A1,int n,int d)
{
for(int j=0;j<d;j++)
{
leftby1(A1,n);
}
return A1;
}
static ArrayList<Integer> leftby1(ArrayList<Integer>A1,int n)
{
int i,temp;
temp=A1.get(0);
for(i=0;i<n-1;i++)
{
A1.set(i,A1.get(i+1) );
}
A1.set(i,temp);
return A1;
}
public static void main(String[] args) {
// TODO code application logic here
ArrayList<Integer> A=new ArrayList<>();
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int d=sc.nextInt();
for(int i=0;i<n;i++)
{
A.add(sc.nextInt());
}
ArrayList<Integer> B=leftarray(A,n,d);
for(int i=0;i<n;i++)
{
System.out.print(B.get(i)+" ");
}
}
}
你的循环是这样的
for(a_i=0; a_i<k; a_i++)
{
int temp=a[0];
for(a_j=0; a_j<n-1; a_j++)
{
a[a_j] = a[a_j+1];
}
a[n-1] = temp;
}
for(a_i=0 ; a_i<n ; a_i++)
{
printf("%d ",a[a_i]);
}
如果有一个包含< code>n个元素的数组,那么访问数组元素的有效索引范围是< code>[0,n-1]。
因此,在大多数情况下,程序中的循环使用无效的索引范围。
此外,您正在使用相同的变量a_i
用于两个嵌套循环,这将为外部循环提供不正确的索引
for(a_i = 0; a_i <= k; a_i++){
temp = a[0];
for(a_i = 0; a_i < n-1; a_i++) {
a[a_i] = a[a_i+1];
}
a[a_i] = temp;
}
还有这个说法
for(a_i = 0; a_i <= k; a_i++){
设置 k 1
次迭代,而不是 k
次迭代。
描述 (Description) 它提供移动或导致围绕轴或中心的圆圈移动。 语法 (Syntax) @keyframes rotateOutUpLeft { 0% { transform-origin: left bottom; transform: rotate(0); opacity: 1; } 100% { -tran
描述 (Description) 它提供移动或导致围绕轴或中心的圆圈移动。 语法 (Syntax) @keyframes rotateOutDownLeft { 0% { transform-origin: left bottom; transform: rotate(0); opacity: 1; } 100% { transfo
描述 (Description) 它提供移动或导致围绕轴或中心的圆圈移动。 语法 (Syntax) @keyframes rotateIn { 0% { transform-origin: center center; transform: rotate(-200deg); opacity: 0; } 100% { t
描述 (Description) 它提供移动或导致围绕轴或中心的圆圈移动。 语法 (Syntax) @keyframes rotateInDownLeft { 0% { transform-origin: left bottom; transform: rotate(-90deg); opacity: 0; } 100% { tra
问题内容: 在一个程序中,我正在写一个旋转二维数组的需求。在寻找最佳解决方案时,我发现了这种令人印象深刻的一线功能: 我现在在程序中使用它,它按预期工作。我的问题是,我不了解它是如何工作的。 如果有人可以解释所涉及的不同功能如何实现所需的结果,我将不胜感激。 问题答案: 考虑以下二维列表: 让我们将其逐步分解: 此列表传递给使用参数unpacking,因此调用最终等效于此: 希望注释能够清楚说明其
问题内容: 我正在使用Postgres 9.3。 我有两个表 以及它们之间的关系。现在,我想创建一个视图,该视图除了T1的列外,还为T1中的每个记录提供一列,其中包含一个包含T2所有相关记录的主键ID的数组。如果T2中没有相关条目,则此列的相应字段应包含空值。 我的架构的抽象版本如下所示: 可以如下生成相应的样本数据: 到目前为止,我提出了以下查询: 这行得通。但是,可以简化吗? 可以在此处找到相