zoukankan      html  css  js  c++  java
  • 算法8 只出现一次的数字 leetcode136

    题目

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

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

    作者:力扣 (LeetCode)
    链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x21ib6/

    想法

    看起来很简单,确实很简单,但是没想到用新的方法(异或、set)
    其实还可以按奇偶位置来做。。。

    XOR、SET

    //a^a=0;自己和自己异或等于0
    
    //a^0=a;任何数字和0异或还等于他自己
    
    //a^b^c=a^c^b;异或运算具有交换律
    
    //有了这3个规律,这题就很容易解了,我们只需要把所有的数字都异或一遍,最终的结果就是我们要求的那个数字。来看下代码
    
    
    public int singleNumber(int nums[]) {
        int result = 0;
        for (int i = 0; i < nums.length; i++)
            result ^= nums[i];
        return result;
    }
    
    public int singleNumber(int[] nums) {
        Set<Integer> set = new HashSet<>();
        for (int num : nums) {
            if (!set.add(num)) {
                //如果添加失败,说明这个值
                //在集合Set中存在,我们要
                //把他给移除掉
                set.remove(num);
            }
        }
        //最终集合Set中只有一个元素,我们直接返回
        return (int) set.toArray()[0];
    }
    
    作者:数据结构和算法
    链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x21ib6/?discussion=LIRNfM
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    

    我的原始方法

    class Solution {
        public int singleNumber(int[] nums) {
            Arrays.sort(nums);
            int k=nums[0];
            for(int i=0;i<nums.length-1;i++){
                if(nums[i]!=nums[i+1]) {
                    if (i - 1 < 0 || nums[i] != nums[i - 1]) {
                        k = nums[i];
                    }
                    if (i+2==nums.length) {
                        k = nums[i+1];
                    }
                }
            }
            return k;
        }
    }
    
  • 相关阅读:
    python学习之列表
    python学习之数据类型
    开启python学习之路
    软件工程中的需求分析包括的主要内容
    论需求分析和数据库设计的重要性
    Android的ListView分页功能(上滑加载更多)
    设置ListView显示到最后一行
    一对一Socket简单聊天的实现
    Spring Cloud学习笔记-004
    Spring Cloud学习笔记-003
  • 原文地址:https://www.cnblogs.com/impw/p/15484456.html
Copyright © 2011-2022 走看看