美文网首页
算法挑战100天 - three (easy)

算法挑战100天 - three (easy)

作者: holmes000 | 来源:发表于2020-08-27 15:24 被阅读0次

    类别:数组

    题目:https://leetcode-cn.com/problems/find-majority-element-lcci/

    我的解:时间 O(n) 空间O(n)

    class Solution {
         public int majorityElement(int[] nums) {
            Map<Integer, Integer> map = new HashMap<>();
            Integer midSize = nums.length / 2;
            for (int i = 0; i < nums.length; i++) {
                if (map.get(nums[i]) != null) {
                    map.put(nums[i], map.get(nums[i]) + 1);
                } else {
                    map.put(nums[i], 1);
                }
            }
            Integer result = -1;
            for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
                if (entry.getValue() > midSize) {
                    result = entry.getKey();
                }
            }
            return result;
        }
    }
    

    最优解:时间 O(n) 空间O(1)

    class Solution {
        public int majorityElement(int[] nums) {
            // 摩尔投票算法(过半才能算出)
            int temp = nums[0];
            int count = 1;
            for (int i = 1; i < nums.length; i++) {
                if (nums[i] == temp) {
                    count++;
                } else {
                    count--;
                }
                if (count == 0) {
                    temp = nums[i];
                    count = 1;
                }
            }
    
            // 验证是否满足要求
            int t = nums.length / 2 + 1;
            count = 0;
            for (int num : nums) {
                if (num == temp) count++;
                if (count == t) return temp;
            }
            return -1;
        }
    }
    

    差异点:

    1.我的是利用map存储所有的元素出现次数来比较;最后再根据长度比较;思路不同;
    2.没了解过摩尔算法,没往数据特性上想;摩尔算法可以让空间复杂降为O(n);

    相关文章

      网友评论

          本文标题:算法挑战100天 - three (easy)

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