建站系統(tǒng)磁力搜索引擎不死鳥
文章目錄
- 一、刪除元素
- 1.1 原地移除所有值等于val的元素
- 1.2 刪除有序數(shù)組中的重復(fù)項
- 二、元素奇偶移動
- 三、數(shù)組輪轉(zhuǎn)
一、刪除元素
1.1 原地移除所有值等于val的元素
LeetCode 27.移除元素
解法1:快慢指針
class Solution {public int removeElement(int[] nums, int val) {int fast=0;int slow=0;for(; fast<nums.length; fast++){if(nums[fast]!=val){nums[slow] = nums[fast];slow++;}}return slow;}
}
解法2:雙指針+覆蓋
class Solution {public int removeElement(int[] nums, int val) {int left=0;int right=nums.length-1;while(left<=right){if(nums[left]==val){nums[left] = nums[right--];}else{left++;}}return left;}
}
1.2 刪除有序數(shù)組中的重復(fù)項
LeetCode 26.刪除有序數(shù)組中的重復(fù)項
class Solution {public int removeDuplicates(int[] nums) {int slow = 1;for(int fast=0;fast<nums.length;fast++){if(nums[slow-1]!=nums[fast]){nums[slow]=nums[fast];slow++;}} return slow;}
}
二、元素奇偶移動
LeetCode 905.按奇偶排序數(shù)組
雙指針遍歷判斷。
class Solution {public int[] sortArrayByParity(int[] nums) {int left = 0;int right = nums.length - 1;while(left<right){if(nums[left]%2>nums[right]%2){int tmp = nums[left];nums[left] = nums[right];nums[right] = tmp;}if(nums[left]%2==0) left++;if(nums[right]%2==1) right--;}return nums;}
}
三、數(shù)組輪轉(zhuǎn)
LeetCode 189.輪轉(zhuǎn)數(shù)組
比如 1,2,3,4,5,6,7。向右輪轉(zhuǎn)3個位置,結(jié)果為5,6,7,1,2,3,4
可以把數(shù)組分為不輪轉(zhuǎn)的數(shù)組和要輪轉(zhuǎn)的數(shù)組兩部分 1,2,3,4 和 5,6,7。各自反轉(zhuǎn)為4,3,2,1和7,6,5。最后整體反轉(zhuǎn)得到結(jié)果。
class Solution {public void rotate(int[] nums, int k) {int l = nums.length;k %= l;reverse(nums,0,l-k-1);reverse(nums,l-k,l-1);reverse(nums,0,l-1);}private void reverse(int[] nums,int left,int right){while(left<right){int tmp = nums[left];nums[left] = nums[right];nums[right] = tmp;left++;right--;}}
}