首页 > 其他分享 >LCP 485. 最大连续 1 的个数[lleetcode -11]

LCP 485. 最大连续 1 的个数[lleetcode -11]

时间:2024-09-07 22:52:46浏览次数:12  
标签:lleetcode 11 return LCP index int currentLength vec maxLength

从今天起,我们的算法开始研究搜索,首先就是DFS深度优先搜索(depth-first seach,DFS)在搜索到一个新的节点时,立即对该新节点进行遍 历;因此遍历需要用先入后出的栈来实现,也可以通过与栈等价的递归来实现。对于树结构而言, 由于总是对新节点调用遍历,因此看起来是向着“深”的方向前进。

下面是一个一维的DFS算法

LCP 485. 最大连续 1 的个数

给定一个二进制数组 nums , 计算其中最大连续 1 的个数。

示例 1:

输入:nums = [1,1,0,1,1,1]
输出:3
解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.

示例 2:

输入:nums = [1,0,1,1,0,1]
输出:2

解决方案

class Solution {
public:
    int dfs(const vector<int>& vec, int index) {
        if (index >= vec.size() || vec[index] == 0) {
            return 0; // 结束递归,遇到0或者越界
        }
        // 否则,当前1的长度加上后续的连续1的长度
        return 1 + dfs(vec, index + 1);
    }
    int findMaxConsecutiveOnes(vector<int>&     vec) {
        int maxLength = 0;
        int i = 0;

        while (i < vec.size()) {
            if (vec[i] == 1) {
                // 找到1时开始DFS计算连续1的长度
                int currentLength = dfs(vec, i);
                maxLength = max(maxLength, currentLength);
                // 跳过这段连续的1
                i += currentLength;
            } else {
                i++;
            }
        }

        return maxLength;
    }
};

虽然解决问题的效率不高(我没有把击败图填出来ヾ(•ω•`)o),但是这个问题作为引入是比较好的,因为1维的数组的递归我们还是比较好想象的,下面是一些标记,让你对这个程序的认识更深刻

#include <vector>
#include <iostream>
using namespace std;


//求最长的连续1

class Solution {
public:
    vector<int> tag;
    int dfs(const vector<int>& vec, int index) {
        if (index >= vec.size() || vec[index] == 0) {
            return 0; // 结束递归,遇到0或者越界
        }
        // 否则,当前1的长度加上后续的连续1的长度
        return 1 + dfs(vec, index + 1);
    }

    int findMaxConsecutiveOnes(vector<int>& vec) {
        int maxLength = 0;
        int i = 0;

        while (i < vec.size()) {
            if (vec[i] == 1) {
                // 找到1时开始DFS计算连续1的长度
                int currentLength = dfs(vec, i);
                tag.push_back(currentLength);
                maxLength = max(maxLength, currentLength);
                // 跳过这段连续的1
                i += currentLength;
                tag.resize(tag.size() + currentLength-1, -1);
            }
            else {
                i++;
                tag.push_back(0);
            }
        }

        return maxLength;
    }
};

ostream& operator<<(ostream& os, vector<int> vec)
{
    for (auto elem : vec)
    {
        if (elem == -1)
        {
            os << "~" << "\t";
        }else
        os << elem << "\t";
    }
    os << endl;
    return os;
}

int main()
{
    vector<int> vec = { 1,1,0,1,1,1 };
    Solution ans;
    cout << ans.findMaxConsecutiveOnes(vec) << endl;
    cout << vec;
    cout << ans.tag;

    return 0;
}

运行结果是

3
1       1       0       1       1       1
2       ~       0       3       ~       ~

标签:lleetcode,11,return,LCP,index,int,currentLength,vec,maxLength
From: https://blog.csdn.net/FlamBoyanceI/article/details/142005983

相关文章

  • 东方博宜oj题解1161-1165(c++)
    各位读者们,抱歉,因为最近的时间原因,所以更新频率比较低。1161:1161-元素插入有序数组-东方博宜OJ#include<bits/stdc++.h>usingnamespacestd;intmain(){ intn,s,c; cin>>c>>n; inta[n];//定义数组 for(inti=0;i<n;i++){ cin>>a[i]; } s=n;//设c是最大的......
  • Paladin® HD系列: 245-8214-11V、245-8216-11V、245-8218-11V、245-8219-11V、245-82
    优化的密度和性能Paladin®HD互连系统具有高密度,支持112GB/s的数据速率,提供高带宽,在1U空间内支持多达144个正交差分对。PaladinHD采用平衡对结构;采用单独组装和分立屏蔽差分对,配备颠覆性的混合板固定机构,可实现高密度传输。配接接口旨在优化空间并避免传统的正交"扭曲"。Paladin......
  • 1143. 最长公共子序列(leetcode)
    https://leetcode.cn/problems/longest-common-subsequence/description/经典题,老题回顾classSolution{publicintlongestCommonSubsequence(Stringtext1,Stringtext2){//f[i][j]表示所有在第一个序列前i个数中选择,在第二个序列前j个数中选择得到的最长......
  • 11. MyBatis的一级缓存和二级缓存有什么区别?如何配置和使用二级缓存?
    在MyBatis中,缓存机制用于减少数据库访问次数,提高应用程序性能。MyBatis提供了两级缓存:一级缓存和二级缓存。1.一级缓存(LocalCache)作用范围:一级缓存作用于SqlSession级别。即在同一个SqlSession中执行相同的SQL查询,如果查询参数相同,MyBatis会从缓存中直接返回......
  • 【每日刷题】Day112
    【每日刷题】Day112......
  • 配置免安装版的apache-tomcat环境,jdk11版本以上。解决控制台环境配置显示成功,确打不开
    我这里下的是jdk22版,https://download.oracle.com/java/22/latest/jdk-22_windows-x64_bin.ziphttps://download.oracle.com/java/22/latest/jdk-22_windows-x64_bin.zip 解压后放在没有中文路径的地方。win+s搜env回车打开环境变量,新建一个变量名:JAVA_HOME,值:为你的jdk解压......
  • 【小白深度教程 1.11】手把手教你使用 PSMNet 估计视差和计算深度,并映射到 3D 点云(含
    【小白深度教程1.11】手把手教你使用PSMNet估计视差和计算深度,并映射到3D点云(含Python代码)1.PSMNet简介2.环境配置3.下载预训练模型4.修改推理代码5.用PSMNet估计视差6.报错解决7.映射到3D点云8.对比传统方法9.点云可视化在之前的章节......
  • rk3566 rk3588 Android11/13 给内置APP添加相关权限,无需手动同意APP权限
    现象:打开APP会跳出权限弹窗,给APP相关权限才能够使用APP。目录1、adb查看logcat2、在SystemUIService.java内给APP添加加权限3、开机自启动APP4、executeCMD函数1、adb查看logcat打开APP,logcat会打印APP包名。我这边包名是com.jhooit.endoscope2、在SystemUIService.......
  • rk3566 android11 识别WiFi/蓝牙芯片模块有误,导致WiFi、蓝牙打不开的情况
    现象:WiFi、蓝牙驱动已安装,设备树等配置都已完成,但是WiFi/蓝牙还是打不开,要排除是否是开发板识别蓝牙WiFi芯片有误的情况。目录一、WIFI芯片识别流程二、WiFi芯片识别有误1、adb命令查看加载的WIFI芯片2、WIFI芯片对应的pidvid3、查看WiFi芯片设备和ID号4、修改默认加......
  • ffmpeg(各个系统版本安装- Windows11-Mac-Linux)
    各个系统上的安装不建议使用编译安装,大佬的话可以编译安装会各种环境问题,直接使用别人安装好的就行1.Windows11上安装ffmpeg1.官网下载ffmpeg进入DownloadFFmpeg网址,点击下载windows版ffmpeg,使用别人编译好的版本即可在releasebuilds里面选择一个版本(使用release......