首页 > 编程语言 >吴师兄学算法day06 双指针 485. 最大连续 1 的个数

吴师兄学算法day06 双指针 485. 最大连续 1 的个数

时间:2024-01-14 11:55:40浏览次数:24  
标签:cnt nums max day06 ans 485 减法 lastzero 指针

题目:485. 最大连续 1 的个数

易错点:

  • 考察双指的距离
  • 注意设置lastzero = -1 虚拟坐标为-1,方便做减法。
  • 注意,防止最后的1位越界。对应的处理方案就是每轮结束都有统计结果。
  • 其实减法,是左闭右右开的区间,比如,3-2 是1,            写成区间是  [2,3),减法算的是距离
  • 而几到几,是左闭右闭的区间,   比如,2到3是 2个数字,写成区间是 [2,3],几到几,统计的人数。学号1-10就是有10个人,但距离是9

代码示例:

class Solution:
    def findMaxConsecutiveOnes(self, nums: List[int]) -> int:
        # 双指针统计两个指针的距离
        lastzero = -1   # 首次是虚拟0,下标为-1 这样就可以直接减法了
        ans = 0
        for i in range(len(nums)):
            if nums[i] == 0:    # 如果为0就更新下标
                lastzero = i
            else:   # 为1就更新ans
                ans = max(ans,i-lastzero)
        return ans

扩展写法:

# 计数器
class Solution:
    def findMaxConsecutiveOnes(self, nums: List[int]) -> int:
        cnt = 0 
        max_cnt = 0
        for i in nums:
            if i == 1:  # 每次等于1就开始计数并拿到最大值
                cnt +=1
                max_cnt = max(max_cnt,cnt)
            else:   # 否则就重新计数
                cnt = 0
        return max_cnt

总结:

  • 原来减法是左闭右开,为了统计距离
  • 几到几是左闭右闭,为了统计人数,
  • 双指针的距离,这种,那就用减法。
  • 计算的时候,每轮结束就要统计完成,防止最后1位下标越界。
  • lastzero是统计距离的外面。直接减法也可以理解为(2,3] 为了把2包括,那么就要(1,3] 这样就包含2,3两个数字了,
    • 所以,lastzero就是就设置为外面的。

参考:

https://r07na4yqwor.feishu.cn/docx/SkUidiNifoGlPexrjcncPK2Qnpx

标签:cnt,nums,max,day06,ans,485,减法,lastzero,指针
From: https://www.cnblogs.com/liqi175/p/17963510

相关文章

  • 智能指针和互斥锁
    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(资源获取即初始化)技术,即资源的获取和释放应该与对象的构造和析构分......
  • 串口服务器485至以太网转换技术指南
    在现代工业和网络通信领域,串口服务器485至以太网转换技术扮演着至关重要的角色。本文旨在介绍这一技术的关键点和实际应用.串口服务器与RS-485接口串口服务器是一种网络设备,用于将串行通信(如RS-485)转换为以太网通信。RS-485接口是一种广泛应用的串行通信标准,它支持高速、远距离的多......
  • 滑动窗口(双指针的又一应用)
    滑动窗口相当于双指针的变形,通过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......
  • python通过RS485、Modbus协议读取/修改仪表数据
    目标python通过RS485的Modbus协议读取仪表相应的寄存器数据。准备工作软件安装第三方库:serial、pyserial、modbus_tkpipinstallserialpipinstallpyserialpipinstallmodbus_tk硬件一根USB转RS485的转接线(电脑本身不带RS485接口时需要)一个带Modbus通讯的仪表(例子中使用的时一......