leetcode-刪除排序陣列中的重複項+移除元素
刪除排序陣列中的重複項
方法一
暴力法,直接通過erase刪除每一個重複的元素:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
vector<int>::iterator iter;
for(iter = nums.begin();iter!=nums.end();){
if(iter!=nums.begin() && *iter == *(iter-1)){
while(iter!=nums.begin() && iter!=nums.end() && *iter == *(iter-1))
nums.erase(iter);
}
else
iter++;
}
return nums.size();
}
};
方法二
方法一的問題是,每次挨個挨個的刪除很浪費時間,不如重複的元素用非重複元素來覆蓋; 若遇到重複的元素,向後去尋找不同的元素,拿這個不重複的元素去覆蓋這個重複的位置:
採用雙指標的方法來追蹤重複元素並交換
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.size()==0)
return 0;
int i = 0;
int j = 1;
while(j!=nums.size()){
if(nums[i] == nums[j]){
j++;
}
else{
if(j-i>1)
nums[i+1] = nums[j];
i++;
j++;
}
}
nums.erase(nums.begin()+i+1,nums.end());
return nums.size();
}
};
移除元素
方法一
C++的vector提供了方法remove,可以將制定的元素全部移動到vector的末尾:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
vector<int>::iterator iter1;
iter1=remove(nums.begin(),nums.end(),val);
int length=0;
for(vector<int>::iterator iter2=nums.begin();iter2!=iter1;iter2++)
length++;
return length;
}
};
方法二
若遇到要刪除的元素,向後尋找非刪除元素,將其覆蓋,也是雙指標的方法:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
bool flag = false;
int i = 0;
int j = 0;
for(j;j<nums.size();j++){
if(nums[j] == val){
flag = true;
continue;
}
if(nums[j] != val){
if(flag == true)
nums[i] = nums[j];
i++;
}
}
return i;
}
};
方法三
若遇到要刪除的元素,將末尾元素對其覆蓋,並在下一次迴圈中再次檢查覆蓋後的元素是否還是要刪除的元素:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int i = 0;
int j = nums.size();
while(i!=j){
if(nums[i] == val){
nums[i] = nums[j-1];
j--;
}
else
i++;
}
return i;
}
};
相關文章
- 刪除排序陣列中的重複項排序陣列
- 題目:刪除排序陣列中的重複項排序陣列
- Leetcode[陣列] 26. 刪除排序陣列中的重複項LeetCode陣列排序
- [12][02][26] 刪除排序陣列中的重複項排序陣列
- LeetCode之從排序陣列中刪除重複項-SwiftLeetCode排序陣列Swift
- 每日一題 [26] 刪除排序陣列中的重複項每日一題排序陣列
- JavaScript陣列刪除重複元素JavaScript陣列
- JavaScript 刪除陣列重複元素JavaScript陣列
- Golang刷LeetCode 26.刪除排序陣列中的重複項GolangLeetCode排序陣列
- 刪除有序陣列中的重複項 II陣列
- LeetCode每日一題:刪除排序陣列中的重複項(No.26)LeetCode每日一題排序陣列
- 計蒜客 移除陣列中的重複元素陣列
- c#刪除有序陣列中的重複項C#陣列
- 0026-刪除有序陣列中的重複項陣列
- 每日一道演算法:刪除排序陣列中的重複項演算法排序陣列
- LeetCode 26 號問題 刪除陣列中的重複項LeetCode陣列
- 【演算法-初級-陣列】刪除排序陣列中的重複項(多語言版實現)演算法陣列排序
- JavaScript 拼接多個陣列並刪除重複元素JavaScript陣列
- 讓我們一起啃演算法----刪除排序陣列中的重複項演算法排序陣列
- 每天一遍,快樂再見!LeetCode(8)刪除排序陣列中的重複項LeetCode排序陣列
- golang 陣列去重 移除陣列指定元素Golang陣列
- 從未排序的連結串列中刪除重複項排序
- 每日一道演算法題--leetcode 26--刪除排序陣列中重複項--python演算法LeetCode排序陣列Python
- 我用演算法學golang(刪除有序陣列中的重複項 )演算法Golang陣列
- java陣列中重複元素的去重Java陣列
- JavaScript陣列刪除重複內容JavaScript陣列
- 力扣-83. 刪除排序連結串列中的重複元素力扣排序
- 83. 刪除排序連結串列中的重複元素(JavaScript版)排序JavaScript
- leetcode-82:刪除排序連結串列中重複的元素-iiLeetCode排序
- leetcode面試經典150-26. 刪除有序陣列中的重複項LeetCode面試陣列
- JavaScript刪除陣列元素JavaScript陣列
- 【leetcode】26. Remove Duplicates from Sorted Array 刪除有序陣列的重複元素LeetCodeREM陣列
- PHP從陣列中刪除元素的方法PHP陣列
- 如何去除有序陣列中的重複元素陣列
- ES6刪除字串中重複的元素字串
- 如何在不使用Java Collection API的情況下從陣列中刪除重複項JavaAPI陣列
- mysql 刪除重複項MySql
- JavaScript 刪除陣列指定元素JavaScript陣列