Sigl num @leetcode

eetcode -- Single Number

Given an array of integers, every element appears twice except for one. Find that single one.

Could you implement it without using extra memory?

[解题思路]

以前看书时遇到过,一个数组中有一个元素出现一次,其他每个元素都出现两次

要求空间复杂度为O(1)

由于两个相同的元素异或的结果为0,而0^a==a,将数组中所有元素都进行异或,得到结果就是只出现一次的元素

复制代码
 1 public class Solution {
 2     public int singleNumber(int[] A) {
 3         // Note: The Solution object is instantiated only once and is reused by each test case.
 4         if(A == null || A.length == 0){
 5             return 0;
 6         }
 7         int result = A[0];
 8         
 9         for(int i = 1; i < A.length; i++){
10             result = result ^ A[i];
11         }
12         return result;
13     }
14 }
复制代码

 

本题扩展

1.一个数组中有两个元素只出现一次,其他所有元素都出现两次,求这两个只出现一次的元素

[解题思路]

将数组所有元素都进行异或得到一个不为0的结果,根据这个结果中的不为0的某一位将数组分成两组

将两组中的元素进行异或,如两个数组的异或值都不为0,则得到最后结果

 

2.一个数组中有一个元素只出现1次,其他所有元素都出现k次,求这个只出现1次的元素

[解题思路]

当k为偶数时,同lss

当k为奇数时,将数组中每个元素的每一位相加mod k,得到结果即位出现1次的元素,时间复杂度O(nlen),空间复杂度为O(1)

阅读更多
个人分类: leetcode
上一篇LeetCode&amp;&amp;Longest Palindromic Substring
下一篇是 String , StringBuffer 还是 StringBuilder ?
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭