LeetCode:Single Number

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. 

給出一個整型數組,其中除了一個元素之外,其他元素均出現兩次,要求找出這個只出現一次的元素。

題目要求使用線性的時間複雜度。


解題思路:

若使用暴力解決的方法,使用兩個循環,針對每個元素遍歷整個數組的其他元素,判斷是否有相同的元素,若沒有相同的元素,則返回當前元素。這種方法的時間複雜度爲O(N^2),顯然不符合要求。

第二種方法,使用空間換時間的思想,使用一個哈希表遍歷一次整個數組來存儲數組各個元素出現的個數,隨後再遍歷一次,若當前元素在哈希表中的Value值爲1,則返回當前元素。這種方法的時間複雜度爲O(n),符合要求。


代碼如下:

public class Solution {
    public int singleNumber(int[] nums) {
        Map<String, Integer> map = new HashMap<String, Integer>();
        int length = nums.length;
        for(int i=0; i<length; i++){
            String numstr = nums[i] + "";
            if(map.get(numstr) !=null && map.get(numstr) == 1){
                map.put(numstr, 2);
            }else{
                map.put(numstr, 1);
            }
        }
        for(int i=0; i<length; i++){
            String numstr = nums[i] + "";
            if(map.get(numstr) == 1){
                return nums[i];
            }
        }
        
        return -1;
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章