代码挑战:找到单一数字-C++

举报
Jet Ding 发表于 2021/07/23 10:25:56 2021/07/23
【摘要】 Given a non-empty array of integers, every element appears twice except for one. Find that single one.方案一:class SingleNumber {public:    int singleNumber(vector<int>& nums) {        int result = nu...

Given a non-empty array of integers, every element appears twice except for one. Find that single one.

方案一:

class SingleNumber {
public:
    int singleNumber(vector<int>& nums) {
        int result = nums[0];
        int len = nums.size();
        for (int i = 1; i < len; i++) {
            result = result ^ nums[i];
        }
        return result;
    }
};


测试案例:

        TEST_METHOD(TestMethod1)
        {
            SingleNumber singleNumber;
            int numsArray[] =  { 221 };
            vector<int> nums;
            nums.insert(nums.begin(), std::begin(numsArray), std::end(numsArray));
            Assert::AreEqual(1singleNumber.singleNumber(nums));
        }

        TEST_METHOD(TestMethod2)
        {
            SingleNumber singleNumber;
            int numsArray[] = { 4,1,2,1,2 };
            vector<int> nums;
            nums.insert(nums.begin(), std::begin(numsArray), std::end(numsArray));
            Assert::AreEqual(4singleNumber.singleNumber(nums));
        }


方案二:

class SingleNumberWay1 {
public:
    int singleNumber(vector<int>& nums) {
        unordered_set<int> set;

        for (int i = 0; i < nums.size(); i++) {
            int v = nums[i];
            std::unordered_set<int>::const_iterator iter = set.find(v);
            if (iter== set.end()) {
                set.insert(v);
            }
            else {
                set.erase(iter);
            }
        }
        return  *(set.begin());
    }
};


测试案例:

        TEST_METHOD(TestMethod1)
        {
            SingleNumberWay1 singleNumber;
            int numsArray[] =  { 221 };
            vector<int> nums;
            nums.insert(nums.begin(), std::begin(numsArray), std::end(numsArray));
            Assert::AreEqual(1singleNumber.singleNumber(nums));
        }

        TEST_METHOD(TestMethod2)
        {
            SingleNumberWay1 singleNumber;
            int numsArray[] = { 4,1,2,1,2 };
            vector<int> nums;
            nums.insert(nums.begin(), std::begin(numsArray), std::end(numsArray));
            Assert::AreEqual(4singleNumber.singleNumber(nums));
        }


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。