三种方法,挑选自己喜欢的即可
偷懒写法
直接去重即可
c++
class Solution {
public:
int reArrangeArray(vector<int>& nums) {
// write code here
set<int> st(nums.begin(), nums.end());
nums.assign(st.begin(), st.end());
return nums.size();
}
};
python
class Solution:
def reArrangeArray(self , nums: List[int]) -> int:
return len(list(set(nums)))
双指针
双指针:
- 如果fast和slow相等,则去掉fast位置的数
- 如果fast和slow不同,则slow挪到fast的位置,fast+1
c++
class Solution {
public:
int reArrangeArray(vector<int>& nums) {
// write code here
if(nums.size() <= 1) return nums.size();
int slow=0,fast=1;
while(fast<nums.size()){
if(nums[slow] == nums[fast]){
nums.erase(nums.begin()+fast);
}else{
slow = fast;
fast++;
}
}
return nums.size();
}
};
递减法
初始化:
- res直接等于nums的长度
- now_max用来存放当前最大值
然后开始往后遍历
- 如果出现和now_max相同的,res减一
- 如果不同,now_max值更新
c++
class Solution {
public:
int reArrangeArray(vector<int>& nums) {
// write code here
int len = nums.size();
int res = len;
int now_max = 0;
for(int i=0; i<len; i++){
if(nums[i] == now_max){
res--;
}else{
now_max = nums[i];
}
}
return res;
}
};