1. 程式人生 > >leetcode169---Majority Element(陣列中出現次數超過一半的數)

leetcode169---Majority Element(陣列中出現次數超過一半的數)

問題描述:

Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.

You may assume that the array is non-empty and the majority element always exist in the array.

問題求解:

解法一:O(n) time O(1) space

class Solution {
public:
    int majorityElement(vector
<int>
& nums) { int n=nums.size(); int candidate, nTimes;//陣列中的數和次數 for(int i=0, nTimes=0;i<n;i++) { if(nTimes==0) { candidate = nums[i], nTimes=1; } else { if(candidate == nums[i]) { nTimes++; } else
{ nTimes--; } } } return candidate; } };

解法二:O(n) time O(1) space

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int n=nums.size();
        int candidate=nums[0], nTimes=1;//陣列中的數和次數
for(int i=1;i<n;i++) { if(nums[i] == candidate) { nTimes++; } else { if(nTimes == 0) { candidate = nums[i]; nTimes = 1; } else { nTimes--; } } } return candidate; } };

相關推薦

leetcode169---Majority Element(陣列出現次數超過一半的數)

問題描述: Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ time

劍指offer之陣列出現次數超過一半的數字

1.題目描述 陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。 2.問題分析 方法一:使用map,統計每個數字

【劍指Offer】26陣列出現次數超過一半的數字

題目描述 陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。 時間限制:1秒;空間限制:32768K;本題知識點:陣列 解題思路

【Java】 劍指offer(39) 陣列出現次數超過一半的數字 《劍指Offer》Java實現合集 《劍指Offer》Java實現合集

本文參考自《劍指offer》一書,程式碼採用Java語言。 更多:《劍指Offer》Java實現合集   題目    陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9的陣列{1, 2, 3, 2, 2, 2, 5, 4, 2}。由於數字2在陣列中出現

劍指offer____陣列出現次數超過一半的數字

陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。   class Solution { public:   &nb

【Java】 劍指offer(40) 最小的k個數 《劍指Offer》Java實現合集 劍指offer(39) 陣列出現次數超過一半的數字 《劍指Offer》Java實現合集

本文參考自《劍指offer》一書,程式碼採用Java語言。 更多:《劍指Offer》Java實現合集   題目    輸入n個整數,找出其中最小的k個數。例如輸入4、5、1、6、2、7、3、8這8個數字,則最小的4個數字是1、2、3、4。 思路   思路一:同劍指offer(39

劍指offer——(5)陣列出現次數超過一半的數字

三種思路可選。  public class Solution { /* 渣渣暴力求解法:時間複雜度為n!,從0位遍歷陣列,與當前位置的下一位數字判斷是否相等,相等則 count+1,將出現次數用countTemp儲存,每次迴圈比較一下有沒有出現次數更多的數字,

劍指Offer39:陣列出現次數超過一半的數字

題目: 陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。 例如,輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}.由於數字2在這個陣列中出現了5次,超過陣列 長度的一半,因此輸出2 分析: 若一個數組中有一個數字出現了陣列長度的一半以上,則必是這個陣列的中位數

劍指offer28 陣列出現次數超過一半的數字(java)

題目 中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。 例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。 思路 思路一(程式碼略) 先排序,然後找中位數 思路二

《劍指offer》系列 陣列出現次數超過一半的數字(Java)

連結 牛客: 陣列中出現次數超過一半的數字 題目描述 陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。 思路

劍指offer之找出陣列出現次數超過一半的數字

找出陣列中出現次數超過一半的數字 歡迎關注作者簡書 csdn傳送門 題目   一個數組中有一個數字的次數超過了陣列的一半,求出這個字元。如:int a[] = {2,3,2,2,2,2,2,5,4,1,2,3},求出超過一半的數字是2 分析 解法一

劍指Offer-39 陣列出現次數超過一半的數字

題目: 陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。 解答: # -*- coding:utf-8 -*- cl

(劍指offer)陣列出現次數超過一半的數字

時間限制:1秒 空間限制:32768K 熱度指數:248291 本題知識點: 陣列 題目描述 陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。

【演算法】陣列出現次數超過一半的數字

面試題39:陣列中超過一半的數字 陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9的陣列{1, 2, 3, 2, 2, 2, 5, 4, 2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。 解法1 數字超出一半

劍指offer題解(陣列出現次數超過一半的數字)

題目描述 陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。   解題思路   先找到出現次數最多

演算法風暴第1篇-陣列出現次數超過一半的數字

用頭腦風暴學演算法,對於一個問題,我們不只是要解決它,還要去思考有什麼好的方法,差的方法去解決,甚至是一些錯誤的但可以提供思想借鑑的方法。 此問題“陣列中出現次數超過一半的數字”是一道非常經典的演算法題,我把它放在演算法風暴系列第一篇來解析,探討學習一個演算法

劍指offer----陣列出現次數超過一半的數字

陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。 思路一:排序 將數組裡元素從排序,然後用中間元素判

劍指offer——陣列出現次數超過一半的數字(39題)

題目:陣列中有一個字出現的次數超過陣列長度的一半,請找出這個數字。例如,輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。 解題思想:一定要緊緊抓住輸出數字出現的次數超過陣列長度的一半,這一特性。

劍指offer-陣列出現次數超過一半的數字(陣列

題目描述 陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。 看到這個就想到了c++中的map,C++中map提供的是一種鍵值對容器

統計陣列出現次數超過一半的數字

題目描述 陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如