LeetCode?????????-Majority Element???Java?????????

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode?????????-Majority Element???Java?????????相关的知识,希望对你有一定的参考价值。

?????????return   oid   integer   64?????????   ??????   ????????????   nano   result   ??????   

?????????????????????181???????????????183?????????

01 ???????????????

??????????????????LeetCode????????????Easy????????????40?????????????????????169?????????????????????n?????????????????????????????????????????????n/2???????????????????????????????????????????????????????????????????????????????????????

?????????[3,2,3]
?????????3

?????????[2,2,1,1,1,2,2]
?????????2

????????????????????????????????????eclipse???jdk??????????????????1.8????????????win7 64??????????????????Java????????????????????????

02 ???????????????

?????????????????????????????????????????????for???????????????n-1??????????????????count??????????????????????????????

?????????i???????????????i+1????????????????????????i?????????????????????2?????????count??????????????????????????????1??????????????????count????????????n/2???????????????????????????i????????????

?????????i???????????????i+1???????????????????????????????????????i????????????0?????????i???????????????i-1???????????????????????????????????????count???1???????????????count????????????n/2???????????????????????????i??????????????????????????????count??????0???????????????????????????

??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????n/2???????????????????????????????????????????????????

public int majorityElement(int[] nums) {
    int size = nums.length / 2;
    int result = nums[nums.length - 1];
    Arrays.sort(nums);
    int count = 0;
    for (int i = 0; i < nums.length - 1; i++) {
        if (nums[i] == nums[i + 1]) {
            if (i == nums.length - 2) {
                count++;
            }
            count++;
            if (count > size) {
                return nums[i];
            }
        } else {
            if (i > 0 && nums[i] == nums[i - 1]) {
                count++;
                if (count > size) {
                    return nums[i];
                }
            } else {
                count = 0;
            }
        }
    }
    return result;
}

??????????????????????????????O(n log(n))+O(n)?????????????????????O(1)???

03 ???????????????

???????????????Arrays????????????????????????????????????????????????????????????????????????n/2?????????????????????????????????????????????????????????????????????????????????????????????nums[n/2]????????????????????????

????????????????????????????????????????????????????????????????????????4???????????????????????????nums[2]??????????????????????????????????????????????????????nums[1]???nums[0]??????????????????????????????????????????nums[0]??????nums[n/2 - 1]?????????

public int majorityElement2(int[] nums) {
    int len = nums.length;
    if(len == 1) return nums[0];
    Arrays.sort(nums);
    if (len%2 == 0 && nums[0] == nums[len/2 - 1]) {
        return nums[0];
    }
    return nums[len/2];
}

??????????????????????????????O(n log(n))?????????????????????O(1)???

04 ???????????????

??????????????????candidate???????????????????????????n/2??????????????????????????????count?????????????????????.

?????????????????????count????????????0?????????0??????????????????????????????candidate????????????????????????????????????candidate?????????????????????count???1????????????1?????????????????????????????????

?????????????????????????????????????????????????????????1??????????????????1???????????????count?????????0???????????????????????????????????????????????????????????????count??????0??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

public int majorityElement3(int[] nums) {
    int count = 0;
    int candidate = 0;
    for (int i = 0; i < nums.length; i++) {
        if (count == 0) {
            candidate = nums[i];
        }
        if (nums[i] == candidate) {
            count++;
        } else {
            count--;
        }
    }
    return candidate;
}

??????????????????????????????O(n)?????????????????????O(1)???

05 ???????????????

??????HashMap???key?????????????????????value??????????????????????????????????????????value?????????n/2????????????key????????????????????????????????????

public int majorityElement4(int[] nums) {
    Map<Integer, Integer> map = new HashMap<>();
    int freq = 0;
    for (int i = 0; i < nums.length; i++) {
        if (map.containsKey(nums[i])) {
            freq = map.get(nums[i]) + 1;
            map.put(nums[i], freq);
        } else {
            freq = 1;
            map.put(nums[i], 1);
        }
        if (freq > nums.length / 2)
            return nums[i];
    }
    return nums[nums.length-1];
}

??????????????????????????????O(n)?????????????????????O(n)???

06 ???????????????

?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

public static void main(String[] args) {
    Easy_169_MajorityElement instance = new Easy_169_MajorityElement();
    int[] arg = { 3, 2, 3, 1, 2, 3, 2, 3};
    long start = System.nanoTime();
    int result = instance.majorityElement(arg);
    long end = System.nanoTime();
    System.out.println("majorityElement---??????:" + Arrays.toString(arg) + " , ??????:" + result + " , ??????:" + ((end - start) / 1000) + "??????");
    int[] arg2 = { 3, 2, 3, 1, 2, 3, 2, 3};
    long start2 = System.nanoTime();
    int result2 = instance.majorityElement2(arg2);
    long end2 = System.nanoTime();
    System.out.println("majorityElement2---??????:" + Arrays.toString(arg2) + " , ??????:" + result2 + " , ??????:" + ((end2 - start2) / 1000) + "??????");
    int[] arg3 = { 3, 2, 3, 1, 2, 3, 2, 3};
    long start3 = System.nanoTime();
    int result3 = instance.majorityElement3(arg3);
    long end3 = System.nanoTime();
    System.out.println("majorityElement3---??????:" + Arrays.toString(arg3) + " , ??????:" + result3 + " , ??????:" + ((end3 - start3) / 1000) + "??????");
    int[] arg4 = { 3, 2, 3, 1, 2, 3, 2, 3};
    long start4 = System.nanoTime();
    int result4 = instance.majorityElement4(arg4);
    long end4 = System.nanoTime();
    System.out.println("majorityElement4---??????:" + Arrays.toString(arg4) + " , ??????:" + result4 + " , ??????:" + ((end4 - start4) / 1000) + "??????");
}

?????????????????????

majorityElement---??????:[1, 2, 2, 2, 3, 3, 3, 3] , ??????:3 , ??????:211??????
majorityElement2---??????:[1, 2, 2, 2, 3, 3, 3, 3] , ??????:3 , ??????:5??????
majorityElement3---??????:[3, 2, 3, 1, 2, 3, 2, 3] , ??????:2 , ??????:4??????
majorityElement4---??????:[3, 2, 3, 1, 2, 3, 2, 3] , ??????:3 , ??????:62??????


07 ??????

??????????????????????????????????????????????????????????????????40+????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????














以上是关于LeetCode?????????-Majority Element???Java?????????的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 352 & leetcode 239 & leetcode 295 & leetcode 53 & leetcode 209

如何做LeetCode

leetcode可以写在简历上吗

[Leetcode]leetcode1-10题随记

leetcode分类刷题(续2)

leetcode分类刷题