91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

LeetCode如何查只出現一次的數字

發布時間:2021-12-15 13:50:39 來源:億速云 閱讀:108 作者:小新 欄目:大數據

這篇文章主要介紹LeetCode如何查只出現一次的數字,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

題目:

給定一個非空整數數組,除了某個元素只出現一次以外,其余每個元素均出現兩次。找出那個只出現了一次的元素。你的算法應該具有線性時間復雜度。 你可以不使用額外空間來實現嗎?

思路:

上次做了兩數之和的題,對hash印象還深,看到這個題的第一眼就想到hash。

遍歷數組,以當前值為key,若當前表中含有該數字,value為2;若不含有,value為1,遍歷完后,找表中value值為1的數字,若存在,則返回對應key;否則,不存在這樣的數字。

空間復雜度是O(n),不滿足不使用額外空間的題目要求,但我想不出什么方法辣,哭了......;

代碼:
class Solution {
        public int singleNumber(int[] nums) {
            //給定數組非空
            Map<Integer,Integer> map = new HashMap<Integer, Integer>();
            for(int i:nums)
            {
                if(map.containsKey(i))
                {
                    map.put(i,2);
                }
                else
                    map.put(i,1);
            }
            
            for(int j:map.keySet())
            {
                if(map.get(j) == 1)
                    return j;
            }
            return -1;
        }
    }
demo:

輸入:[2,2,1] 輸出:1

輸入:[4,1,2,1,2] 輸出:4

運行結果:

LeetCode如何查只出現一次的數字 LeetCode如何查只出現一次的數字

官方解答

異或位運算

性質1:如果對0和二進制位做異或運算,得到的仍是這個二進制位。

性質2:如果我們對相同的二進制位做異或運算,返回的結果是0。

性質3:異或運算滿足交換律和結合律。

思路

LeetCode如何查只出現一次的數字

代碼
class Solution {
    public int singleNumber(int[] nums) {
        int single = 0;
        for (int num : nums) {
            single ^= num;
        }
        return single;
    }
}

復雜度分析

  • 時間復雜度:O(n)

  • 空間復雜度:O(1)

復習

位運算雖然不是很常見,但是適當的使用可以大量減少開銷。

Java中常用的位運算

&:按位與。

|:按位或。

~:按位非。

^:按位異或。

按位與

操作數10011
操作數20101
按位與0001

按位或

操作數10011
操作數20101
按位或0111

按位非

操作數01
按位或10

按位異或

操作數10011
操作數20101
按位異或0110

以上是“LeetCode如何查只出現一次的數字”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

高青县| 施甸县| 宿州市| 加查县| 黄浦区| 衡东县| 岳阳县| 德昌县| 南召县| 邳州市| 迁安市| 安顺市| 凤冈县| 临西县| 广安市| 唐海县| 莆田市| 武威市| 昆山市| 海南省| 留坝县| 客服| 太湖县| 青神县| 庄河市| 敦化市| 湟中县| 西盟| 屏边| 屯留县| 临漳县| 乌什县| 东丰县| 韶山市| 含山县| 西乌珠穆沁旗| 广水市| 卢氏县| 兴安盟| 永善县| 大冶市|