494,位運算解只出現一次的數字

2021-02-25 數據結構和算法

By letting go of something, your arms are free to grab hold of something else.

學會放手,才能獲得更多。

給定一個非空整數數組,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。

說明:

你的算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?

示例 1:

示例 2:

這題說的是只有一個數出現了一次,其他數字都出現了2次,讓我們求這個只出現一次的數字。這題使用位運算是最容易解決的,關於位運算有下面幾個規律

1^1=0;

1^0=1;

0^1=1;

0^0=0;

也就說0和1異或的時候相同的異或結果為0,不同的異或結果為1,根據上面的規律我們得到

a^a=0;自己和自己異或等於0

a^0=a;任何數字和0異或還等於他自己

a^b^c=a^c^b;異或運算具有交換律

有了這3個規律,這題就很容易解了,我們只需要把所有的數字都異或一遍,最終的結果就是我們要求的那個數字。來看下代碼

1public int singleNumber(int nums[]) {
2    int result = 0;
3    for (int i = 0; i < nums.length; i++)
4        result ^= nums[i];
5    return result;
6}

這個應該是最容易想到的,我們遍歷數組中的元素,然後在一個個添加到集合Set中,如果添加失敗,說明以前添加過,就把他給移除掉。當我們把數組中的所有元素都遍歷完的時候,集合Set中只會有一個元素,這個就是我們要求的值。

1public int singleNumber(int[] nums) {
2    Set<Integer> set = new HashSet<>();
3    for (int num : nums) {
4        if (!set.add(num)) {
5            //如果添加失敗,說明這個值
6            //在集合Set中存在,我們要
7            //把他給移除掉
8            set.remove(num);
9        }
10    }
11    //最終集合Set中只有一個元素,我們直接返回
12    return (int) set.toArray()[0];
13}

還有一種解題思路就是使用HashMap來統計,但無論哪種方式都沒有位運算來的快。

長按上圖,識別圖中二維碼之後即可關注。

如果覺得有用就點個"贊"吧

相關焦點

  • 499,位運算解只出現一次的數字 III
    給定一個整數數組nums,其中恰好有兩個元素只出現一次,其餘所有元素均出現兩次。找出只出現一次的那兩個元素。示例 :輸入: [1,2,1,3,2,5]輸出: [3,5]前面剛講過一個和這題類似的題494,位運算解只出現一次的數字,只不過第494題只有一個數字出現一次,但這題是有兩個數字只出現一次。
  • 每日算法-只出現一次的數字(數學-簡單)
    題目一:只出現一次的數字 I給定一個非空整數數組,除了某個元素只出現一次以外,其餘每個元素均出現兩次
  • 由淺入深,解決三道「只出現一次的數」!
    為保證嚴謹性,文章中的所有代碼均經過測試,大家可以放心食用題目來源:leetcode 136隻出現一次的數(簡單),137隻出現一次的數Ⅱ(中等)260隻出現一次的數Ⅲ(中等)只出現一次的數給定一個非空整數數組,除了某個元素只出現一次以外,其餘每個元素均出現兩次。
  • TL494基礎入門:在集成電路中的應用
    2.1 輸入電路兩個運算放大器IC1A、IC1B都接成有源簡單二階低通濾電路,分別作為反饋信號輸入和設定信號輸入的處理電路。在電路設計上,兩個輸入電路採取完全對稱的形式。把TL494的14腳輸出的5V基準電壓源,用一3.3kΩ精密多圈電位器W1分壓作為設定輸入信號,通過與處理傳感器反饋信號相同的電路,送入TL494的管腳2,即誤差放大器I的反相輸入端IN-端。實驗中發現,R19、R20這兩個限流隔離電阻必不可少。否則,TL494誤差放大器I的兩個輸入端的電位將相互影響。
  • ​LeetCode刷題實戰137:只出現一次的數字 II
    今天和大家聊的問題叫做只出現一次的數字 II,我們先來看題面:https://leetcode-cn.com/problems/single-number-ii/Given an integer array nums where every element appears three times except for one, which appears exactly
  • 有效數字的加減乘除與自然數運算規則
    在前面文章中,根據儀器的準確度介紹了有效數字的意義,和記錄原則。而在容量分析計算中,有效數字的保留更為重要。下面僅就加減和乘除法的運算規則加以討論。因此最後結果有效數字的保留應以此數為準即保留有效數字的位數到小數點後第二位。所以左面的寫法是正確的,而右面的寫法是不正確的。2.乘除法乘除法運算中,保留有效數字的位數,以位數最少的數為準,即以相對誤差最大的數為準。
  • Java二進位和位運算,這一萬字準能餵飽你
    二進位在了解什麼是位運算之前,十分有必要先科普下二進位的概念。二進位是計算技術中廣泛採用的一種數制。二進位數據是用0和1兩個數碼來表示的數。它的基數為2,進位規則是逢二進一,借位規則是借一當二。因為它只使用0、1兩個數字符號,非常簡單方便,易於用電子方式實現。
  • 運算1個月 完成一個128位數字的質因數分解
    日本研究人員最近利用安裝有專用晶片的並行計算機,對一個128位的數字完成了分解質因數的實驗,這在世界上尚屬首次。  除了1和本身以外,不能被其他正整數所整除的整數叫做質數。所謂分解質因數,是指將一個數分解成質數相乘的形式。
  • TL494在電動助力車控制中的應用(TL494工作原理和引腳功能)
    TL494簡介   TL494是一種固定頻率脈寬調製電路,它包含了開關電源控制所需的全部功能,廣泛應用於橋式單端正激雙管式、半、全橋式開關電源。   TL494工作原理   TL494是一個固定頻率的脈衝寬度調製電路,內置了線性鋸齒波振蕩器,振蕩頻率可通過外部的一個電阻和一個電容進行調節,其振蕩頻率如下:
  • 三分鐘熟悉進位轉換與位運算
    進位和位運算簡介進位也叫進位制,是一種記數方法,也稱進位計數法,利用這種記數法可以使用有限的數字符號來表示所有的數值。
  • [洛穀日報第79期]二進位與位運算
    一道例題(2017tg初賽)先確定該數是負數,然後還原操作得到 01010101=85 ,結果為 -85--介紹幾種簡單的位運算因為計算機使用的是二進位,自然就有獨成一套體系的運算方式,即位運算。位運算是計算機中最簡潔的運算,並且具有很好用的性質,而且用起來還比較快。總而言之,位運算是十分實用的。
  • 6174是一個神秘的數字!
    結果,這些組合中只有一個組合有整數解且滿足9 ≥ a ≥ b ≥ c ≥ d ≥ 0。這個組合是 ABCD = bdac,此時相應的方程組的解為 a=7, b=6, c=4 and d=1。也就是 ABCD= 6174。整數 {a,b,c,d} 中某些數相同時沒有使等式同時成立的有效解。因此,6174是唯一一個不會被卡普雷卡運算改變的數——我們的神秘數字是唯一的。
  • 行列式之逆序數和一般運算法則
    首先看二元一次線性方程組:在不考慮參數的具體取值情況下,可以得出變量的解的形式如下:如果採取下面這種標記法,即行列式:則方程的解可表示為。通過設定這樣的規則,方程組的解的形式有了一定的規律。那麼很自然地可以推廣到n元方程組。
  • 初一數學·解一元一次方程(一)
    教學目的     1.了解一元一次方程的概念。     2.掌握含有括號的一元一次方程的解法。     重點、難點     1.重點:解含有括號的一元一次方程的解法。     教學過程     一、複習提問     1.解下列方程:     (1)5x-2=8      (2)5+2x=4x     2.去括號法則是什麼?「移項」要注意什麼?
  • 開根號算法的證明——逆運算
    表示決定十位數字的原平方數數值需要左移兩位(也正因為如此,截位才從右向左每隔兩位一截),然後再根據哪個整數的平方剛好小於或者等於左移兩位後的原平方數數值估算出十位數a的值;   三位數的平方開根號證明:假設三位數的百位數的數字是a, 十位數數字是b,個位數數字是c,則這三位數可以表述為100a+10b+c,進而有:
  • 七年級數學,解一元一次方程時易出現的錯誤及解決方法
    整式方程包括一元一次方程、二元一次方程組、三元一次方程組、一元二次方程。而多元方程、高次方程及分式方程,解題的基本思路最後都是化為一元一次方程。因此,讓學生熟練掌握一元一次方程的解法非常重要。對於剛升入初中的七年級學生來說,解一元一次方程的步驟較多,學生解題時非常容易出錯。
  • 誤差的分析與減少及Matlab解線性方程的四種方法
    1、誤差的來源     模型誤差:數學模型與實際問題之間的誤差     觀測誤差:測量數據與實際數據的誤差     方法誤差:數學模型的精確解與數值方法得到的數值解之間的誤差
  • 如何利用C語言求二元一次方程的解
    我們今天先拿二元一次方程來開刀。大家都知道二元一次方程的解,有三種情況,即無解, 有兩個相同的解,有兩個不同的解。那麼在編程前我們先要制定流程圖,二元一次方程的係數在這裡我們依然使用我們常用的a,b,c,根的判別式,這個我們都知道b^2-4ac(其中『^』這個是指數的意思),求解公式等。
  • 初中數學一元一次方程知識點:方程解應用題,這些要點要知道
    今天,黃小將為大家整理了初中階段,一元一次方程解題過程中要注意的一些點,尤其是在應用題中的用法,我們一起來看看吧。一、方程與解一元一次的方程定義我們都知道,就是只含有一個未知數的次數是1的方程叫做一元一次方程,一般形式是:ax+b=0(a≠0)。
  • 快速冪與位運算
    :      & (位      "與")  and      ^ (位   "異或")      |   (位      "或")   or      ~ (位   "取反")2 、移位運算符:      <<  (左移)        >> (右移)