双指针

182 阅读1分钟

题目:27.移除元素
思路:
1.暴力解法,不能用splice等库函数,而是要模拟库函数的实现,两层for循环,当遇到某个值和target相等时,依次将当前的值后面的值向前挪一个,nums[i-1]=nums[i],因为向前挪了一个,所以要i--,同时将数组的长度len--

27-暴力.jpg

2.双指针,定义两个指针,slow和fast,都是从0开始,fast用于查找,slow用于存放最终的结果。循环的条件是fast<length,当fast≠target时,nums[slow]=nums[fast],slow++。任何时候fast都++,最终返回slow即可。

27-双指针.jpg

题目:977.有序数组的平方
思路:
1.res的长度与给定的数组的长度相同
2.因为是非递减的,所以定义两个指针分别指向数组的两端,两端比较取较大者存入到res的第K位,存入后k--
3.如果取的是左边,left++; 如果取的是右边,right--

977.jpg