日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Leetcode--229. 求众数Ⅱ

發布時間:2024/7/19 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode--229. 求众数Ⅱ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

給定一個大小為?n?的數組,找出其中所有出現超過?? n/3 ??次的元素。

說明: 要求算法的時間復雜度為 O(n),空間復雜度為 O(1)。

示例?1:

輸入: [3,2,3]
輸出: [3]
示例 2:

輸入: [1,1,1,3,3,2,2,2]
輸出: [1,2]

思路:

摩爾投票法

超過n/3,那可能的眾數個數為0,1,2

先假設兩個值為眾數,開始遍歷數組

如果發現與假設的數字相同的數,則數量加一,否則數量減一

如果數量減到0,則更換為0的數為當前的數字。

原理:

相同總數加一,不同總數減一,這么相互抵消下去,剩下的最終a,b所代表的數字一定是最多的

提交的代碼:

class?Solution?{

????public?List<Integer>?majorityElement(int[]?nums)?{

?????????List<Integer>?list?=?new?ArrayList<>();

?????????if(nums.length==0)

?????????{

????????????return?list;

?????????}

?????????int?a=nums[0],b=nums[0];

?????????int?count1=0,count2=0;

?????????for(int?i=0;i<nums.length;i++)

?????????{

????????????if(nums[i]==a)

????????????{

????????????????count1++;

????????????????continue;

????????????}

????????????else?if(nums[i]==b)

????????????{

????????????????count2++;

????????????????continue;

????????????}

????????????else{

????????????????if(count1==0)

????????????????{

????????????????????a?=?nums[i];

????????????????????count1=1;

????????????????????continue;

????????????????}

????????????????else?if(count2==0)

????????????????{

????????????????????b?=?nums[i];

????????????????????count2=1;

????????????????????continue;

????????????????}

????????????????else{

????????????????????count1--;

????????????????????count2--;

????????????????}

????????????}

?????????}

?????????count1=0;

?????????count2=0;

?????????for(int?i=0;i<nums.length;i++)

?????????{

????????????if(nums[i]==a)

????????????{

????????????????count1++;

????????????}

????????????else?if(nums[i]==b)

????????????{

????????????????count2++;

????????????}

?????????}

?????????if(count1>nums.length/3)

?????????{

????????????list.add(a);

?????????}

?????????if(a!=b&&count2>nums.length/3)

?????????{

????????????list.add(b);

?????????}

?????????return?list;

????}

}

總結

以上是生活随笔為你收集整理的Leetcode--229. 求众数Ⅱ的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。