一、注意事项
- 数组内存空间的地址是连续的,因此删除元素时难免需要移动其他元素的地址
- 此处的删除并不是真正意义上的删除,因为不能单独删除数组中的某个元素,只能覆盖
- 多熟悉 JavaScript 的内置函数!!!
二、刷题
- 双指针法(快慢指针法):通过一个快指针和慢指针在一个 for 循环下完成两个 for 循环的工作
- 快指针:寻找新数组的元素,即寻找不等于目标值的元素
- 慢指针:指向更新 新数组下标的位置
1. 27_移除元素
- 方法一:双指针法
var removeElement = function(nums, val) { var slow = 0; for (var fast = 0; fast < nums.length; fast++) { if (nums[fast] !== val) { nums[slow++] = nums[fast]; } } return slow; };
- 方法二:暴力解法【时间复杂度:O(n2);空间复杂度:O(1)】
var removeElement = function(nums, val) { var len = nums.length; for (var i = 0; i < len; i++) { if (nums[i] == val) { for (var j = i + 1; j < len; j++) { nums[j - 1] = nums[j]; } len--; i--; } } return len; };
2. 26_删除排序数组中的重复项
- 方法一:双指针法
var removeDuplicates = function (nums) { var slow = 0; for (var fast = 1; fast < nums.length; fast++) { if (nums[fast] !== nums[slow]) { nums[slow + 1] = nums[fast]; slow++; } } return slow + 1; };
3. 283_移动零
- 方法一:双指针法【注意这里有个坑,如果直接给
nums[fast]
赋值零的话那么无法通过数组只有一个非零元素时的案例或者第一个元素非零情况下的案例,或许还有其他可能不一一列举啦】var moveZeroes = function(nums) { var slow = 0; for (var fast = 0; fast < nums.length; fast++) { if (nums[fast] !== 0) { var temp = nums[slow]; nums[slow++] = nums[fast]; nums[fast] = temp; } } return slow; };
4. 844_比较含退格的字符串
- 方法一:双指针法【代码里面用到了利用分隔符将字符串转换为数字的
split()
内置函数,还用了将数组中的所有元素转换为一个字符串的join()
内置函数】var backspaceCompare = function(s, t) { var rebuild = function (str) { var arr = str.split(""); var l = 0; for (var r = 0; r < arr.length; r++) { if (arr[r] === '#') { if (l > 0) { l--; } } else { arr[l++] = arr[r]; } } arr.length = l; return arr.join(""); } return rebuild(s) === rebuild(t); };
5. 977_有序数组的平方
- 方法一:双指针法【本代码创建了一个新的数组,因此空间复杂度为 O(n)】
var sortedSquares = function (nums) { var left = 0; var right = nums.length - 1; var res = new Array(nums.length); var pos = nums.length - 1; while (left <= right) { if (Math.abs(nums[left]) > Math.abs(nums[right])) { res[pos] = nums[left] * nums[left]; left++; } else { res[pos] = nums[right] * nums[right]; right--; } pos--; } return res; };
- 方法二:直接排序【注意单纯写个 sort() 在那里貌似好像木有用,以后记得加上这个条件】
var sortedSquares = function (nums) { var res = []; for (var i = 0; i < nums.length; i++) { res[i] = nums[i] * nums[i]; } // 保持升序排序 return res.sort( function (a,b) { return a - b; } ); }
总结
每天学习一点点,快乐就会多一点
以上就是 数组篇之移除元素 刷题记,小梁加油哦!!!