欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > <02.22>Leetcode100

<02.22>Leetcode100

2025/2/24 2:54:46 来源:https://blog.csdn.net/Shuzi_master7/article/details/145800388  浏览:    关键词:<02.22>Leetcode100

  滑动窗口要求是我们的窗口大小和对应的窗口序列和需要是单调增的,换个话说就是元素的正负是一致的,我right++之后序列和变大,left--之后序列和变小。

 

import java.io.*;
import java.util.*;
/*
输入 abcabcbb*/
public class Main {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));//读入字符串并转化成char数组char[] g = br.readLine().toCharArray();Set<Character> set = new HashSet<>();//去重 用HashSetint ans = 0;//注意如果是空字符串的话应该是0//滑动窗口模板(不固定长度时候)//外层循环拓展右边界 内层循环拓展左边界for(int l=0,r=0;r<g.length;r++){char ch = g[r];//右指针指向的元素while(l<=r&&set.contains(ch)){set.remove(g[l]);l++;}set.add(g[r]);ans = Math.max(ans,set.size());}pw.println(ans);
//          return ans;br.close();pw.close();}
}

 

import java.io.*;
import java.util.*;
/*
输入
cbaebabacd
abc
[0,6]*/
public class Main {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));//读入字符串并转化成char数组char[] s = br.readLine().toCharArray();char[] p = br.readLine().toCharArray();List<Integer> ans = new ArrayList<Integer>();if(s.length < p.length)pw.println(ans);int[] count = new int[26];for(int i=0;i<p.length;i++)count[p[i]-'a']++;for(int l=0,r=0;r<s.length;r++){count[s[r] - 'a'] --;//窗口里面添加这个数了 那么就减去while(count[s[r] - 'a'] < 0){count[s[l] - 'a']++;l ++ ;}if(r-l+1 == p.length)ans.add(l);}pw.println(ans);br.close();pw.close();}
}

 

 

import java.io.*;
import java.util.*;
/*
输入
cbaebabacd
abc
[0,6]*/
public class Main {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));String[] s_1 = br.readLine().split(" ");int[] nums = new int[s_1.length];String s_2= br.readLine();int k =Integer.parseInt(s_2);int ans = 0;int s = 0;Map<Integer, Integer> cnt = new HashMap<>(nums.length + 1); // 设置容量可以快 2mscnt.put(0, 1); // s[0]=0 单独统计for (int x : nums) {s += x;ans += cnt.getOrDefault(s - k, 0);//有key:s-k用s-k的值 否则就用0cnt.put(s, cnt.getOrDefault(s, 0) + 1); }
//        return ans;pw.println(ans);br.close();pw.close();}
}

 

import java.io.*;
import java.util.*;
/*
输入
输入1 3 -1 -3 5 3 6 7
3*/
public class Main {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));String[] s_1 = br.readLine().split(" ");int[] nums = new int[s_1.length];String s_2= br.readLine();                     int k =Integer.parseInt(s_2);for(int i=0; i<nums.length; i++)nums[i]=Integer.parseInt(s_1[i]);//记得填充数据List<Integer> ans = new ArrayList<>();//滑动窗口 维护窗口内的最大值 双端队列实现Deque<Integer> q = new ArrayDeque<>();int n = nums.length;for(int i=0;i<n;i++){//如果当前数字比队尾索引对应数字大 去除队尾元素 q.getFirst维护的是最大值的indexwhile(!q.isEmpty() && nums[q.getLast()] <= nums[i]){q.removeLast();}//不论如何将当前元素的索引加入q.addLast(i);//已知长度 左+右- 指的是1//i是右端点 q.getFrist是左端点//同时维护队列的队头在滑动窗口中while(i - q.getFirst() + 1 > k){q.removeFirst();//出队}//当遍历指针走到一个窗口的右边缘 开始记录ansif(i>=k-1){ans.add(nums[q.getFirst()]);}}pw.println(ans);
//        return ans;br.close();pw.close();}
}

 

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词