求职Leetcode题目(11)

news2024/9/24 9:39:57

1.最长连续序列 

解题思路:

方法一:

  1. • 首先对数组进行排序,这样我们可以直接比较相邻的元素是否连续。
  2. • 使用一个变量 cur_cnt 来记录当前的连续序列长度。
  3. • 遍历排序后的数组:
  4.   如果当前元素与前一个元素相等,则跳过(因为相等的元素不会影响连续性)。
  5.   如果当前元素与前一个元素相差 1,则当前元素是连续序列的一部分,增加计数器 cur_cnt。
  6.  如果当前元素与前一个元素不连续,说明当前连续序列结束,更新最长连续序列 max,并重置 cur_cnt 为 1,准备重新计数。
  7. • 在遍历结束后,返回最长的连续序列长度。

这种方法思维就就比较简单,而且最后的效率也很不错!

class Solution {
    public int longestConsecutive(int[] nums) {
        Arrays.sort(nums);
        int max =0;
        for(int i =0;i<nums.length;i++){
            int cur_cnt=1;
            while((i+1<nums.length&&nums[i+1]==nums[i]+1)||(i+1<nums.length&&nums[i+1]==nums[i])){
                if(nums[i+1]==nums[i]){
                    i++;
                    continue;
                }
                cur_cnt++;
                i++;
        }
        max=Math.max(max,cur_cnt);
    }
    return max;
}
}

 方法二:

对于数组中存在的连续序列,为了统计每个连续序列的长度,我们希望直接定位到每个连续序列的起点,从起点开始遍历每个连续序列,从而获得长度。

那么如何获取到每个连续序列的起点呢,或者说什么样的数才是一个连续序列的起点?
答案是这个数的前一个数不存在于数组中,因为我们需要能够快速判断当前数num的前一个数num - 1是否存在于数组中。

同时当我们定位到起点后,我们就要遍历这个连续序列,什么时候是终点呢?
答案是当前数num的后一个数nunm + 1不存在于数组中,因此我们需要能够快速判断当前数num的后一个数num + 1是否存在于数组中。

为了实现上述需求,我们使用哈希表来记录数组中的所有数,以实现对数值的快速查找。 

class Solution {
    public int longestConsecutive(int[] nums) {
      int res =0;//记录最长序列的长度
      Set<Integer> numSet =new HashSet<>();//记录所有的数值
      for(int num:nums){
        numSet.add(num);//将数组中的值加入到hash表中
      }
      int seqLen;//连续序列的长度
      for(int num:numSet){
        //如果当前的书是一个连续序列的起点,统计这个连续序列的长度
         if(!numSet.contains(num-1)){
            seqLen =1;
            while(numSet.contains(++num)) seqLen++;//不断查找连续序列,直到num的下一个数不存在数组中
            res =Math.max(res,seqLen);//更新最长连续序列长度
         }
      }
      return res;
}

2.单词拆分

  • 将字符串 s 长度记为 n,wordDict 长度记为 m。为了方便,我们调整字符串 s 以及将要用到的动规数组的下标从 1 开始。
  • 定义 f[i] 为考虑前 i 个字符,能否使用 wordDict 拼凑出来:当 f[i]=true 代表 s[1...i] 能够使用 wordDict 所拼凑,反之则不能。
  • 不失一般性考虑 f[i] 该如何转移:由于 f[i] 需要考虑 s[1...i] 范围内的字符,若 f[i] 为 True 说明整个 s[1...i] 都能够使用 wordDict 拼凑,自然也包括最后一个字符 s[i] 所在字符串 sub。
  • 我们可以枚举最后一个字符所在字符串的左端点 j,若 sub=s[j...i] 在 wordDict 中出现过,并且 f[j−1]=True,说明 s[0...(j−1)] 能够被拼凑,并且子串 sub 也在 wordDict,可得 f[i] = True。
  • 为了快速判断某个字符是否在 wordDict 中出现,我们可以使用 Set 结构对 wordDict[i] 进行转存。
class Solution {
    public boolean wordBreak(String s, List<String> wordDict) {
        Set<String> set =new HashSet<>();
        for(String word:wordDict) set.add(word);
        int n =s.length();
        boolean[] f =new boolean[n+10];
        f[0]=true;
        for(int i =1;i<=n;i++){
            for(int j =1;j<=i&&!f[i];j++){
                String sub =s.substring(j-1,i);
                if(set.contains(sub))f[i]=f[j-1];
            }
        }
        return f[n];
    }
}

3.买卖股票的最佳时机III

class Solution {
    public int maxProfit(int[] prices) {
        int f1 =-prices[0],f2=0,f3=-prices[0],f4=0;
        for(int i =1;i<prices.length;i++){
            f1=Math.max(f1,-prices[i]);
            f2=Math.max(f2,f1+prices[i]);
            f3=Math.max(f3,f2-prices[i]);
            f4=Math.max(f4,f3+prices[i]);
        }
        return f4;

    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2160035.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文档矫正算法:DocTr++

文档弯曲矫正&#xff08;Document Image Rectification&#xff09;的主要作用是在图像处理领域中&#xff0c;对由于拍摄、扫描或打印过程中产生的弯曲、扭曲文档进行校正&#xff0c;使其恢复为平整、易读的形态。 一. 论文和代码 论文地址&#xff1a;https://arxiv.org/…

AI辅助编码工具如何影响着程序员开发群体

AI辅助编码工具的出现对程序员开发群体产生了深远的影响&#xff0c;有一些初步基础的程序员&#xff0c;可以借助AI工具的加持&#xff0c;生产效率大大提升&#xff0c;达到中高级程序员的水平。 这些影响可以从多个角度来分析&#xff1a; 提高开发效率&#xff1a; AI工具…

跳蚤市场小程序|基于微信小程序的跳蚤市场(源码+数据库+文档)

跳蚤市场小程序目录 基于微信小程序的饮品点单系统的设计与实现 一、前言 二、系统功能设计 三、系统实现 管理员功能实现 商品信息管理 商品订单管理 论坛管理 用户管理 5.1.5 新闻信息管理 用户功能实现 四、数据库设计 1、实体ER图 2、具体的表设计如下所示&a…

毕业设计选题:基于ssm+vue+uniapp的英语学习激励系统小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

STM32引脚输入

文章目录 前言一、看原理图二、开始编程1.开启时钟2.配置GPIOA.0 上拉输入3.读取 GPIOA.0 引脚 GPIOA_IDR 0位上是1&#xff08;按键松开&#xff09;&#xff0c;输入就是高电平&#xff0c;否则就是低电平&#xff08;按键按下&#xff09; 三、完整程序四 测试效果总结 前言…

Spring MVC的应用

目录 1、创建项目与maven坐标配置 2、核心配置 3、启动项目测试 4、不同请求参数在controller的配置 4.1 servlet API 4.2 简单类型 4.3 pojo类型 4.4 日期类型 4.5 restful风格4种操作类型 4.5.1 GET&#xff1a;获取资源 4.5.2 POST&#xff1a;新建资源 4.5.3 P…

【Godot4.3】自定义数列类NumList

概述 数列是一种特殊数组。之前写过等比、等差数列、斐波那契等数列的求取函数。今天就汇总到一起&#xff0c;并添加其他的一些数列&#xff0c;比如平方数、立方数、三角形数等。 这里我首先采用以前比较喜欢的静态函数库的写法&#xff0c;然后在其基础上改进为基于类继承…

基于飞腾平台的OpenCV的编译与安装

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

ChatGPT 推出“Auto”自动模式:智能匹配你的需求

OpenAI 最近为 ChatGPT 带来了一项新功能——“Auto”自动模式&#xff0c;这一更新让所有用户无论使用哪种设备都能享受到更加个性化的体验。简单来说&#xff0c;当你选择 Auto 模式后&#xff0c;ChatGPT 会根据你输入的提示词复杂程度&#xff0c;自动为你挑选最适合的AI模…

解密 Python 的 staticmethod 函数:静态方法的全面解析!

更多Python学习内容&#xff1a;ipengtao.com 在 Python 中&#xff0c;staticmethod 函数是一种装饰器&#xff0c;用于将函数转换为静态方法。静态方法与实例方法和类方法不同&#xff0c;它们不需要类实例作为第一个参数&#xff0c;也不需要类作为第一个参数&#xff0c;因…

只用几行代码,不依赖任何框架?SMTFlow 轻松实现前端流程图

只用几行代码&#xff0c;不依赖任何框架&#xff1f;SMTFlow 轻松实现前端流程图&#xff01; 在前端开发中&#xff0c;如果你需要一个简单好用的流程图设计工具&#xff0c;SMTFlow 绝对是你的不二之选&#xff01;本文将介绍 SMTFlow 的核心功能、特点以及如何快速上手。 工…

C++中set和map的使用

1.关联式容器 序列式容器里存储的是元素本身&#xff0c;如vector、list、deque 关联式容器即&#xff0c;容器中存储<key&#xff0c;value>的键值对&#xff0c;树型结 构的关联式容器主要有四种&#xff1a;map、set、multimap、multiset。他们都使用平衡搜索树(即红…

项目实战:lngress搭建Nginx+WP论坛+MariaDB

1. 网站架构 本次部署形式完全舍弃 Docker&#xff0c;将所有应用都置于Kubernetes&#xff0c;采用 Deployment 而非单 Pod 部署&#xff0c;稳定性得到升级。 2. 部署 MariaDB [rootk8s-master ~]# mkdir tdr [rootk8s-master ~]# cd tdr/ &#xff08;1&#xff09;定义 …

Flowable7.0.1框架严重bug,流程跳转到指定节点导致流程中断

一、Bug描述 使用7.0.1版本的 moveActivityIdsToSingleActivityId 或 moveExecutionsToSingleActivityId实现节点跳转&#xff0c;程序不会报错&#xff0c;但是act_ru_task 没有生成新的任务&#xff0c;导致流程中断&#xff0c;这是相当严重的bug。 经过多次测试&#xff…

【LLM多模态】文生视频综述From Sora What We Can See: A Survey of Text-to-Video Generation

note 现在很多主流的文生视频应该还是Diffusion-based 基于扩散模型的方法这篇综述将现有研究按照三个维度进行分类&#xff1a;进化生成器&#xff08;Evolutionary Generators&#xff09;、卓越追求&#xff08;Excellent Pursuit&#xff09;、现实全景&#xff08;Realis…

LeetCode讲解篇之75. 颜色分类

文章目录 题目描述题解思路题解代码 题目描述 题解思路 我们可以将最终结果看成连续的三个区间&#xff0c;第一个区间内全是0&#xff0c;第二个区间内全是1&#xff0c;第三个区间内全是2 &#xff0c;其中这三个区间的长度都可以为0 我们可以将不断扩张 我们记录0区间的右…

滴滴开源项目分享来啦~

活动&#xff1a;参与开源项目&#xff0c;获得精美礼品 活动时间&#xff1a;2024年09月23-2024年10月23 活动详情请查看&#xff1a; ❤️&#x1f31f; Who is using XIAOJUSURVEY&#xff1f; Issue #64 didi/xiaoju-survey GitHub 活动奖品&#xff1a; ​ 不管你是…

基于单片机多点无线温度监控系统设计

本设计STC89C52RC单片机作为主控芯片&#xff0c;能够远程监控多个位置的温度变化。使用一个主机来接收和监控三个从机收集到的温度信息&#xff0c;利用DS18B20温度传感器采集温度信息&#xff0c;采用GL24S无线通讯模块将数据传输给主机进行接收&#xff0c;信息显示在主机连…

DesignMode__unity__抽象工厂模式在unity中的应用、用单例模式进行资源加载

目录 抽象工厂模式 思维导图 接口&#xff08;抽象类&#xff09; 工厂接口 抽象产品类 抽象武器接口 抽象人物接口 具体工厂和具体产品 具体工厂 &#xff08;1&#xff09;产品接口&#xff0c;生成具体人物 &#xff08;2&#xff09;武器接口&#xff0c;生成具体…

搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(五)-聚合

聚合 聚合基于Query结果的统计&#xff0c;执行过程是搜索的一部分&#xff0c;Onesearch支持0代码构建聚合&#xff0c;聚合目前完全在引擎层 0代码聚合 上图是聚合的配置&#xff0c;包括2个pdm文档聚合统计 termsOfExt term桶聚合&#xff0c;统计ext&#xff0c;如&…