【LeetCode-136】Single Number(C++)

原创 2016年08月30日 22:09:21

题目:给出一个整形数组,数组中的数据只有一个数是单个的,其他的数都有两个,返回这个单个的数。

解决方法:1. 先将数组排序,如果这个数的左边和右边均与这个数不相等,那么这个数就是要返回的数。这种实现方法的时间复杂度是O(n),其中n为数组中的元素个数,并且没有浪费多余的空间。

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        int len=nums.size();
        if(nums[0]!=nums[1])
           return nums[0];
        if(nums[len-2]!=nums[len-1])
           return nums[len-1];
        for(int i=1;i<len-1;i++){
            if(nums[i]!=nums[i-1]&&nums[i]!=nums[i+1])
               return nums[i];
        }
        return 0;
    }
};

2.用C++中的STL容器set实现,这种方式浪费空间,因为定义了一个set。

class Solution {
public:
    int singleNumber(vector<int>& nums) {
       set<int> s;
       int len=nums.size();
       for(int i=0;i<len;i++){
           if(s.find(nums[i])!=s.end())
               s.erase(nums[i]);
           else
               s.insert(nums[i]);
       }
      auto iter=s.begin();
      return *iter;
    }
};
或者用STL容器map也可以实现,但是这种方式不仅浪费空间,而且还要遍历一次数组,再遍历一次map容器。显然更不好。

class Solution {
public:
    int singleNumber(vector<int>& nums) {
       map<int,int> m;
       int len=nums.size();
       for(int i=0;i<len;i++){
           auto iter=m.find(nums[i]);
           if(iter!=m.end())
              iter->second++;
           else{
               pair<int,int> value(nums[i],1);
               m.insert(value);
           }
       }
       auto iter2=m.begin();
       for(;iter2!=m.end();iter2++){
           if(iter2->second==1)
               return iter2->first;
       }
       return 0;
    }
};



版权声明:本文为博主原创文章,未经博主允许不得转载。

LeetCode 136. Single Number 题解(C++)

Given an array of integers, every element appears twice except for one. Find that single one.
  • prayyojay
  • prayyojay
  • 2016年09月29日 12:07
  • 346

【LeetCode-136】Single Number(C++)

题目:给出一个整形数组,数组中的数据只有一个数是单个的,其他的数都有两个,返回这个单个的数。 解决方法:1. 先将数组排序,如果这个数的左边和右边均与这个数不相等,那么这个数就是要返回的数。这种实现...
  • liujiayu1015
  • liujiayu1015
  • 2016年08月30日 22:09
  • 137

[leetcode] 136 &137 Single Number Ⅰ Ⅱ

136; 题意很简单,给你一个数组(int),只有一个数字是出现一次的,其余出现两次,不允许使用额外空间,时间复杂度线性。 如果允许使用额外空间的话,可以使用map记录次数,最后遍历,也是O(n)...
  • NK_test
  • NK_test
  • 2015年09月25日 00:00
  • 1382

[leetcode-136]Single Number(c)

问题描述: Given an array of integers, every element appears twice except for one. Find that single one....
  • zdavb
  • zdavb
  • 2015年08月14日 18:55
  • 367

Leetcode-136:Single Number

[Single Number] Given an array of integers, every element appears twice except for one. Find that ...
  • donghf1989
  • donghf1989
  • 2016年04月15日 23:37
  • 91

LeetCode[136] Single Number 位运算异或,HashMap(Java)

Problem: Given an array of integers, every element appears twice except for one. Find that single ...
  • u013810234
  • u013810234
  • 2015年05月29日 10:28
  • 978

LeetCode——Single Number(II)

Single Number  Total Accepted: 19800 Total Submissions: 44027My Submissions Given an array of i...
  • xia_yu_mao_fa
  • xia_yu_mao_fa
  • 2014年05月08日 10:05
  • 1013

leetcode-136 Single Number

关于位操作 异或操作: 5 ^ 5 = 0   两个相同的数异或为0 5 ^ 0 = 5  任何数与0异或还得任何数 异或操作满足交换律和结合律 int singleNumber(int A[]...
  • sole_cc
  • sole_cc
  • 2015年03月03日 10:10
  • 238

[LeetCode-136]Single Number(java)

Given an array of integers, every element appears twice except for one. Find that single one. Note:...
  • xionghuixionghui
  • xionghuixionghui
  • 2016年09月29日 01:03
  • 216

leetcode_136 Single Number-找数组中唯一的单身数

Given an array of integers, every element appears twice except for one. Find that single one.Note: ...
  • tonghuawanli
  • tonghuawanli
  • 2017年03月04日 00:56
  • 230
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【LeetCode-136】Single Number(C++)
举报原因:
原因补充:

(最多只允许输入30个字)