Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将数组中的所有零向前或向后移动_Java_Arrays - Fatal编程技术网

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您是一个很好的游戏。;-)当我们在互相评论游戏时:我发现你的答案可以通过增加一些垂直间距(我认为