删除元素
-
LeetCode27,删除指定元素
var removeElement = function(nums, val) { let slow = 0; let fast = 0; for(; fast < nums.length;) { if(nums[fast] != val) { nums[slow] = nums[fast]; ++slow; } ++fast; } return slow; };
-
LeetCode26,保留一个
var removeDuplicates = function(nums) { let fast = 1; let slow = 1; for(; fast < nums.length; ++fast) { if(nums[fast] != nums[fast - 1]) { nums[slow] = nums[fast]; ++slow } } return slow; };
移动元素
-
LeetCode905 对撞指针
var sortArrayByParity = function(nums) { let left = 0; let right = nums.length - 1; while(left < right) { if(nums[left] % 2 === 1) { while(left < right) { if(nums[right] % 2 === 0) { let num = nums[right]; nums[right] = nums[left]; nums[left] = num; break; } --right; } } ++left; } return nums; };
数组轮转
-
LeetCode189 两轮翻转
var rotate = function(nums, k) { let size = nums.length; k = k % size; reverse(nums, 0, size - 1); reverse(nums, 0, k - 1); reverse(nums, k, size - 1); }; var reverse = function(arr, start, end) { for(let i = start, j = end; i < j; ++i, --j) { let temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } };
数组区间
-
LeetCode228 双指针
var summaryRanges = function(nums) { let res = new Array(); let slow = 0; let fast = 0; for(; fast < nums.length; ++fast) { if(fast + 1 === nums.length || nums[fast + 1] > nums[fast] + 1) { if(slow === fast) { res.push(String(nums[slow])); } else { res.push(nums[slow] + '->' + nums[fast]); } slow = fast + 1; } } return res; };