首页 > 其他 > 详细

lintcode 容易题:Single Number 落单的数

时间:2015-10-18 18:17:37      阅读:1609      评论:0      收藏:0      [点我收藏+]

题目:

落单的数

给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。

样例

给出 [1,2,2,1,3,4,3],返回 4

挑战

一次遍历,常数级的额外空间复杂度

解题:

进去里面程序已经写好了,,也不知道是bug还是之前我网上复制程序的,但是竟然有记录,查看之前做的题目点进去也没有程序的,那一定是官方给的答案了。。。

利用异或^运算,两个相同的数的异或的结果是0,就这样遍历之后的结果就是那个数了。这个题目准确率到目前16:31:24  2015-10-18  57%太高了,看了官方给的答案可能性已经很大了。

Java程序:

技术分享
public class Solution {
    /**
     *@param A : an integer array
     *return : a integer 
     */
    public int singleNumber(int[] A) {
        if (A.length == 0) {
            return 0;
        }

        int n = A[0];
        for(int i = 1; i < A.length; i++) {
            n = n ^ A[i];
        }

        return n;
    }
}
View Code

总耗时: 985 ms

下面通过HashMap来实现,最坏情况下空间复杂度是O(n+1) 

Java程序:

技术分享
public class Solution {
    /**
     *@param A : an integer array
     *return : a integer 
     */
    public int singleNumber(int[] A) {
        if (A.length == 0) {
            return 0;
        }
        HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
        for( int i = 0;i< A.length ; i++){
            if(map.containsKey(A[i])){
                map.remove(A[i]);
            }else{
                map.put(A[i],1);
            }
        }
        Object array[] = map.keySet().toArray() ;
        
        return (Integer)array[0];
    }
}
View Code

总耗时: 1314 ms   1314...

Python程序:

技术分享
class Solution:
    """
    @param A : an integer array
    @return : a integer
    """
    def singleNumber(self, A):
        # write your code here
        if A.length ==0:
            return 0 
        n = A[0]
        for i in range(1,len(A)):
            n = n ^ A[i]
        return n 
View Code

没有测试,网站应该在维护,Python的无法运行程序了

lintcode 容易题:Single Number 落单的数

原文:http://www.cnblogs.com/theskulls/p/4889790.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!