美文网首页
169. 多数元素 [leetcode]

169. 多数元素 [leetcode]

作者: 阵雨小朋友 | 来源:发表于2020-02-16 02:44 被阅读0次

    给定一个大小为 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
        }
    }
    

    相关文章

      网友评论

          本文标题:169. 多数元素 [leetcode]

          本文链接:https://www.haomeiwen.com/subject/plnufhtx.html