三种方法,挑选自己喜欢的即可

偷懒写法

直接去重即可

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;
    }
};