zoukankan      html  css  js  c++  java
  • 【初级算法】5.只出现一次的数字

    题目:

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
    
    说明:
    
    你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
    
    示例 1:
    
    输入: [2,2,1]
    输出: 1
    示例 2:
    
    输入: [4,1,2,1,2]
    输出: 4

    解题思路:

    1.题目中要求线性空间,最简单的则是将整个数组进行相与,最后的结果即为目标数。

    代码如下:

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

    2.可以用hash,统计每个数目的数量即可,找出出现一次的数。

    class Solution {
    public:
        int singleNumber(vector<int>& nums) {
            map<int,int> m;
           
            for(int i = 0;i < nums.size(); ++i){
                if(m.find(nums[i]) != m.end()){
                    m[nums[i]] += 1;
                }else{
                    m[nums[i]] = 1;
                }
            }
            
            map<int,int>::iterator it = m.begin();
            for(;it!=m.end();++it){
                if(it->second == 1){
                    return it->first;
                }
            }
            
            return 0;
        }
    };
  • 相关阅读:
    4.9新随笔
    4.2上机作业
    3.30作业
    3.26上机练习
    作业十
    作业九
    作业八
    作业六
    作业五
    作业三
  • 原文地址:https://www.cnblogs.com/mikemeng/p/8981671.html
Copyright © 2011-2022 走看看