百度面試題:找出陣列中出現次數超過一半的數
現在有一個數組,已知一個數出現的次數超過了一半,請用O(n)的複雜度的演算法找出這個數。
Thinking……/>
建立一個hash_map,key為陣列中的數,value為此數出現的次數。遍歷一遍陣列,用hash_map統計每個數出現的次數,並用兩個值儲存目前出現次數最多的數和對應出現的次數。
這樣可以做到O(n)的時間複雜度和O(n)的空間複雜度,滿足題目的要求。
但是沒有利用“一個數出現的次數超過了一半”這個特點。也許演算法還有提高的空間。答案2:
使用兩個變數A和B,其中A儲存某個陣列中的數,B用來計數。開始時將B初始化為0。
遍歷陣列,如果B=0,則令A等於當前數,令B等於1;如果當前數與A相同,則B=B+1;如果當前數與A不同,則令B=B-1。遍歷結束時,A中的數就是要找的數。
這個演算法的時間複雜度是O(n),空間複雜度為O(1)。/>
相關推薦
百度面試題:找出陣列中出現次數超過一半的數
現在有一個數組,已知一個數出現的次數超過了一半,請用O(n)的複雜度的演算法找出這個數。 Thinking……/>/> Thinking……/>/>/> Thinking……/>/>/> Thinking……/>/>/> Think
《劍指Offer》面試題:找出陣列中有3個出現一次的數字
題目 一個int陣列中有三個數字a、b、c只出現一次,其他數字都出現了兩次。請找出三個只出現一次的數字。 思路 由於3個數字出現一次,其他數字均出現兩次,因此可以得到n一定為奇數。 3個只出現一次的數字,他們的bit位肯定不可能全部相同,也就是說
劍指offer之找出陣列中出現次數超過一半的數字
找出陣列中出現次數超過一半的數字 歡迎關注作者簡書 csdn傳送門 題目 一個數組中有一個數字的次數超過了陣列的一半,求出這個字元。如:int a[] = {2,3,2,2,2,2,2,5,4,1,2,3},求出超過一半的數字是2 分析 解法一
快速找出陣列中出現次數超過一半的數字
“只要不是特別大的記憶體開銷,時間複雜度比較重要。因為改進時間複雜度對演算法的要求更高。” ——吳斌(NVidia,Graphics Architect) 同樣是查詢,如果是順序查詢需要O(n)的時間;如果輸入的是排序的陣列則只需要O(logn)的時間;如果事先已經構造好了
問題6: 找出字串中出現次數最多的字母及其出現的次數
這好像是華為機試的一道題目,我採用JAVA來完成,用JAVA也可以用其他方法。 我用一個比較簡單的方法,程式碼如下: public class Str{ public static void main(String[] args){ String str =
找出陣列中出現次數最多的數字
#include <stdio.h> #include <stdlib.h> /* run this program using the console pauser or add your own getch, system("pause") or
找出陣列中出現次數最多的那個數——主元素問題
方法一:以空間換時間,可以定義一個計數陣列int count[100],用來對陣列中數字出現的次數進行計數(只能針對陣列中數字的範圍1~1000),count陣列中最大的元素對應的下標,即為出現次數最多的那個數。程式碼如下: #include <iostream&g
面試題:找出無序陣列中出現頻率最高的元素
解決這道題的思路有很多 比如: 1.給陣列排序變成有序陣列,然後找到重複次數最多的元素; 2.用HashMap儲存陣列元素,優先佇列存取陣列元素出現的次數,找出現次數最多的元素輸出; 3.記錄元素出現的次數及對應的值,迴圈不斷更新最大次數和對應的值,最後儲存
資料結構面試題總結5——陣列:找出陣列中唯一一個出現一次的元素
問題描述:一個數組其中有一個元素出現了一次(奇次),其他元素都出現兩次(偶數次數),找出出現一次(奇次)的元素。 分析:碰到這種偶次奇次的問題,首先要想一下位運算中的異或。一個數異或本身為0,一個數異或0不變。a ^ a = 0, a ^ 0 = a。 這個題中,我們可以把
python字串面試題:找出一個字串中第一個字母和最後一個字元是第一次重複,中間沒有重複且最長的子串
1.給出任意一個字串,列印一個最長子串字串及其長度,如果有相同長度的子字串,都要一起打印出來,該子字串滿足以下條件, 第一個字母和最後一個字元是第一次重複 這個子字串的中間字母沒有重複 這個子字串是滿足條件裡面的最長的 如: adsasadmasd 中滿足條件的是dmasd im
微策略2011校園招聘筆試題(找出陣列中兩個只出現一次的數字)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
經典演算法題1:找出陣列中只出現一次的數字,其它數字都出現了兩次
題目:一個整型數組裡除了一個數字之外,其它的數字都出現了兩次。請寫程式找出這個只出現一次的數字。要求時間複雜度是O(n),空間複雜度是O(1)。 分析:由於題目要求時間複雜度為O(n),所以先排序然後比較相鄰數字是否相同的思路被排除。 空間複雜度是O
演算法習題61:找出陣列中兩個只出現一次的數字:一個整型數組裡除了兩個數字之外,其他的數字都出現了兩次
找出陣列中兩個只出現一次的數字 題目:一個整型數組裡除了兩個數字之外,其他的數字都出現了兩次。 請寫程式找出這兩個只出現一次的數字。要求時間複雜度是 O(n),空間複雜度是 O(1)。 --------------------------------------------
陣列:找出陣列中重複元素最多的數
題目描述: 如何找出陣列中重複元素最多的數 思路: 使用Map對映表記錄每一個元素出現的次數,然後判斷次數大小,進而找出重複次數最多的元素。key表示陣列的元素,value表示這個元素在陣列中出現的次數。最後對map進行遍歷。 程式碼: /** * 使用map
前端演算法題:找出陣列中第k大的數字出現多少次
題目:給定一個一維陣列,如[1,2,4,4,3,5],找出陣列中第k大的數字出現多少次。 例如:第2大的數是4,出現2次,最後輸出 4,2 function getNum(arr, k){ // 陣列排序->從大到小 arr.sort((a, b)=>{
劍指offer(面試題39):陣列中出現次數超過陣列長度一半的數字
方法1: 從數學角度看,所求的數一定的原陣列(有序化)的中位數,那麼,我們可以通過對陣列排序,這樣得到的時間複雜度是O(nlogn)O(nlogn)。而如果能夠優化到在O(n)O(n)的時間內找到,就更好了。基於快速排序的partition階段,如果我們可以
問題8:如何找出陣列中重複次數最多的數?
一種方法是以空間換時間,可以定義一個數組 int count[MAX],並將其陣列元素都初始化為0,然後執行for(int i=0; i<100; i++) count[A[i]]++操作,在count中找最大的數,即為重複次數最多的數。 程式碼如下:
2018騰訊內部調崗面試試題3——找出陣列中比左邊大比右邊的小的元素
題目:以時間複雜度O(n)從長度為n的陣列中找出同時滿足下面兩個條件的所有元素: (1)該元素比放在它前面的所有元素都大; (2)該元素比放在它後面的所有元素都小。 分析:面試官給的上面冗餘的描述
找出陣列中出現一次兩個數,其他數字都出現偶數次
{ unsigned int flag =1; while(flag) //求異或結果,最低的為1的二進位制位,根據此位是否為1,將元素分為兩組,兩個不同的元素,在此位必然,一個為1,一個為0 { if(flag&sum) break;
找出陣列中重複次數最多的數
方法一:如果相同的數是連續出現 從第一個數開始,與它後面的數比較,如果相同,計算+1,如果不等,計數置為1.同時保持此時的計數次數和此時的元素; #include<stdio.h> in