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

溫馨提示×

溫馨提示×

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

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

c++怎么判斷只出現一次的數字

發布時間:2022-03-17 15:58:01 來源:億速云 閱讀:253 作者:iii 欄目:大數據

本篇內容主要講解“c++怎么判斷只出現一次的數字”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“c++怎么判斷只出現一次的數字”吧!

算法

位運算異或的使用(一)中,兩位相同的數異或為0,轉換成3位數的"異或"操作位0,也就是說我們需要實現同一個bit位的3個1,操作為0就可以,將問題轉換為對如何實現同一bit位的三個數的操作a?b?c =0的運算。

因為兩位數的異或操作,是同一個bit位的兩個數的加法,忽略進位的情況,換種說法就是兩數相加對2取余數。所以三個相同的數的a?b?c = 0的操作就變成了,三位數操作對3取余了。同樣的道理,4位數,n位數都可以采用這一個算法來實現。

題目:只出現一次的數字

算法1:數學公式

這個題目可以轉換成下面的公式:2c = 3(a+b+c)-sum,

這里的a,b,c是數組中出現的元素,c是出現了一次的數,a,b都是出現了3次的數。

sum表示的是:數組里面所有數的和。

備注:同樣的算法,也適合數組里面有n次重復的數組,和1個不重復的數 ,公式為:n(a+b+c)-sum = (n-1)c

代碼實現:

func singleNumber(nums []int) int {    m := make(map[int]int)     s1,s2 := 0,0    for _,n:=range nums {        _,ok := m[n]        if !ok {            m[n] = n        }        s1 += n    }       for _,v:= range m {        s2 += v    }    res := (3*s2-s1)/2    return res}// 算法:假設3個a,b,一個c: 公式: 3(a+b+c) - sum = 2c

算法2: 采用位運算

指導思路是:轉換成前面算法篇:位運算異或的使用(一)中,兩位相同的數異或為0,轉換成3位數的"異或"操作位0,也就是說我們需要實現同一個bit位的3個1,操作為0就可以,將問題轉換為對如何實現同一bit位的三個數的操作a?b?c =0的運算。

因為兩位數的操作采用的是異或,也就是 :

1^1 = 0 1^0 = 10^1 = 10^0 =0這其實是同一個bit位的兩個數的加法,忽略進位的情況,換種說法就是兩數相加對2取余數。

所以三個相同的數的a?b?c = 0的操作就變成了,三位數操作對3取余了。

代碼實現:

func singleNumber(nums []int) int {    num,res := 0,0    for i:=0;i<64;i++ {        // 每一bit位都需要計算,所以這里要做清0處理        num = 0        for _, n := range nums {            // 通過右移,來計算num的數量            num += (n>>i)&1        }        // 將計算結果還原到對應的bit位        res |= (num)%3<<i    }    return res}

到此,相信大家對“c++怎么判斷只出現一次的數字”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

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

c++
AI

搜索| 如皋市| 西贡区| 邯郸县| 马山县| 宁南县| 洛南县| 聂拉木县| 咸宁市| 韶山市| 望江县| 容城县| 莎车县| 民勤县| 得荣县| 威海市| 湟源县| 淮阳县| 正宁县| 桐城市| 凤凰县| 桃园县| 霍州市| 梁山县| 年辖:市辖区| 延庆县| 天气| 汉阴县| 镇雄县| 龙胜| 淳化县| 湘西| 九龙县| 玉龙| 阿巴嘎旗| 鸡东县| 高雄县| 湖北省| 阿城市| 古浪县| 安国市|