​LeetCode刷題實戰137:只出現一次的數字 II

2021-01-14 程序IT圈
算法的重要性,我就不多說了吧,想去大廠,就必須要經過基礎知識和業務邏輯面試+算法面試。所以,為了提高大家的算法能力,這個公眾號後續每天帶大家做一道算法題,題目就從LeetCode上面選 !今天和大家聊的問題叫做只出現一次的數字 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 once. Find the single element and return it.

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



示例 1:

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

示例 2:

輸入: [0,1,0,1,0,1,99]
輸出: 99

解題由於所有數都是整數,所以最大位數為32位,對於出現三次的數,統計每一位上1出現的次數一定能被3整除,而不能被三整除的位一定是單獨出現的數造成的,所以依次統計每一位的次數,並把不能被3整除的位數設為1賦給結果。C++代碼如下,非常簡單 。

class Solution {
public:
    int singleNumber(vector<int>& nums) {int res = 0;
        for(int i = 0; i < 32; i++){
            int sum = 0;
            for(int num: nums)
                if((num >> i) & 1)
                    sum++;
            if(sum % 3)
                res |= 1 << i;
        }
        return res;
    }
};

好了,今天的文章就到這裡,如果覺得有所收穫,請順手點個在看或者轉發吧,你們的支持是我最大的動力。

相關焦點

  • LeetCode145|數組中數字出現的次數II
    一,數組中數字出現的次數II1,問題描述在一個數組 nums 中除一個數字只出現一次之外,其他數字都出現了三次
  • LeetCode刷題第三周【數組(簡單)】
    至少是其他數字兩倍的最大數(難度:簡單)Oct.29 刷題請點擊或見附錄:747. 至少是其他數字兩倍的最大數[4]題目要求:在一個給定的數組nums中,總是存在一個最大元素 。查找數組中的最大元素是否至少是數組中每個其他數字的兩倍。
  • ​LeetCode刷題實戰53:最大子序和
    所以,為了提高大家的算法能力,這個公眾號後續每天帶大家做一道算法題,題目就從LeetCode上面選 !今天和大家聊的問題叫做 最大子序和,我們先來看題面:https://leetcode-cn.com/problems/maximum-subarray/Given an integer array nums, find the contiguous subarray (containing at least one number
  • ​LeetCode刷題實戰15題: 三數之和
    所以,為了提高大家的算法能力,這個公眾號後續每天帶大家做一道算法題,題目就從LeetCode上面選 !即使數組當中的數有重複,同一個數也只能使用一次。LeetCode第一題2 Sum的提升版,在之前的題目當中,我們尋找的是和等於某個值的兩個數的組合。
  • leetcode刷對了麼
    今天,逆行君就帶你從世界觀和方法論兩方面走進「leetcode」 簡單來說,leetcode是一個美國的在線編程網站,它收集了各大公司的經典算法面試題,用戶可以選擇不同的語言進行代碼的在線編寫、編譯和調試。
  • 通關LeetCode刷題完整攻略,省時又高效
    Pattern: Two Heaps,雙堆類型很多問題中,我們被告知,我們拿到一大把可以分成兩隊的數字。為了解決這個問題,我們感興趣的是,怎麼把數字分成兩半?使得:小的數字都放在一起,大的放在另外一半。雙堆模式就能高效解決此類問題。
  • [LeetCode] 850. Rectangle Area II 矩形面積之二
    這道題是之前那道 Rectangle Area 的拓展,那道題只有兩個矩形重疊,而這道題有多個矩形可能同時重疊,整體難度一下就上來了,那麼通過將所有矩形面積加起來再減去重疊區域的方法這裡就不太適用了,因為多個矩形在同一區域重疊的話,都減去重疊面積是會錯的,還得把多減的補回來,相當的麻煩。
  • 由淺入深,解決三道「只出現一次的數」!
    為保證嚴謹性,文章中的所有代碼均經過測試,大家可以放心食用題目來源:leetcode 136隻出現一次的數(簡單),137隻出現一次的數Ⅱ(中等)260隻出現一次的數Ⅲ(中等)只出現一次的數給定一個非空整數數組,除了某個元素只出現一次以外,其餘每個元素均出現兩次。
  • 網際網路公司最常見的面試算法題大集合
    很多求職者都會在LeetCode刷上一遍,面試官也喜歡在上面挑選各類題目。LeetCode是一個美國的在線編程網站,收集了各個大廠的筆試面試題,對找工作的畢業生和開發者來說,非常有價值。不過LeetCode上面的題目很多都是考察應聘者對基礎知識的應用,適合進行練習編程基礎或者準備面試。
  • Leetcode刷題No.234
    今天的題目就是一道套路題。https://leetcode-cn.com/problems/palindrome-linked-list
  • 小張刷題計劃
    原題為了提高自己的代碼能力,小張制定了 LeetCode 刷題計劃,他選中了 LeetCode 題庫中的 n 道題,編號從 0 到 n-1,並計劃在 m 天內按照題目編號順序刷完所有的題目(注意,小張不能用多天完成同一題)。在小張刷題計劃中,小張需要用 time[i] 的時間完成編號 i 的題目。
  • LeetCode數組類知識點&題型總結
    leetcode第一題就是two-sum,對於這類題目,首先看題目要求的時間複雜度和空間複雜度是什麼,其次看有沒有限制條件,如要求不能有重複的子數組或者要求按照升序/降序排列等。形式有很多種,例如求一個數組中和最小的子數組(209題),或者積最小的子數組(238題)Input: s = 7, nums = [2,3,1,2,4,3]Output: 2解釋:滿足子數組和=7的最小長度數組是[4,3],所以output=2解題思路:求的數字要大於等於這個數字target,譬如這個testcase中,[2,3,1,2,4,3
  • 刷了幾千道算法題,我私藏的刷題網站都在這裡了
    然而我是誰,我可是死狗中的戰鬥雞,智力不夠那刷題來湊,開始了夜以繼日哼哧哼哧刷題的日子,從此"讀題與提交齊飛, AC 與 WA 一色 ",我驚喜的發現被題虐既刺激又有快感,那一刻我淚流滿面。這麼好的事兒作為一個正直的人絕不能自己獨享,經過激烈的顱內鬥爭,我決定把我私藏的十幾個 T 的,阿不,十幾個刷題網站放出來,讓我們一起爽!
  • [LeetCode] 912. Sort an Array 數組排序
    ,在平時刷其他題的時候,遇到要排序的時候,一般都會調用系統自帶的排序函數,像 C++ 中直接就調用 sort 函數即可,但是這道題考察的就是排序,再調用系統的排序函數就有些說不過去了。它們的時間複雜度不盡相同,這道題貌似對於平方級複雜度的排序方法會超時,所以只能使用那些速度比較快的排序方法啦。
  • leetcode之羅馬數字轉整數
    序本文主要記錄一下leetcode之羅馬數字轉整數題目給定一個羅馬數字,將其轉換成整數。
  • 8個程式設計師常用的刷題網站,第一個你絕對用過!
    作者 | JackTian 來源 | 傑哥的IT之旅 好久沒跟大家分享實用工具了,今天給大家分享一些程式設計師常用的刷題網站
  • 499,位運算解只出現一次的數字 III
    給定一個整數數組nums,其中恰好有兩個元素只出現一次,其餘所有元素均出現兩次。找出只出現一次的那兩個元素。示例 :輸入: [1,2,1,3,2,5]輸出: [3,5]前面剛講過一個和這題類似的題494,位運算解只出現一次的數字,只不過第494題只有一個數字出現一次,但這題是有兩個數字只出現一次。
  • 494,位運算解只出現一次的數字
    給定一個非空整數數組,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明:你的算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1:示例 2:這題說的是只有一個數出現了一次,其他數字都出現了2次,讓我們求這個只出現一次的數字。
  • [LeetCode] 923. 3Sum With Multiplicity 三數之和的多種情況
    Note:3<=A.length<=30000<=A[i]<=1000<=target<=300這道題是之前那道 3Sum 的拓展,之前那道題是說沒有重複數字,而這道題卻有大量的重複數字,所以每個組合可能會大量重複出現,讓我們統計出所有組合的總出現次數,並對一個超大數取餘。