diff --git a/lcci/17.10.Find Majority Element/README.md b/lcci/17.10.Find Majority Element/README.md index ad1805f1708ba..8f7464c2fea1c 100644 --- a/lcci/17.10.Find Majority Element/README.md +++ b/lcci/17.10.Find Majority Element/README.md @@ -35,6 +35,8 @@ +摩尔投票法 + ### **Python3** @@ -53,6 +55,31 @@ ``` +### **JavaScript** + +```js +/** + * @param {number[]} nums + * @return {number} + */ +var majorityElement = function(nums) { + let candidate = 0, count = 0; + for (let num of nums) { + if (count == 0) candidate = num; + if (candidate == num) { + count++; + } else { + count--; + } + } + let n = 0; + for (let num of nums) { + if (candidate == num) n++; + } + return n > (nums.length / 2) ? candidate : -1; +}; +``` + ### **...** ``` diff --git a/lcci/17.10.Find Majority Element/README_EN.md b/lcci/17.10.Find Majority Element/README_EN.md index d5bcac1be8f67..724bc670dc26e 100644 --- a/lcci/17.10.Find Majority Element/README_EN.md +++ b/lcci/17.10.Find Majority Element/README_EN.md @@ -38,6 +38,8 @@ ## Solutions +Boyer–Moore majority vote algorithm + ### **Python3** @@ -52,6 +54,31 @@ ``` +### **JavaScript** + +```js +/** + * @param {number[]} nums + * @return {number} + */ +var majorityElement = function(nums) { + let candidate = 0, count = 0; + for (let num of nums) { + if (count == 0) candidate = num; + if (candidate == num) { + count++; + } else { + count--; + } + } + let n = 0; + for (let num of nums) { + if (candidate == num) n++; + } + return n > (nums.length / 2) ? candidate : -1; +}; +``` + ### **...** ``` diff --git a/lcci/17.10.Find Majority Element/Solution.js b/lcci/17.10.Find Majority Element/Solution.js new file mode 100644 index 0000000000000..0c6247c1dc9de --- /dev/null +++ b/lcci/17.10.Find Majority Element/Solution.js @@ -0,0 +1,20 @@ +/** + * @param {number[]} nums + * @return {number} + */ + var majorityElement = function(nums) { + let candidate = 0, count = 0; + for (let num of nums) { + if (count == 0) candidate = num; + if (candidate == num) { + count++; + } else { + count--; + } + } + let n = 0; + for (let num of nums) { + if (candidate == num) n++; + } + return n > (nums.length / 2) ? candidate : -1; +}; \ No newline at end of file