LeetCode 136. 只出现一次的数字
我的LeetCode:https://leetcode-cn.com/u/ituring/
我的LeetCode刷题源码[GitHub]:https://github.com/izhoujie/Algorithmcii
LeetCode 136. 只出现一次的数字
题目
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1] 输出: 1
示例?2:
输入: [4,1,2,1,2] 输出: 4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/single-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
思路1-利用异或运算解决
利用位运算中异或运算的特性:
- bit位不同异或结果为1,否则为0;
- 任意数与本身异或为0;
- 任意数与0异或为其本身;
一个例子,不使用额外变量,利用异或运算交换两个值:
public static void swap(int x, int y) { System.out.println("x=" + x); System.out.println("y=" + y); // 任意数与本身异或为0 int z = (x ^ x); System.out.println(z == 0); // 使用异或特性交换两个值 x = x ^ y; y = x ^ y; x = x ^ y; System.out.println("x=" + x); System.out.println("y=" + y); }
算法复杂度:
- 时间复杂度: $ {\color{Magenta}{\Omicron\left(n\right)}} $
- 空间复杂度: $ {\color{Magenta}{\Omicron\left(1\right)}} $
算法源码示例
package leetcode; /** * @author ZhouJie * @date 2020年5月14日 下午9:55:37 * @Description: 136. 只出现一次的数字 * */ public class LeetCode_0136 { } class Solution_0136 { /** * @author: ZhouJie * @date: 2020年5月14日 下午9:56:09 * @param: @param nums * @param: @return * @return: int * @Description: 1-直接异或所有数,剩下的即为唯一数; * */ public int singleNumber(int[] nums) { int number = 0; for (int val : nums) { number ^= val; } return number; } }
相关推荐
aanndd 2020-08-12
aanndd 2020-07-26
aanndd 2020-07-08
zangdaiyang 2020-07-04
yaohustiAC 2020-06-28
us0 2020-06-28
yaohustiAC 2020-06-28
zangdaiyang 2020-06-28
Clairezz 2020-06-28
嗡汤圆 2020-06-26
嗡汤圆 2020-06-21
aanndd 2020-06-16
aanndd 2020-06-16
码墨 2020-06-16
yaohustiAC 2020-06-11
zangdaiyang 2020-06-10
jiayuqicz 2020-06-09
yaohustiAC 2020-06-06
heray0 2020-06-04