求职Leetcode题目(11)

news/2024/9/23 23:32:04/

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.ppmy.cn/news/1529545.html

相关文章

openFrameworks_如何使用ofxXmlSettings和ofxGui来创建识别界面

效果图&#xff1a; 代码及详解 1.添加两个插件的头文件: #include "ofxGui.h" #include "ofxXmlSettings/src/ofxXmlSettings.h" 2.添加GUI部分&#xff0c;然后在.h声明右边的openframeworks的UI部分&#xff0c;包括面板ofxPanel&#xff0c;按钮ofx…

全栈开发(二):springBoot3连接mysql数据库

spring.application.namedemo2 spring.datasource.urljdbc:mysql://localhost:3306/数据库名字?useUnicodetrue&characterEncodingUTF-8&serverTimezoneUTC spring.datasource.username账号 spring.datasource.password密码 spring.datasource.driver-class-namecom.m…

一篇关于网络的文章

网络的兴起和发展已经深刻地改变了我们的生活方式和社会结构。从互联网的诞生到现在&#xff0c;网络已经成为了我们生活中不可或缺的一部分。通过网络&#xff0c;我们可以在世界的任何角落与人们进行沟通和交流。我们可以获得全球各地的新闻和信息&#xff0c;学习知识&#…

速盾:高防cdn除了快还有什么好处?

高防CDN&#xff08;Content Delivery Network&#xff09;是现今互联网基础架构中的一项重要技术&#xff0c;它不仅能够提供快速的内容分发&#xff0c;还具备许多其他的好处。以下将详细介绍高防CDN的优势和好处。 首先&#xff0c;高防CDN能够提供快速的内容分发。由于CDN…

leetcode练习 二叉树的层序遍历

给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]]一般层序遍历&#xff0c;我…

自然语言处理实例

引子:基于聊天机器人项目的自然语言处理(NLP)学习路线 自然语言处理(Natural Language Processing,简称 NLP)是人工智能的重要分支,旨在帮助计算机理解、生成和处理人类语言。NLP 技术广泛应用于搜索引擎、机器翻译、语音识别、文本摘要、情感分析、对话系统等领域。为…

使用 PHPstudy 建立ThinkPHP8 本地集成环境

安装Composer 下载地址&#xff1a;https://getcomposer.org/Composer-Setup.exehttps://getcomposer.org/Composer-Setup.exe 打开PHPstudy创建网站&#xff1a; cmd终端进入PHPstudy www根目录下&#xff1a; 执行代码&#xff1a;cd phpstudy www 根目录地址 cd C:\phpst…

基于TCP协议的网络通信

TCP即传输控制协议&#xff0c;基于TCP协议的网络通信总是面向连接的&#xff0c;在通信过程中需要进行“三次握手&#xff0c;四次挥手”&#xff0c;这是众所周知的&#xff0c;所以这里不过多赘述。我们都知道TCP协议传输数据比较稳定&#xff0c;那么为什么稳定&#xff0c…