Question No.1
删除有序数组中的重复项
https://leetcode.cn/problems/remove-duplicates-from-sorted-array/
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int len = 0;
for(int i = 0; i < nums.size(); i++){
if(!i || nums[i] != nums[i-1]){
nums[len] = nums[i];
len++;
}
}
return len;
}
};
小简化:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int len = 1;
for(int i = 1;i < nums.size();i++){
if(nums[i] != nums[i-1]) nums[len++] = nums[i];
}
return len;
}
};
Question No.2
移动零
https://leetcode.cn/problems/move-zeroes/
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int len = 0;
for(int i = 0; i< nums.size(); i++){
if(nums[i] != 0){
nums[len] = nums[i];
len++;
}
}
while(len < nums.size()){
nums[len] = 0;
len++;
}
}
};
Question No.3
合并两个有序数组
https://leetcode.cn/problems/merge-sorted-array/submissions/
第一种写法:
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
vector<int> res;
int i = 0,j = 0;
while(i < m || j < n){
if(j >= n || (i < m && nums1[i] < nums2[j])){
res.push_back(nums1[i++]);
}else{
res.push_back(nums2[j++]);
}
}
for(int i = 0; i < m+n; i++) nums1[i] = res[i];
}
};
用额外空间来储存。最后再赋值给nums1数组。
第二种写法:
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int i = m - 1,j = n - 1;
for(int k = m + n - 1; k >= 0; k--){
if(j < 0 || (i >= 0 && nums1[i] >= nums2[j])){
nums1[k] = nums1[i--];
}else{
nums1[k] = nums2[j--];
}
}
}
};