解法一(排序之后直接找):
var majorityElement = function(nums) {
nums.sort((a, b) => a - b)
let maxnum = nums[0]
let top = Math.floor(nums.length/2)
for(let i = 0;i < nums.length; i++){
if(nums[i+top] == nums[i]){
maxnum = nums[i]
}
}
return maxnum
}
执行用时:60 ms
内存消耗:43.4 MB
主要思路是
先排序,然后判断当前数组的下标加上【(num.length/2)向下取整】之后所在的数组元素和当前元素是否一致
原本想用indexof,一个从前找,一个往后找,然后判断两者的下标相减是否是大于数组长度的一半,但是indexof(nums[i],-1) 只是从最后一个向右查找,无论从哪里开始都是从左向右查找,所以不可以。
-----------------------------------------------------------------------------------------------------
解法二(摩尔投票法):
var majorityElement = function(nums) {
let maxnum = nums[0]
let sum = 1
for(let i = 1; i < nums.length ; i++) {
if(sum != 0 ){
if(maxnum == nums[i]){
sum ++
}else {
sum --
}
}else{
if(maxnum == nums[i]){
sum ++
}else {
maxnum = nums[i]
}
}
}
return maxnum
}
执行用时:76 ms
内存消耗:42 MB