给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入: [3,2,3]
输出: 3
示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/majority-element
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
执行用时 : 24 ms, 在所有 C 提交中击败了 79.67%的用户
内存消耗 : 8.9 MB, 在所有 C 提交中击败了88.09%的用户
int getMaxNum(int *nums,int begin,int end){
int geIdx = begin+1;
int ltIdx = end;
int isAllSame = 1;
int changeInx = 0;
for (int i=begin+1; i<=end; i++) {
if (nums[i] != nums[begin]) {
changeInx = i;
isAllSame = 0;
break;
}
}
if (isAllSame) {
return nums[begin];
}
int change = nums[changeInx];
nums[changeInx] = nums[begin];
nums[begin] = change;
int temp = nums[begin];
while (geIdx < ltIdx) {
while (nums[geIdx]>=temp && geIdx <ltIdx) {
geIdx ++;
}
while (nums[ltIdx] < temp && geIdx < ltIdx) {
ltIdx --;
}
if (geIdx < ltIdx) {
int change = nums[ltIdx];
nums[ltIdx] = nums[geIdx];
nums[geIdx] = change;
geIdx ++;
ltIdx --;
}
}
if (nums[geIdx] < temp) {
geIdx --;
}
if (geIdx - begin +1 >= end - geIdx) {
return getMaxNum(nums, begin, geIdx);
}else {
return getMaxNum(nums, geIdx +1, end);
}
return -1;
}
int majorityElement(int* nums, int numsSize){
return getMaxNum(nums,0,numsSize-1);
}
还看到最早提交的记录版本, 现在看起来就很垃圾了.啊哈哈
9 个月前通过 324 ms 19.3 MB Swift
class Solution {
func majorityElement(_ nums: [Int]) -> Int {
var mutNums = nums
mutNums.sort()
var count = 0
var number = mutNums[0]
var record = (number,0)
for i in 0..<mutNums.count{
if mutNums[i] == number {
count += 1
}else{
if count > record.1{
record = (number,count)
}
count = 1
number = mutNums[i]
}
}
if count > record.1{
record = (number,count)
}
return record.0
}
}
网友评论