首页 > 编程语言 >吴师兄学算法day06 双指针 283. 移动零

吴师兄学算法day06 双指针 283. 移动零

时间:2024-01-14 15:55:20浏览次数:30  
标签:slow nums day06 fast range len 283 指针

题目:283. 移动零

注意点:

  • 可以交换,也可以最后补零

代码示例:

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        slow = 0
        for fast in range(len(nums)):
            if nums[fast] != 0: # 只要不等于0 就交换
                nums[slow],nums[fast] = nums[fast],nums[slow]
                slow +=1

补0写法:

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        # 设置一个变量,用来指向经过一系列操作后数组中所有为 0 元素的第一个位置上
        # 一开始默认在索引为 0 的位置
        slow = 0

        # 从头到尾遍历数组
        # 遍历完毕之后,slow 指向了一个为 0 的元素,或者如果数组中不存在 0 ,就和 fast 一样,超过了数组的范围
        for fast in range(len(nums)) : 

            # 在遍历过程中,如果发现访问的元素是非 0 元素
            # 说明 slow 不在正确的位置上,需要向后移动,寻找合适的位置
            if nums[fast] != 0:

                # 这个时候,原先 slow 的值需要被 fast 的值覆盖
                nums[slow] = nums[fast]

                # slow 需要向后移动,寻找合适的位置
                slow += 1

        # 接下来,只需要把 slow 极其后面所有的元素都设置为 0 就行
        for i in range(slow,len(nums)) : 

            # 都设置为 0 
            nums[i] = 0

总结:QQSS

参考:

https://ahym1n4sq5.feishu.cn/docx/BgbudqqEEoEHjRxjiV8c1LHwnBc

 

标签:slow,nums,day06,fast,range,len,283,指针
From: https://www.cnblogs.com/liqi175/p/17963796

相关文章

  • 吴师兄学算法day06 485. 最大连续 1 的个数
    题目:485. 最大连续1的个数易错点:第一眼想到从队尾开始交换,后来发现不行。 代码示例:classSolution:defmoveZeroes(self,nums:List[int])->None:"""Donotreturnanything,modifynumsin-placeinstead."""slow=......
  • 吴师兄学算法day06 双指针 485. 最大连续 1 的个数
    题目:485. 最大连续1的个数易错点:考察双指的距离注意设置lastzero=-1虚拟坐标为-1,方便做减法。注意,防止最后的1位越界。对应的处理方案就是每轮结束都有统计结果。其实减法,是左闭右右开的区间,比如,3-2是1,      写成区间是 [2,3),减法算的是距离而几到几,......
  • 智能指针和互斥锁
    RAII:ResourceAcquisitionIsInitialization(资源获取即初始化)classDynamicArray{private:int*data;//指向动态分配的数组的指针public:DynamicArray(intsize){data=newint[size];//在构造函数中分配内存}~DynamicArray(){......
  • 字符指针与字符数组的初始化
    字符指针可以初始化赋值一个字符串,字符数组初始化也可以赋值一个字符串。两者的区别是什么呢?#include<stdio.h>#include<string.h>intmain(){char*p="hello";//把字符串常量"hello"的首地址赋给pcharc[10]="hello";//等价于strcpy(c,"hello");c[......
  • C++ --- 智能指针
    一、智能指针存在的意义智能指针主要解决以下问题:(1)内存泄漏:内存手动释放,使用智能指针可以自动释放。(2)共享所有权指针的传播和释放,比如多线程使用同一个对象时析构问题。 智能指针的实现依赖于C++语言的RAII(资源获取即初始化)技术,即资源的获取和释放应该与对象的构造和析构分......
  • 滑动窗口(双指针的又一应用)
    滑动窗口相当于双指针的变形,通过j指向末尾边界,这样遍历就只有O(n)的数量级,再通过i指针作为起始边界,while循环确定最短的长度。因为ij所框定的边界像窗口,所以叫滑动窗口。用于解决的问题是最优区间的问题,记忆方法是右遍历,左判断,确定最佳区间。还有一个技巧是可以用INT_MAX表示一......
  • 双指针(1)
    目录344反转字符串替换数字反转单词null344反转字符串我如果要反转,就是最前面和最后面的字符进行交换,//双指针的应用classSolution{public:voidreverseString(vector<char>&s){intleft=0,right=s.size()-1;while(left<right){......
  • 双指针法又一感悟
    最开始做的时候没想到双指针法,用了简单的冒泡排序结果超时了,题解中的sort函数用的是快排。点击查看代码voidquick_sort(inta[],intl,intr){if(l<r){inti,j,x;i=l;j=r;x=a[i];while(i<j)......
  • 数组指针
    在数组指针中,*和[]的意义是相似的,都是优先降维数在降指针的级数比如p是一个指向n维数组的一级指针,那么p[][][]就是一个指向n-3维数组的指针,打了n个中括号之后就变成了指向一个点的指针,此时再*一下就变成了了值(或者再括号一下)如果p是一个指向n维数组的三级指针,那么打了n个中括号......
  • 《算法竞赛》---三指针
    ----双指针(尺取法)1.找出指定和的整数对----p37(书页)哈希表#include<bits/stdc++.h>usingnamespacestd;inta[100010];intmain(){ios::sync_with_stdio(false);cin.tie();cout.tie();unordered_map<int,bool>q;intn,m;cin>>n>>m;fo......