leetcode -- 169、191

169.多數元素

題目描述

給定一個大小爲 n 的數組,找到其中的多數元素。多數元素是指在數組中出現次數大於 ⌊ n/2 ⌋ 的元素。

你可以假設數組是非空的,並且給定的數組總是存在多數元素。

示例 1:

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

示例 2:

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

解題方法

思路一:哈希

利用鏈表處理衝突,但是出現負數時不好處理,作廢

思路二:排序,計數

先快排,再統計元素個數,求得多數元素。超時,作廢

思路三:投票法

官方給的方法,題解也有

int majorityElement(int* nums, int numsSize)
{
    int key = nums[0];
    int count = 0;
    for (size_t i = 0; i < numsSize; i++)
    {
        if(nums[i] == key)
            count++;
        else
            count--;

        if(count <= 0)
        {
            key = nums[i+1];
        }
    }
    return key;
}

在這裏插入圖片描述
這也太難了吧

191.位1的個數

題目描述

編寫一個函數,輸入是一個無符號整數,返回其二進制表達式中數字位數爲 ‘1’ 的個數(也被稱爲漢明重量)。

示例 1:

輸入:00000000000000000000000000001011
輸出:3
解釋:輸入的二進制串 00000000000000000000000000001011 中,共有三位爲 ‘1’。

示例 2:

輸入:00000000000000000000000010000000
輸出:1
解釋:輸入的二進制串 00000000000000000000000010000000 中,共有一位爲 ‘1’。

示例 3:

輸入:11111111111111111111111111111101
輸出:31
解釋:輸入的二進制串 11111111111111111111111111111101 中,共有 31 位爲 ‘1’。

提示:

請注意,在某些語言(如 Java)中,沒有無符號整數類型。在這種情況下,輸入和輸出都將被指定爲有符號整數類型,並且不應影響您的實現,因爲無論整數是有符號的還是無符號的,其內部的二進制表示形式都是相同的。
在 Java 中,編譯器使用二進制補碼記法來表示有符號整數。因此,在上面的 示例 3 中,輸入表示有符號整數 -3。

解題方法

直接解就行了,和169都是easy,爲啥差別這麼大。。

int hammingWeight(uint32_t n) 
{
    int num = 0;
    while (n>0)
    {
        if (n & 0x00000001== 1)
            num ++;
        n = n >> 1;
    }
    return num;
}

在這裏插入圖片描述

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