算法学习之投票算法以及对应leetcode题目
生活随笔
收集整理的這篇文章主要介紹了
算法学习之投票算法以及对应leetcode题目
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
投票算法
? 投票算法是在數組中找出一個數,這個數出現的次數超過數組長度的一半。
原理
? 以數組{1,2,1,2,1}為例,首先我們設置一個tmp和cnt,tmp初值為數組第一位也就是1,cnt初值為1,然后我們遍歷數組,從第二位開始遍歷,如果相等那么cnt加一,這很好理解;那么如果不相等,cnt減一,相當于抵消掉,這怎么理解呢?很簡單,當一個數在數組中出現的次數超過數組的長度,根據我們抵消的思想,最后留下的tmp一定就是這個數,而他對應的cnt也大于0。然后回到之前,還要判斷cnt是否等于0,若是則更改tmp為當前遍歷到的數,cnt也初始化為1繼續遍歷。
? 這里就會有人會提出疑問,如果是{1,2,1,2,3}的情況下,上述的思想得到的答案就是不正確的。
? 是的,投票算法是默認這個數存在的前提下,于是在下方的leetcode題中我們要增加一個驗證環節,驗證這個數是否是出現次數超過length+1/2;
?
面試題 17.10. 主要元素
class Solution {public int majorityElement(int[] nums) {if(nums.length == 0)return -1;int cnt = 1;int tmp = nums[0];for(int i = 1; i < nums.length; i++){if(nums[i] == tmp) cnt++;else cnt--;if(cnt == 0){tmp = nums[i];cnt = 1;}}int length = (nums.length + 1)/ 2;int l = 0;for(int num:nums){if(num == tmp){l++;if(l == length) return tmp;}}return -1;} }?
總結
以上是生活随笔為你收集整理的算法学习之投票算法以及对应leetcode题目的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这届年轻人越来越爱养宠物了
- 下一篇: 服务器防火墙的作用是什么?如何设置?