![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
力扣刷题之滑动窗口
迪恩_Emma
喜欢看书的Java开发
展开
-
239. 滑动窗口最大值(困难)
思路: 优先队列 代码: class Solution { public int[] maxSlidingWindow(int[] nums, int k) { int n=nums.length; //int[]数组中0为元素,1为下标 PriorityQueue<int[]> queue=new PriorityQueue<int[]>(new Comparator<int[]>(){ public int compare(in.原创 2021-06-16 10:14:31 · 89 阅读 · 0 评论 -
581. 最短无序连续子数组(中等)
思路: 1.创建一个新array,保存排好序的数组,逐个比较哪个下标的值变化了 2.双指针 代码: public class Solution { public int findUnsortedSubarray(int[] nums) { int min=Integer.MAX_VALUE,max=Integer.MIN_VALUE; boolean flag=false; for(int i=1;i<nums.length;i++){ if(nums[.原创 2021-06-15 16:41:44 · 87 阅读 · 0 评论 -
19. 删除链表的倒数第 N 个结点(中等)
思路: 利用快慢指针,设置一个间隔,2边同时向后走,停止时慢的指针刚好就在指定位置,并且只走了一趟 代码: class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { ListNode pre=new ListNode(0); pre.next=head; ListNode start=pre; ListNode end=pre; while(n!=0){ start.原创 2021-05-25 11:15:50 · 47 阅读 · 0 评论 -
11. 盛最多水的容器(中等)
思路: 双指针,两边谁的高度较低,就往里移动一格,这样可能会使面积比移动之前大 如果移动的是较高的板子,遇到更高的板子的概率会低一点 代码: class Solution { public int maxArea(int[] height) { int i=0,j=height.length-1,res=0; while(i<j){ if(height[i]<height[j]){ res=Math.max(res,(j-i)*height..原创 2021-05-23 10:26:47 · 84 阅读 · 0 评论 -
3. 无重复字符的最长子串(中等)
思路: "无重复"可以想到HashSet,但是HashSet无法获取到长度,所以可以用HashMap记录下标,获取长度 代码: class Solution { public int lengthOfLongestSubstring(String s) { if(s.length()==0||s==null) return 0; int max=0; HashMap<Character,Integer> map=new HashMap(); fo.原创 2021-05-21 09:27:32 · 69 阅读 · 0 评论 -
剑指 Offer 59 - I. 滑动窗口的最大值(困难)
思路: 滑动窗口,使用双端队列作为滑动窗口 代码: class Solution { public int[] maxSlidingWindow(int[] nums, int k) { if(nums==null||k==0){ return new int[0]; } //注意是Deque而不是Queue Deque<Integer> deque=new LinkedList<>.原创 2021-05-14 09:17:59 · 80 阅读 · 0 评论 -
剑指 Offer 57 - II. 和为s的连续正数序列(简单)
思路: 连续正整数序列,可以想到: 1)用滑动窗口 2)下标和值一一对应 代码: class Solution { public int[][] findContinuousSequence(int target) { //双指针滑动窗口 int i=1,j=2,s=3; List<int[]> res=new ArrayList<>(); while(i<j){ if(s==target){ in.原创 2021-05-12 10:28:55 · 212 阅读 · 1 评论 -
剑指 Offer 48. 最长不含重复字符的子字符串(中等)
思路: 哈希表+双指针 相当于滑动窗口,用哈希表来记录下标,改变左指针的位置 代码: class Solution { public int lengthOfLongestSubstring(String s) { Map<Character,Integer> map=new HashMap<>(); int i=-1,res=0; //最开始只创建i //j用做循环 //j一直往后遍历,i随着出现.原创 2021-05-07 11:20:11 · 73 阅读 · 0 评论