zoukankan      html  css  js  c++  java
  • 539. 移动零

    给一个数组 nums 写一个函数将 0 移动到数组的最后面,非零元素保持原数组的顺序

     注意事项

    1.必须在原数组上操作
    2.最小化操作数

     
    样例

    给出 nums = [0, 1, 0, 3, 12], 调用函数之后, nums = [1, 3, 12, 0, 0].

    很羞愧,想了好一会也没想出什么很妙的方法,半天才写出来个无脑能AC的

     1 void moveZeroes(vector<int>& nums) {
     2     // write your code here
     3         int right = nums.size()-1;
     4         int temp;
     5         for (int i = 0; i<=right;) {
     6             if (nums[i] == 0) {
     7                 temp = i;
     8                 while (temp<right) {
     9                     swap(nums[temp], nums[temp+1]);
    10                     temp++;
    11                 }
    12                 right--;
    13             }
    14             else {
    15                 i++;
    16             }
    17         }
    18     }

    就是查到0就一路向后挪,挪到最后就定死不动了,所以再把最后位置向前挪一个

    把i++放在else里面是因为有连续0的情况。

    看看别人的解法把

     1  void moveZeroes(vector<int>& nums) {  
     2         // Write your code here  
     3         int i = 0;  
     4         int j = 0;  
     5         int len = nums.size();  
     6         while( i < len ) {  
     7             if( nums[i] != 0 ) {  
     8                 nums[j] = nums[i];  
     9                 j++;  
    10             }  
    11             i++;  
    12         }  
    13           
    14         while( j < len ) {  
    15             nums[j] = 0;  
    16             j++;  
    17         }  
    18     }  

    第一个whilie中,j保证指向0的位置,这样当i指向非0数时,覆盖掉j指向位置

    当覆盖完毕后,在后面补0

    这样有效的减少了操作数

  • 相关阅读:
    springboot 默认日志
    redis 实现分布式锁
    java 线程池等待所有线程执行完毕
    java 线程池
    springcould 五大组件详解
    java 导出excel
    java 下载excel模板
    java 8 通过某个字段去重
    leetcode算法题-461.汉明距离
    java Barcode4j生成条形码并添加至pdf打印
  • 原文地址:https://www.cnblogs.com/TheLaughingMan/p/8202344.html
Copyright © 2011-2022 走看看