• 摩尔投票解决多数元素问题


    今天在做算法题的时候学习到了一种新的解题方法--摩尔投票法

    原题是leetcode上的多数元素问题;

    "给定一个大小为 的数组,找到其中的多数元素.多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素"

    解题思路是这样的,暂时选定第一个元素为候选人,给一个初始票数为1,遍历数组每当遇到与候选人相同的数,票数则加一,如果不相同则减一.如果等于0则更换下一个候选人,初始票数为1

    遍历完成之后剩下的那个候选人就是这个数组里面的多数元素,因为题目里面规定了多数元素在数组中出现的次数一定是大于n/2的,所有最后候选人的票数一定是大于等于1的(如果数组中存在多数元素);

     1 class Solution {
     2     public int majorityElement(int[] nums) {
     3         int count = 1;
     4         int candidate = nums[0];
     5         for (int i = 1; i < nums.length; i++){
     6             if (nums[i] == candidate) {
     7                 count++;
     8             } else if (--count == 0) {
     9                 candidate = nums[i];
    10                 count = 1;
    11             }
    12         }
    13         return candidate;
    14     }
    15 }
  • 相关阅读:
    用户场景描述
    个人工作总结(第一阶段)
    个人进度报告
    《构建之法》阅读笔记05
    《构建之法》阅读笔记04
    《构建之法》阅读笔记03
    2020寒假学习(14)
    2020寒假学习(13)
    2020寒假学习(12)
    2020寒假学习(11)
  • 原文地址:https://www.cnblogs.com/lkylin/p/14241841.html
Copyright © 2020-2023  润新知