文章目录
- 双指针法
- 27.移除元素
- 为什么返回值是整数,但输出的答案是数组?
- 双指针法
- 977.有序数组的平方
- 暴力法:先平方再排序
- 双指针法
- 总结双指针
双指针法
27.移除元素
为什么返回值是整数,但输出的答案是数组?
双指针法
原地修改
慢指针只管索引,0,1,2,3
快指针只找适合的数据元素,找到了就给慢指针对应索引元素
/*** @param {number[]} nums* @param {number} val* @return {number}*/
var removeElement = function(nums, val) {// 快指针flast(i:遍历所有数组) 慢指针slow// 快指针找符合条件的值给慢指针相应索引值// 不等于val: 把当前的nums[i] 给 慢指针,快指针慢指针都前进一步// 等于val时:慢指针不要这个当前nums值,也不前进,快指针继续往前找vallet slow = 0for(let i = 0; i < nums.length; i++) {if (nums[i] != val) {nums[slow++] = nums[i]}}return slow
};
977.有序数组的平方
暴力法:先平方再排序
双指针法
数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。
此时可以考虑双指针法了,i指向起始位置,j指向终止位置。
最大值就是数组两端,我们可以用两个快指针i,j(注意:i<=j)分别指向数组前后,谁大谁先给慢指针,然后向中间移动
慢指针指向最后一个,收到一个值就往前移动
/*** @param {number[]} nums* @return {number[]}*/
var sortedSquares = function(nums) {let slow = nums.length - 1let res = []let i = 0, j = nums.length - 1while(i<=j) {if (nums[i] * nums[i] <= nums[j] * nums[j]) {res[slow] = nums[j] * nums[j]j--slow--} else {res[slow] = nums[i] * nums[i]i++slow--}}return res
};
总结双指针
双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
定义快慢指针
- 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
- 慢指针:指向更新 新数组下标的位置