88. 合并兩個有序數組
給你兩個按 非遞減順序 排列的整數數組 nums1 和 nums2,另有兩個整數 m 和 n ,分別表示 nums1 和 nums2 中的元素數目。請你 合并 nums2 到 nums1 中,使合并后的數組同樣按 非遞減順序 排列。
倒序比較,避免覆蓋
26. 刪除有序數組中的重復項
class Solution {
public:int removeDuplicates(vector<int>& nums) {int slow = 0, fast = 1;for(; slow < nums.size() && fast < nums.size(); fast++) {if(nums[slow] == nums[fast]) continue;else{slow++;nums[slow] = nums[fast];}} return slow + 1;}
};
27. 移除元素
給你一個數組 nums 和一個值 val,你需要 原地 移除所有數值等于 val 的元素。元素的順序可能發生改變。然后返回 nums 中與 val 不同的元素的數量。
class Solution {
public:int removeElement(vector<int>& nums, int val) {int slow = 0;for(int fast = 0; fast < nums.size() && slow < nums.size(); fast++){if(nums[fast] == val) continue;else{nums[slow++] = nums[fast]; }}return slow++;}
};
169. 多數元素
給定一個大小為 n 的數組 nums ,返回其中的多數元素。多數元素是指在數組中出現次數 大于 ? n/2 ? 的元素。
根據以上推論,記數組首個元素為 n1 ,眾數為 x ,遍歷并統計票數。當發生 票數和 =0 時,剩余數組的眾數一定不變 ,這是由于:
當 n1=x : 抵消的所有數字中,有一半是眾數 x 。
當 n1!=x : 抵消的所有數字中,眾數 x 的數量最少為 0 個,最多為一半。
利用此特性,每輪假設發生 票數和 =0 都可以 縮小剩余數組區間 。當遍歷完成時,最后一輪假設的數字即為眾數。
class Solution {
public:int majorityElement(vector<int>& nums) {int x = 0, votes = 0;for (int num : nums){if (votes == 0) x = num;votes += num == x ? 1 : -1;}return x;}
};