面試題29 陣列中出現次數超過一半的數字

2021-07-03 14:20:47 字數 959 閱讀 5386

/*面試題29:陣列中出現次數超過一半的數字

*題目:陣列中有乙個數字的出現次數超過了陣列長度的一半,找出這個數字。

*常規的演算法是先對陣列排序,排序的時間複雜度是o(nlogn)。

*如果和之前儲存的數字相同,次數加1;不同則次數減1.次數為0,則儲存下乙個數字並把次數設為1.我們要找

*的數字就是最後一次把次數設為1的數字。

*/public class morethanhalfnum

else if(numbers[i]==result)

times++;

else

times--;

} if(!checkmorethanhalf(numbers,result))

result=0;

return result;

} //判讀超過一半的數是否存在

public static boolean checkmorethanhalf(int numbers,int number)

boolean ismorethanhalf=true;

if(times*2<=numbers.length)

ismorethanhalf=false;

return ismorethanhalf;

} public static void main(string args) ;

int a2 = ;

int a3=null;

int a4=;

system.out.println(morethanhalfnum(a1));

system.out.println(morethanhalfnum(a2));

system.out.println(morethanhalfnum(a3));

system.out.println(morethanhalfnum(a4));

}}

面試題29 陣列中出現次數超過一半的數字

題目 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5詞,超過陣列長度的一半,因此輸出2.思路 1,如果對陣列排序,那麼n 2對應的數一定是超過一半的數字 前提是存在這個數字 即長度為n的陣列中第n 2大的數字,o n 2,根據陣列...

面試題29 陣列中出現次數超過一半的數字

題目 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。這題要做出來比較簡單,但是要考慮優化就不那麼容易了。首先,寫個簡單的 class solution if iter num...

面試題25 陣列中出現次數超過一半的數字

方法一 先對陣列進行排序 再遍歷排序後的陣列,統計每個數 的次數 出現次數最大的數即為要找的數。時間複雜度 o nlogn o n o nlogn 不需要額外儲存空間 方法二 先對陣列進行排序 出現次數超過陣列長度的一半的數必然是 陣列中間的那個數 時間複雜度o nlgn o 1 o nlgn 不需...