zoukankan      html  css  js  c++  java
  • 136. 只出现一次的数字

    描述

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

    示例 1:
    输入: [2,2,1]
    输出: 1

    思路

    • 方法1 set
      遍历数组,使用set保存值,如果set中已有该值则去掉,最后剩下的那个值即为出现一次的元素。
    class Solution {
    public:
        int singleNumber(vector<int>& nums) {
            set<int> num_set;
            for(auto it:nums) {
                auto ret=num_set.insert(it);
                if(ret.second != true) {
                    num_set.erase(it);
                }
            }
            return *num_set.begin();
        }
    };
    
    • 方法2 异或
      1.异或满足交换律
      2.任何数与0异或等于其自身
      3.自己与自己异或等于0
    class Solution {
    public:
        int singleNumber(vector<int>& nums) {
            int res=0;
            for(auto i:nums) {
                res^=i;
            }
            return res;
        }
    };
    
  • 相关阅读:
    MySQL主从复制搭建
    CSS基本样式简单介绍
    前端代码编码规范
    Markdown语法简单介绍
    Java API 操作Redis
    Java API 操作Zookeeper
    MySQL优化
    ES 可视化工具
    消息队列MQ
    Docker基础
  • 原文地址:https://www.cnblogs.com/hunter-w/p/12885983.html
Copyright © 2011-2022 走看看