• LeetCode 169. Majority Element


    原题链接在这里:https://leetcode.com/problems/majority-element/

    题目:

    Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.

    You may assume that the array is non-empty and the majority element always exist in the array.

    题解:

    Method 1:最容易想到的就是用HashMap 计数,数值大于n/2(注意不是大于等于而是大于),就是返回值。Time Complexity: O(n). Space: O(n).

    Method 2: 用sort, 返回sort后array的中值即可. Time Complexity: O(n*logn). Space: O(1).

    Method 3: 维护个最常出现值,遇到相同count++, 遇到不同count--, count为0时直接更改最常出现值为nums[i]. Time Complexity: O(n). Space: O(1).

    AC Java:

     1 public class Solution {
     2     public int majorityElement(int[] nums) {
     3         /*
     4         //Method 1, HashMap
     5         HashMap<Integer, Integer> map = new HashMap<>();
     6         for(int i = 0;i<nums.length; i++){
     7             if(!map.containsKey(nums[i])){
     8                 map.put(nums[i],1);
     9             }else{
    10                 map.put(nums[i],map.get(nums[i])+1);
    11             }
    12         }
    13         
    14         Iterator<Integer> it = map.keySet().iterator(); //Iterate HashMap
    15         while(it.hasNext()){
    16             int keyVal = it.next();
    17             //There is an error here: Pay attentation, it is ">", but not ">="
    18             //If we have three variables [3,2,3], ">=" will also return 2, 1>=3/2
    19             if(map.get(keyVal) > nums.length/2){
    20                 return keyVal;
    21             }
    22         }
    23         
    24         return Integer.MIN_VALUE;
    25         */
    26         
    27         /*Method 2, shortcut
    28         Arrays.sort(nums);
    29         return nums[nums.length/2];
    30         */
    31         
    32         //Method 3
    33         if(nums == null || nums.length == 0)
    34             return Integer.MAX_VALUE;
    35         int res = nums[0];
    36         int count = 1;
    37         for(int i = 1; i< nums.length; i++){
    38             if(res == nums[i]){
    39                 count++;
    40             }else if(count == 0){
    41                 res = nums[i];
    42                 count = 1;
    43             }else{
    44                 count--;
    45             }
    46         }
    47         return res;
    48         
    49     }
    50 }

    跟上Majority Element II.

    类似Check If a Number Is Majority Element in a Sorted Array.

  • 相关阅读:
    课件的引子
    用nc做网络压力测试
    分布式计算学习笔记
    静态库 .a 转成共享库 .so
    nmon用法
    eclipse debug URLClassPath.getLoader(int) file
    sodu 命令场景分析
    俩孩随笔
    深度学习丨深度学习中GPU和显存分析
    语义分割丨DeepLab系列总结「v1、v2、v3、v3+」
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/4825024.html
Copyright © 2020-2023  润新知