滑动窗口
软件园里卖煎饼
以文载意,以理铸心
展开
-
第 271 场周赛T2.2104. 子数组范围和
解题思路滑动窗口两次遍历即可,并且维护最大最小值代码class Solution { public long subArrayRanges(int[] nums) { long ans = 0; for (int i=0;i<nums.length;i++){ int max = Integer.MIN_VALUE,min = Integer.MAX_VALUE; for (int j=i;j<nums原创 2021-12-13 12:36:00 · 301 阅读 · 0 评论 -
第269场周赛钛铂数据T2.半径为 k 的子数组平均值
解题思路利用前缀和,计算一个大小为k*2+1的窗口内的和代码class Solution { public int[] getAverages(int[] nums, int k) { int[] ans = new int[nums.length]; Arrays.fill(ans,-1); if (k > nums.length){ return ans; } int x = 2原创 2021-12-08 19:28:59 · 195 阅读 · 0 评论 -
每日一题:1446. 连续字符
解题思路滑动窗口代码class Solution { public int maxPower(String s) { int ans = Integer.MIN_VALUE,low = 0,high = 0; char[] chars = s.toCharArray(); while (high< chars.length){ int leng = 0; while (high< cha原创 2021-12-01 10:38:22 · 238 阅读 · 0 评论 -
字符串类题目总结
常用的算法一般使用滑动窗口和双指针可以大致分为两类:回文问题,字串包含问题如果是找回文串的题目类型,可以使用到中心扩撒法例如647题回文子串class Solution { public int countSubstrings(String s) { int ans = 0,n=s.length(); for (int i=0;i<n;i++){ //中心点为单个字符 ans+=expand(s,i,i)原创 2021-09-24 16:24:19 · 83 阅读 · 3 评论 -
滑动窗口的解题思路及模板
代码模板int left = 0, right = 0; while (right < s.size()) {// 增⼤窗⼝ window.add(s[right]); right++; while (window needs shrink) { // 缩⼩窗⼝ window.remove(s[left]);原创 2021-04-14 13:40:40 · 105 阅读 · 1 评论 -
滑动窗口:LeetCode.438. 找到字符串中所有字母异位词
解题思路因为都是小写字母,所以用一个大小为26的int数组记录在每次进行对比,如果全等就将当前的异位词加入代码class Solution { public List<Integer> findAnagrams(String s, String p) { int left=0,right=p.length()-1,slength=s.length(),plength=p.length(); char[] s1 = s.toCharArray();原创 2021-04-14 13:33:41 · 68 阅读 · 0 评论 -
滑动窗口:LeetCode.3. 无重复字符的最长子串
解题思路利用set来判断当前的串中是否包含right处的字符没有就更新串长度有滑动左窗口直到没有为止代码class Solution { public int lengthOfLongestSubstring(String s) { char[] chars = s.toCharArray(); int left=0,right=0,n=s.length(); Set<Character> set = new HashSet<原创 2021-04-14 13:29:26 · 1385 阅读 · 5 评论 -
滑动窗口:LeetCode.567. 字符串的排列
解题思路最开始想着用hashset来确认字符的出现情况,但最终发现有重复字符出现的情况所以无法使用最后使用的是int类型的数组记录 因为题目说明“第一个字符串的排列之一”所以要考虑s1的所有情况使用int也可以达到这个目的 因为只要最后字符出现次数相同就说明符合题意最后就是使用滑动窗口right和left,每滑动一下就进行一次判断是否全部符合,如果不符就break代码class Solution { public boolean checkInclusion(String s1, Str原创 2021-04-14 13:24:02 · 63 阅读 · 0 评论 -
滑动窗口:LeetCode.76. 最小覆盖子串滑动窗口
解题思路首先,我们需要找到包含t中所有字符的字串然后再找出最短的代码class Solution { public String minWindow(String s, String t) { //1 <= s.length, t.length <= 105 char[] chars = s.toCharArray(); char[] target = t.toCharArray(); String ans="";原创 2021-04-14 13:23:41 · 72 阅读 · 0 评论