多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

LeetCode 169. Majority Element(摩尔投票法)

LeetCode 169. Majority Element(摩尔投票法) 169. Majority ElementEasyGiven an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.You may assume that the array is non-empty and the majority element always exist in the array.Example 1:Input: [3,2,3]Output: 3Example 2:Input: [2,2,1,1,1,2,2]Output: 2题意给定一个长度为n的数组求出现次数大于n/2的元素思路如果用HashMap可以实现时间复杂度O(n)空间复杂度O(n)的算法。进一步地使用摩尔投票法可以实现时间复杂度O(n)空间复杂度O(1)的算法。摩尔投票法使用两个变量cand和cnt分别存储当前有候选元素和候选元素已经出现的次数。遍历数组中的每个元素当cnt0时表示之前的各个候选元素都被否决了因此选取当前元素作为候选元素cnt0时如果当前元素与候选元素cand相等则cnt否则–cnt表示一个非候选元素与候选元素抵消。由于候选元素出现次数大于等于其他各个元素因此候选元素在cnt累加和抵消的过程中不会被其他元素取代最后返回cand就是要找的出现次数大于n/2的元素。代码classSolution{publicintmajorityElement(int[]nums){intcand0,cnt0;for(intnum:nums){if(cnt0){candnum;cnt1;}elseif(num!cand){--cnt;}else{cnt;}}returncand;}}
返回列表