文章目录
- 双指针法
- 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值,也不前进,快指针继续往前找val
let slow = 0
for(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 - 1
let res = []
let i = 0, j = nums.length - 1
while(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循环的工作。
定义快慢指针
- 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
- 慢指针:指向更新 新数组下标的位置