题目链接:https://leetcode.com/problems/single-number-iii/
题目:
Given an array of numbers nums
, in which exactly two elements appear only
once and all the other elements appear exactly twice. Find the two elements that appear only once.
For example:
Given nums = [1, 2, 1, 3, 2, 5]
, return [3,
.
5]
Note:
- The order of the result is not important. So in the above example,
[5,
is also correct.
3] - Your algorithm should run in linear runtime complexity. Could you implement it using only constant space complexity?
题意:给定一个数组nums,其中除了两个元素只出现一次外,其他元素均出现两次,找出仅出现一次的两个元素
提示:1.对输出结果的顺序不作要求
2.算法要求线性复杂度
分析:仍然是异或的用法,题目较简单,直接看代码,代码中有注释
代码:
public class Solution { public int[] singleNumber(int[] nums) { int[] single = new int[2]; int[] wei = new int[32]; int yhResult = 0; for(int i=0; i<nums.length; i++) { yhResult ^= nums[i]; } for(int i=0; i<32; i++) { if((yhResult & 1<<i) != 0) {<span style="white-space:pre"> </span>//如果异或结果的某位为1,说明两个单数在该位是不同的 for(int j=0; j<nums.length; j++) { if((nums[j] & 1<<i) != 0)<span style="white-space:pre"> //按该位相同与不同,分两组</span>分别异或,可直接得出结果元素 single[0] ^= nums[j]; else single[1] ^= nums[j]; } break; } } return single; } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-11 06:59:40