【二刷hot-100】day2

server/2024/10/18 5:32:10/

目录

1.无重复字符的最长子串

 2.找到字符串中所有字母异位词

3.和为 K 的子数组

 4.滑动窗口最大值

1.无重复字符的最长子串

java">class Solution {public int lengthOfLongestSubstring(String s) {Map<Character,Integer> dict =new HashMap<>();int ret=0;int i=-1;for(int j=0;j<s.length();j++){char c=s.charAt(j);//如果字符在字典存在if(dict.containsKey(c)){//确保左指针不会向左移动//更新左指针为当前字符索引和当前左指针的最大值i=Math.max(dict.get(c),i);}//当前字符和索引存入字典dict.put(c,j);ret=Math.max(ret,j-i);}return ret;}
}

 2.找到字符串中所有字母异位词

经典思路:

(s中统计p字符串每个字符的出现次数)

java">        //s中找p中每个字符的出现次数Map<Character,Integer> counter1=new HashMap<>();for(char c:p.toCharArray()){counter1.put(c,counter1.getOrDefault(c,0)+1);}

 

java">class Solution {public List<Integer> findAnagrams(String s, String p) {List<Integer> ans = new ArrayList<>();// 初始化一个数组来统计字符串 p 中每个字符的出现次数int[] cnt = new int[26];for(int i = 0; i < p.length(); i++){cnt[p.charAt(i) - 'a']++;}// l 和 r 分别表示滑动窗口的左右边界int l = 0;for(int r = 0; r < s.length(); r++){// 更新当前窗口中字符的计数数组cnt[s.charAt(r) - 'a']--;// 从左侧收缩窗口,直到当前字符的计数在限定范围内while(cnt[s.charAt(r) - 'a'] < 0){cnt[s.charAt(l) - 'a']++;l++;}// 检查当前窗口大小是否等于字符串 p 的大小if(r - l + 1 == p.length()){ans.add(l);}}return ans;}
}

3.和为 K 的子数组

java">class Solution {public int subarraySum(int[] nums, int k) {int ret=0;int s=0;HashMap<Integer,Integer> dict=new HashMap<>();//数组-1的位置前缀和应该是1dict.put(0,1);for(int x:nums){s+=x;//如果存在s-k的子数组,加上数量ret+=dict.getOrDefault(s-k,0);dict.put(s,dict.getOrDefault(s,0)+1);}return ret;}
}

 4.滑动窗口最大值

java">import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;class Solution {public int[] maxSlidingWindow(int[] nums, int k) {// 创建双端队列Deque<Integer> deque = new LinkedList<>();List<Integer> ret = new ArrayList<>();int n = nums.length;for (int i = 0; i < n; i++) {// 如果双端队列不为空且当前元素的索引与队首元素的索引之差大于等于窗口大小 k,移除队首元素while (!deque.isEmpty() && i - deque.peekFirst() >= k) {deque.pollFirst();}// 保持双端队列递减while (!deque.isEmpty() && nums[deque.peekLast()] < nums[i]) {deque.pollLast();}deque.addLast(i);// 当窗口大小达到 k 时,开始记录窗口最大值if (i >= k - 1) {ret.add(nums[deque.peekFirst()]);}}// 将 List<Integer> 转换为 int[]int[] finalResult = new int[ret.size()];for (int i = 0; i < ret.size(); i++) {finalResult[i] = ret.get(i);}return finalResult;}
}

 顶不了了,好多java语法不会,呜呜呜。


http://www.ppmy.cn/server/132687.html

相关文章

设计模式和软件框架的关系

设计模式和软件框架在软件开发中都有助于解决复杂问题和提高代码质量&#xff0c;但它们在概念和使用上存在一些区别。它们的关系可以通过以下几点理解&#xff1a; 层次与抽象程度 设计模式&#xff08;Design Patterns&#xff09;是一组通用的、可复用的解决方案&#xff0c…

除GOF23种设计模式之简单工厂模式

文章目录 1. 简介2. 代码2.1 抽象类&#xff1a;Course.java2.2 产品A:JavaCourse.java2.3 产品B:PythonCourse.java2.4 工厂:CourseFactory.java2.5 测试&#xff1a;Test.java 3. 心得参考链接&#xff08;无&#xff09; 1. 简介 简单工厂模式(Simple Factory Patern):又称…

Unix Standardization and Implementations

Unix标准化 在Unix未制定较为完备的标准时&#xff0c;各个平台的系统调用方式各异&#xff0c;所开发出的应用程序存在可移植性差的特点&#xff0c;因此人们呼吁指定一套Unix标准来规范接口&#xff0c;增加应用程序的可移植性。所谓Unix标准即适用于Unix环境下的一系列函数…

【算法】约瑟夫环问题

据说著名的犹太历史学家Josephus有过以下故事&#xff0c; 罗马人占领乔塔帕特&#xff0c; 39个犹太人与Josephus和他的朋友躲在洞中&#xff0c;其中39个犹太人决定自杀&#xff0c; &#xff0c;他们的自杀方式是41个人绕成一圈&#xff0c;第一个人报数1&#xff0c;报数到…

M1 Mac打开Jupyter notebook

当我成功安装了Jupyter之后&#xff0c;发现无法通过 jupyter notebook 开始工作。 最初的问题是 zsh command not found 该问题是个路径问题&#xff0c;通过添加PATH环境变量就行了&#xff0c;设置环境变量时需要注意&#xff0c;zshrc和bash_profile中都可以设置&…

基于Matlab的人脸识别系统设计与仿真(含源文

目录 第一章 绪论 1.1 研究背景 1.2 人脸图像识别的应用前景 1.3 本文研究的问题 1.4 识别系统构成 1.5 论文的内容及组织 第二章 图像处理的Matlab实现 2.1 Matlab简介 2.2 数字图像处理及过程 2.2.1图像处理的基本操作 2.2.2图像类型的转换 2.2.3图像…

串口(UART)的FPGA设计(接收与发送模块)

目录 串口基础知识 一、什么是串口?有哪些特点? 二、常见的串口通信协议有哪些?他们有什么区别?

Failed to connect to github.com port 443

git push无法连接443端口 **问题1****方法一&#xff1a;取消代理设置**git命令 其他解决方案1. **设置 Git 使用 HTTP 而不是 HTTPS**2. **检查证书**3. **配置 Git 忽略 SSL 验证&#xff08;不推荐&#xff09;**4. **检查代理设置** 问题1 Failed to connect to github.com…