小伙伴们,你们好呀!我是老寇!
跟我看两道题
删除有序数组中的重复项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;
}
}
滑动窗口是基于暴力解法的优化,其强大的思想被应用在很多地方,比如我们熟知的网关限流算法,其中有滑动窗口算法,滑动窗口算法有个缺点,就是临界的问题,现在都采用令牌桶算法来限流,感兴趣的小伙伴可以看我之前的博客?老寇云-java技术栈进阶-武侠篇-gateway限流。
做这类题目时,需要找到循环不变量,这是解题的关键。(我理解的循环不变量是一个if条件)
区间不同的定义决定了不同的初始化逻辑、遍历过程中的逻辑。
最后问一句,你们是用什么画算法的过程图的?欢迎在评论下留言!!!
|