26. Remove Duplicates from Sorted Array

题目

26. Remove Duplicates from Sorted Array

解题思路

我的思路是,遍历遇到重复的数字就设为-1000000(一个不会出现在数组里的数字),第一个-1000000与其后面第一个不重复的数字进行交换位置,最后-1000000都会排列在数组尾部。

我的思路其实有很大的缺陷,非要特定搞一个“不会出现在数组里的数字”,后来又是去看了discuss……还是dalao的代码高效=-=


11.4更新:

回头看一下这道题和之前去零的那道题完全是一样的。


具体代码

class Solution {
public:
    void swap(vector<int>& nums, int a, int b) {
        int tmp = nums[a];
        nums[a] = nums[b];
        nums[b] = tmp;
    }

    int removeDuplicates(vector<int>& nums) {
        if (nums.empty())
            return 0;
        int num = 1;
        int fisrt_dupnum_index = -1000000;
        int recent_num = nums[0];
        for (int i = 1; i < nums.size(); i++) {
            if (nums[i] > recent_num) {
                recent_num = nums[i];
                ++num;
                if (fisrt_dupnum_index != -1000000) {
                    swap(nums, fisrt_dupnum_index, i);
                    while (fisrt_dupnum_index < nums.size() && nums[fisrt_dupnum_index] != -1000000) {
                        ++fisrt_dupnum_index;
                    }
                    if (fisrt_dupnum_index == nums.size())
                        fisrt_dupnum_index = -1000000;
                }
            }
            else if (nums[i] == recent_num) {
                nums[i] = -1000000;
                if (fisrt_dupnum_index == -1000000)
                    fisrt_dupnum_index = i;
            }
            
        }
        return num;
    }
};

discuss

思路简单来说就是只保留下不重复的数字,其他不考虑

c++版本

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if (nums.empty()) return 0;
        int num = 1;
        for (int i = 1; i < nums.size(); i++) {
            if (nums[i] != nums[i-1])
                nums[num++] = nums[i];
        }
        return num;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值