正文
小伙伴们,你们好呀!我是老寇!
跟我看两道题
删除有序数组中的重复项I
class Solution { public int removeDuplicates(int[] nums) { int len = nums.length; if(len < 2) return len; int j = 0; for(int i = 0; i < len; i++) if(nums[j] != nums[i]) nums[++j] = nums[i]; return j + 1; } }
删除有序数组中的重复项 II
过程分析(例1)
class Solution { public int removeDuplicates(int[] nums) { int len = nums.length,slow = 2; for(int fast = 2;fast < len; fast++) if(nums[fast] != nums[slow - 2]) nums[slow++] = nums[fast]; return slow; } }
滑动窗口是基于暴力解法的优化,其强大的思想被应用在很多地方,比如我们熟知的网关限流算法,其中有滑动窗口算法,滑动窗口算法有个缺点,就是临界的问题,现在都采用令牌桶算法来限流,感兴趣的小伙伴可以看我之前的博客springcloud之gateway限流。
做这类题目时,需要找到循环不变量,这是解题的关键。(我理解的循环不变量是一个if条件)
区间不同的定义决定了不同的初始化逻辑、遍历过程中的逻辑。
最后问一句,你们是用什么画算法的过程图的?欢迎在评论下留言!!!