Java 将数组中的所有零向前或向后移动
在不使用数据结构或临时数组的情况下,将所有零移到数组的前面或后面Java 将数组中的所有零向前或向后移动,java,arrays,Java,Arrays,在不使用数据结构或临时数组的情况下,将所有零移到数组的前面或后面 Original Array 1 9 8 4 0 0 2 7 0 6 0 9 Array after pushing zeros to the back: 1 9 8 4 2 7 6 9 0 0 0 0 Array after pushing zeros to the front: 0 0 0 0 1 9 8 4 2 7 6 9 您只需: 维护数组中第一个非零项的索引,以及 当前正在扫描的项目的索引 两个索引都从零
Original Array
1 9 8 4 0 0 2 7 0 6 0 9
Array after pushing zeros to the back:
1 9 8 4 2 7 6 9 0 0 0 0
Array after pushing zeros to the front:
0 0 0 0 1 9 8 4 2 7 6 9
您只需:
- 维护数组中第一个非零项的索引,以及
- 当前正在扫描的项目的索引
- 两个索引都从零开始
- 如果当前正在扫描的项目不是零,则递增 扫描索引
- 如果当前正在扫描的项目为零,请将其与 第一个非零索引处的项,并递增两个索引
- 重复此操作,直到扫描索引到达阵列的末尾
- 维护数组中第一个非零项的索引,以及
- 当前正在扫描的项目的索引
- 两个索引都从零开始
- 如果当前正在扫描的项目不是零,则递增 扫描索引
- 如果当前正在扫描的项目为零,请将其与 第一个非零索引处的项,并递增两个索引
- 重复此操作,直到扫描索引到达阵列的末尾
- 您只需:
- 简单的暴力方式类似于反向插入排序:迭代数组,如果发现
a[i] = 0, and a[i-i] != 0 then you swap a[i] and a[i-1]
不断迭代,直到可以在不进行任何交换的情况下“遍历”整个数组。简单的蛮力方式类似于反向插入排序:迭代数组,如果您发现
a[i] = 0, and a[i-i] != 0 then you swap a[i] and a[i-1]
不断迭代,直到可以在不进行任何交换的情况下“遍历”整个阵列。这里有一个使用java的Arrays.sort方法的解决方案:
int[] myArray = new int[10];
// initialize myArray with values...
Arrays.sort(myArray, new Comparator<Integer>() {
public int compare(Integer o1, Integer o2) {
// if o1 is zero, then return a 'less' than value (-1).
// otherwise, return an 'equivalent' value (0)
return o1 == 0 ? -1 : 0;
}
});
int[]myArray=newint[10];
//使用值初始化myArray。。。
sort(myArray,newcomparator(){
公共整数比较(整数o1,整数o2){
//如果o1为零,则返回一个小于值(-1)。
//否则,返回“等效”值(0)
返回值o1==0?-1:0;
}
});
这里有一个使用java的Arrays.sort方法的解决方案:
int[] myArray = new int[10];
// initialize myArray with values...
Arrays.sort(myArray, new Comparator<Integer>() {
public int compare(Integer o1, Integer o2) {
// if o1 is zero, then return a 'less' than value (-1).
// otherwise, return an 'equivalent' value (0)
return o1 == 0 ? -1 : 0;
}
});
int[]myArray=newint[10];
//使用值初始化myArray。。。
sort(myArray,newcomparator(){
公共整数比较(整数o1,整数o2){
//如果o1为零,则返回一个小于值(-1)。
//否则,返回“等效”值(0)
返回值o1==0?-1:0;
}
});
如果数组中没有负数,可以对其进行排序。通过使用ArrayList,您可以以非常简单的方式完成此操作
ArrayList<Integer> integers = new ArrayList<>();
integers.add(5);
integers.add(2);
integers.add(0);
integers.add(44);
integers.add(0);
integers.add(1);
integers.add(555);
integers.forEach(System.out::println);
integers.sort(Integer::compareTo);
System.out.println("Sorted!");
integers.forEach(System.out::println);
但是,如果您确实有负数,则需要编写自己的比较器,如下所示:
integers.sort((o1, o2) -> o1 == 0 ? -1 : 0);
如果o1(两个数字中的一个)为零,则使其变小,以便得到更低的索引
注意:如果不想使用ArrayList,可以使用
Arrays.sort(array,comparator)代码>如果数组中没有负数,可以对其进行排序。通过使用ArrayList,您可以以非常简单的方式完成此操作
ArrayList<Integer> integers = new ArrayList<>();
integers.add(5);
integers.add(2);
integers.add(0);
integers.add(44);
integers.add(0);
integers.add(1);
integers.add(555);
integers.forEach(System.out::println);
integers.sort(Integer::compareTo);
System.out.println("Sorted!");
integers.forEach(System.out::println);
但是,如果您确实有负数,则需要编写自己的比较器,如下所示:
integers.sort((o1, o2) -> o1 == 0 ? -1 : 0);
如果o1(两个数字中的一个)为零,则使其变小,以便得到更低的索引
注意:如果不想使用ArrayList,可以使用Arrays.sort(array,comparator)代码>不是很清楚,你能详细说明并发布代码示例和预期输出吗?一种自然的方式“推”所有的零(当谈论一个数字数组时)是排序。一种常见的情况是在数组的开头将零元素与非零元素交换。显示您尝试过的操作、预期输出和不起作用的内容是很好的。不太清楚,您能否详细说明并发布代码示例和预期输出,以自然的方式“推”所有零(在谈论数字数组时)一种常见的情况是在数组的开头将零元素与非零元素交换。展示您尝试过的操作、预期的输出和不起作用的内容会很好。这会起作用,但效率极低。O(N^2)。我的答案是O(N)。我想我应该以“简单、暴力”开始我的句子,并警告你。当他是初学者时,谈论初学者通常首先学习的东西可能会有所帮助,比如“插入排序”。当然,你是对的。我的评论不是针对你(显然你知道),而是针对任何阅读答案的人。这会奏效,但效率非常低。O(N^2)。我的答案是O(N)。我想我应该以“简单、暴力”开始我的句子,并警告你。当他是初学者时,谈论初学者通常首先学习的东西可能会有所帮助,比如“插入排序”。当然,你是对的。我的评论不是针对你(显然你知道),而是针对任何阅读答案的人。当我们在互相评论游戏中:我发现你的答案可以通过增加一些垂直间距(我认为酷人们称之为“段落”)得到显著改善;也许是算法的一种更正式的伪代码表示+尽管如此,我还是想到了这样的事情。保留第一个和最后一个的索引。然后继续这样比较,对吗?你为什么不试试呢?提示:如果你“已经考虑过了”。。。不要到这里来要求别人教你。你通过自己的实验来学习编程。你自己试试看。这比我们为您思考的“学习效果”高出100倍。如果我们的目的是将所有的零移到前面,其余的保持原来的顺序,那么排序并不是答案。@GhostCat您是一个很好的游戏。;-)当我们在互相评论游戏时:我发现你的答案可以通过增加一些垂直间距(我认为