獲取陣列中出現次數超過一半的元素
阿新 • • 發佈:2019-02-16
根據陣列特點找出O(n)的演算法
1.陣列中有一個數字出現的次數超過陣列長度的一半,也就是說它出現的次數比其他所有的數字出現的次數的和還要多。
2.因此我們可以考慮在遍歷陣列的時候儲存兩個值:一個是陣列中的一個數字,一個是次數。
3.當我們遍歷到下一個數字的時候,如果下一個數字和我們之前儲存的數字相同,則次數加1,否則減1.
private static int MoreHalf(int[] nums) { int result = 0; int count = 1; if (nums.length == 0) return -1; result = nums[0]; for (int i = 1; i < nums.length; i++) { if (count == 0) { result = nums[i]; count = 1; continue; } if (result == nums[i]) count++; else count--; } count = 0; for (int i = 1; i < nums.length; i++) { if(result == nums[i]){ count++; } } if(count > nums.length/2){ return result ; } return 0; }