• LC 只出现一次的数字


    Given a non-empty array of integers nums, every element appears twice except for one. Find that single one.

    You must implement a solution with a linear runtime complexity and use only constant extra space.

    Example 1:

    Input: nums = [2,2,1]
    Output: 1
    Example 2:

    Input: nums = [4,1,2,1,2]
    Output: 4
    Example 3:

    Input: nums = [1]
    Output: 1

    Constraints:

    1 <= nums.length <= 3 * 104
    -3 * 104 <= nums[i] <= 3 * 104
    Each element in the array appears twice except for one element which appears only once.

    方法一, 使用异或,任何数字和0异或得该数字,相同的数字异或得0,最后只剩下一个数字。

    class Solution {
        public int singleNumber(int[] nums) {
            int res = 0;
            for(int i=0; i<nums.length; i++){
                res = res ^ nums[i];
            }
            return res;
    
        }
    }
    

    2,使用集合Set解决

    这个应该是最容易想到的,我们遍历数组中的元素,然后在一个个添加到集合Set中,如果添加失败,说明以前添加过,就把他给移除掉。当我们把数组中的所有元素都遍历完的时候,集合Set中只会有一个元素,这个就是我们要求的值。

    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];
    }
  • 相关阅读:
    阿铭每日一题 day 1 20180111
    计算机网络之基础链路
    android学习笔记 对话框合集
    android 音乐播放器简单实现
    Service的生命周期&Service绑定方法
    android学习笔记 Service
    android学习笔记 activity生命周期&任务栈&activity启动模式
    android 短信助手demo
    android 显示意图
    java 多线程断点下载demo
  • 原文地址:https://www.cnblogs.com/chenjo/p/15047284.html
Copyright © 2020-2023  润新知