zoukankan      html  css  js  c++  java
  • 刷题136. Single Number

    一、题目说明

    题目136. Single Number,给定一列非空整数,所有数字都出现2次,只有1个数字只出现1次,找到这个数字。

    二、我的解答

    这个题目,最简单的做法是排序,然后查找即可。在此,我们用unordered_map<int,int> dp;统计数量,然后找到数量是1的。

    class Solution{
    	public:
    		int singleNumber(vector<int>& nums){
                if(nums.size()<1) return 0;
                if(nums.size()==1) return nums[0];
    			unordered_map<int,int> dp;
    			for(int i=0;i<nums.size();i++){
    				dp[nums[i]] ++;
    			}
    			for(int i=0;i<nums.size();i++){
    				if(dp[nums[i]]<2) return nums[i];
    			}
                return 0;
    		}
    };
    

    性能如下:

    Runtime: 24 ms, faster than 27.29% of C++ online submissions for Single Number.
    Memory Usage: 11.6 MB, less than 20.99% of C++ online submissions for Single Number.
    

    三、优化措施

    上面是遍历2次,可以优化为遍历1次:

    class Solution{
    	public:
    		int singleNumber(vector<int>& nums){
                if(nums.size()<1) return 0;
                if(nums.size()==1) return nums[0];
    			unordered_map<int,int> dp;
    			for(int i=0;i<nums.size();i++){
    				dp[nums[i]] ++;
    				if(dp[nums[i]]==2) dp.erase(nums[i]);
    			}
    			unordered_map<int,int>::iterator iter = dp.begin();
    			return iter->first;
    		}
    };
    

    不使用额外的空间:

    class Solution{
    	public:
    	    //异或操作
    		int singleNumber(vector<int>& nums){
                int n = 0;
                for(int i=0;i<nums.size();i++){
                	n = n xor nums[i];
    			}
    			return n;
    		}
    };
    
    Runtime: 12 ms, faster than 95.18% of C++ online submissions for Single Number.
    Memory Usage: 9.7 MB, less than 95.06% of C++ online submissions for Single Number.
    
    所有文章,坚持原创。如有转载,敬请标注出处。
  • 相关阅读:
    分布式网站数据库同步方案——sqlserver数据库同步复制
    GridView控件中加自动排列序号
    天使的声音
    看人家老外是怎么乱扔垃圾的
    滚动条样式收集
    ASP程序加密解密方法全面解析
    Rewrite实现页面静态化重写
    [转]修改Linux操作系统日期和时间
    Sybase备份还原
    C#读写Access数据库公用类
  • 原文地址:https://www.cnblogs.com/siweihz/p/12269789.html
Copyright © 2011-2022 走看看