Skip to content

229. Majority Element II #10

Open
Open
@soonlive

Description

@soonlive

229. Majority Element II

image

参考:
Boyer–Moore majority vote algorithm
http://www.cs.utexas.edu/~moore/best-ideas/mjrty/example.html

  /**
   * @param {number[]} nums
   * @return {number[]}
   */
  var majorityElement = function (nums) {
    var count1 = 0;
    var count2 = 0;
    var candidate1, candidate2;
    var result = [];

    for (var i = 0; i < nums.length; i++) {
      var num = nums[i];
      if (num === candidate1) {
        ++count1;
      } else if (num === candidate2) {
        ++count2;
      } else if (count1 === 0) {
        candidate1 = nums[i];
        ++count1;
      } else if (count2 === 0) {
        candidate2 = nums[i];
        ++count2;
      } else {
        --count1;
        --count2;
      }
    }

    count1 = 0;
    count2 = 0;

    nums.forEach(function (num) {
      if (candidate1 === num) {
        ++count1;
      }
      if (candidate2 === num) {
        ++count2;
      }
    });

    if (count1 > (nums.length / 3)) {
      result.push(candidate1);
    }

    if (count2 > (nums.length / 3)) {
      result.push(candidate2);
    }

    return result;
  };

image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions