【LeetCode】Single Number
来源:互联网 发布:珠海网络教育 编辑:程序博客网 时间:2024/05/16 10:53
Single Number
Total Accepted: 19208 Total Submissions: 42682 My Submissions
Given an array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
【解题思路】
两个相同元素异或的结果为0。
因为数组中其他元素都出现2次,只有一个出现1次,所以循环整个数组,依次异或,结果就应该是那个只出现1次的数字。
Java AC 352ms
public class Solution { public int singleNumber(int[] A) { if(A == null || A.length == 0 ){ return 0; } int result = A[0]; for(int i = 1; i < A.length; i++){ result ^= A[i]; } return result; }}
update 2014-06-10(增加python)
Python AC 284ms
class Solution: # @param A, a list of integer # @return an integer def singleNumber(self, A): alen = len(A) result = A[0] for i in range(1, alen, 1): result ^= A[i] return result这个题目其实和九度上的题目1256:找出两个只出现了一次的数字有点类似。
不同之处在于1256比这个难度上升了一点。有两个数字出现一次,其他都出现两次。
根据这个题目的思路,如果我们能将原数组分为两个数组,每个数组中只有一个数字出现一次,其他都出现两次就好办多了。
怎么分呢。
和这个题目一样,先将整个数组异或一次,那么结果就是各出现一次的那两个数字的异或结果。
因为这两个数字不相同,所以异或结果一定不为0,那么用2进制表示的这个数中必然有1位为1。
我们找出这个结果中第一次出现1的位置index,根据1的位置,将原数组分为两个子数组。
一个数组的index位全部为0,另一个全部为1,那么再次异或就得到了两个数字。
Java AC
import java.io.StreamTokenizer; public class Main { /* * 1256 */ public static void main(String[] args) throws Exception { StreamTokenizer st = new StreamTokenizer(System.in); while (st.nextToken() != StreamTokenizer.TT_EOF) { int N = (int) st.nval; int[] array = new int[N]; int result = 0; for (int i = 0; i < N; i++) { st.nextToken(); array[i] = (int) st.nval; result ^= array[i]; } int num = 0; while ((result & 1) == 0) { result = result >> 1; num++; } int num1 = 0; int num2 = 0; for (int i = 0; i < N; i++) { if (((array[i] >> num) & 1) == 0) { num1 ^= array[i]; } else { num2 ^= array[i]; } } if (num1 > num2) { System.out.println(num2 + " " + num1); } else { System.out.println(num1 + " " + num2); } } }}/************************************************************** Problem: 1256 User: wangzhenqing Language: Java Result: Accepted Time:770 ms Memory:33104 kb****************************************************************/
LeetCode算是除九度之外的另一个开始吧。加油。
- leetcode Single Number & Single Number ||
- [LeetCode] Single Number
- Leetcode: Single Number
- Leetcode Single Number
- Single Number - leetcode
- Single Number II - leetcode
- Leetcode: Single Number II
- 【LeetCode】Single Number
- [LeetCode] Single Number II
- LeetCode: Single Number II
- LeetCode: Single Number
- leetcode -- Single Number II
- [leetcode]Single Number II
- [LeetCode] Single Number II
- [LeetCode]Single Number
- Leetcode Single Number
- 【leetcode】Single Number
- 【leetcode】Single Number II
- OCP-1Z0-新051-61题版本-34
- 2013年度总结
- OCP-1Z0-新051-61题版本-35
- 丑数(humble number) hdu 1058 DP
- OCP-1Z0-新051-61题版本-36
- 【LeetCode】Single Number
- 游戏服务端之AOI概述
- 什么是增量检查点?
- OCP-1Z0-新051-61题版本-37
- OCP-1Z0-新051-61题版本-38
- 设计模式初探-Builder模式
- OCP-1Z0-新051-61题版本-39
- 河南三联急聘Java程序员
- Click ListView Item跳转Activity