C++求数组是否含有重复元素

今天用leetcode刷题,求数组是否含有重复元素。

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

bool containsDuplicate(vector<int>& nums) {
    sort(nums.begin(), nums.end());
    for (int i = 0; i < nums.size() - 1; i++) {
        cout << nums.size() << endl;
        if (nums[i] == nums[i + 1]) 
            return true;
    }
    return false;
}

int main() {
    vector<int> a;
    cout << containsDuplicate(a) << endl;
    return 0;
}

用一个空vector调用函数时

cout << nums.size() << endl;

这一行会执行,并在

if (nums[i] == nums[i + 1]) 

报错。
因该是用空vector调用函数时不会进入for循环才对,不知道这是为什么,求高手解答!

阅读 4.5k
1 个回答
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

bool containsDuplicate(vector<int>& nums) {
    sort(nums.begin(), nums.end());
    cout << nums.size() << endl;
    int j = 0;
    cout << nums.size() - 1 << endl;
    cout << ( j < nums.size() - 1) << endl;
    for (int i = 0; i < nums.size() - 1; i++) {
        cout << nums.size() << endl;
        if (nums[i] == nums[i + 1]) 
            return true;
    }
    return false;
}

int main() {
    vector<int> a;
    cout << containsDuplicate(a) << endl;
    return 0;
}

nums.size() = 0时,因为nums.size()类型是size_t,是unsigned long long的typedef,只能是正数,所以当nums.size() -1nums.size()是0时,答案成二进制表示了,为2^64 - 1,一个暴大的正数,所以WA了。建议不要把nums.size()写在for里面,每次都会调用nums.size(), 增加开销。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题