Leetcode 136. 只出现一次的数字

向右看齐 2022-09-01 00:04 339阅读 0赞

题目重述

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

说明:

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

示例 1:

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

示例 2:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/single-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路一(哈希)

使用哈希存储各数字出现的次数,最后取出即可

代码实现

  1. class Solution {
  2. public int singleNumber(int[] nums) {
  3. Map<Integer,Integer> m = new HashMap<>();
  4. for (int i = 0; i < nums.length; i++) {
  5. m.put(nums[i],m.getOrDefault(nums[i],0)+1);
  6. }
  7. for (Map.Entry<Integer,Integer> e : m.entrySet())
  8. {
  9. if(e.getValue() == 1)
  10. {
  11. return e.getKey();
  12. }
  13. }
  14. return 0;
  15. }
  16. }

思路二(位运算-异或)

数组中的全部元素的异或运算结果即为数组中只出现一次的数字。

Leetcode官方题解:
在这里插入图片描述

代码实现

  1. class Solution {
  2. public int singleNumber(int[] nums) {
  3. int single = 0;
  4. for (int i = 0; i < nums.length; i++) {
  5. single ^= nums[i];
  6. }
  7. return single;
  8. }
  9. }

发表评论

表情:
评论列表 (有 0 条评论,339人围观)

还没有评论,来说两句吧...

相关阅读

    相关 LeetCode136. 出现数字

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

    相关 Leetcode 136. 出现数字

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

    相关 LeetCode136. 出现数字

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 解题分析:可用哈希表来存储数据 public static

    相关 leetcode:136. 出现数字

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