Leetcode刷题100天—136. 只出现一次的数字(数组)—day73

举报
神的孩子在歌唱 发表于 2021/12/20 21:31:26 2021/12/20
【摘要】 前言:作者:神的孩子在歌唱一个算法小菜鸡大家好,我叫智 136. 只出现一次的数字难度简单2123给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4package 数组;impor...

前言:

作者:神的孩子在歌唱

一个算法小菜鸡

大家好,我叫智

136. 只出现一次的数字

难度简单2123

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

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

示例 2:

输入: [4,1,2,1,2]
输出: 4
package 数组;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class _136_只出现一次的数字 {
    /**
     * 使用集合
     * @param nums
     * @return
     */
    public int singleNumber(int[] nums) {
        Set<Integer> set=new HashSet<>();
        int sum=0;
        for (int num :nums){
            if (set.contains(num)){
                set.remove(num);
                continue;
            }
            set.add(num);
        }
//        遍历出集合
//        for (int num:set){
//            sum=num;
//        }
        return set.hashCode();
    }

    /**
     * 排序加遍历
     * @param nums
     * @return
     */
    public int singleNumber1(int[] nums) {
//        排序
        Arrays.sort(nums);
//        两个两个遍历
        for (int i=0;i<nums.length-1;i+=2){
//            如果不等于那么就取左边的
            if (nums[i]!=nums[i+1]){
                return nums[i];
            }
        }
//        如果是在最后一个就直接返回
        return nums[nums.length-1];
    }
    /**
     * 位运算
     * 通过异或解决
     * 1. 任何数和其自身做异或运算,结果是 00
     * 2. 任何数和 0 做异或运算,结果仍然是原来的数
     * 通过以上两点我想应该有思路了
     */
    public int singleNumber2(int[] nums) {
        int single=0;
        for (int num:nums){
//            做异或,如果是相同的数就变为0了
            single^=num;
        }
        return single;
    }

}

转载说明:跟我说明,务必注明来源,附带本人博客连接。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。