zoukankan      html  css  js  c++  java
  • 【力扣】283. 移动零

    给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

    示例:

    输入: [0,1,0,3,12]
    输出: [1,3,12,0,0]
    说明:

    必须在原数组上操作,不能拷贝额外的数组。
    尽量减少操作次数。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/move-zeroes
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    public void moveZeroes(int[] nums) {
    
            //设置两个指针、一个指针只指向0,一个指针只指向1
            for(int i = 0;  i < nums.length ; i++){
                if(nums[i] == 0){
                    for(int j = i+1; j < nums.length ;j++){
                        if(nums[j] != 0){
                            swap(nums,i,j);
                            break;
                        }
                    }
                }
            }
    
        }
    
        private void swap(int[] nums ,int a,int b){
            int temp = nums[a];
            nums[a] = nums[b];
            nums[b] = temp;
        }

    参考题解:

    public void moveZeroes(int[] nums) {
    
            //设置两个指针、一个指针只指向0,一个指针只指向1
            int zeroIndex = 0;
            int oneIndex = 0;
            while(oneIndex < nums.length){
                if(nums[oneIndex] != 0){
                    swap(nums,oneIndex,zeroIndex);
                    zeroIndex++;
                }
                oneIndex++;
            }
    
        }
    
        private void swap(int[] nums ,int a,int b){
            int temp = nums[a];
            nums[a] = nums[b];
            nums[b] = temp;
        }

    时间复杂度:O(n) -- 题解有可能本来就是末尾为0了,但是还要再交换一遍

    空间复杂度:O(1)

    一个入行不久的Java开发,越学习越感觉知识太多,自身了解太少,只能不断追寻
  • 相关阅读:
    数学分析学习笔记
    参数注解检查方法入参
    AOP 织入 Redis 缓存
    手写单例 Redis 分布式锁
    Leetcode 347 前K个高频元素 topK问题手写大顶堆
    PCB 网页WebODB++与Genesis同屏实现方法
    Git多密钥配置
    npm安装问题解决
    设计模式
    odoo14里面开发一个简单的action.client 的tag 模板例子
  • 原文地址:https://www.cnblogs.com/fengtingxin/p/14003475.html
Copyright © 2011-2022 走看看