您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了如何使用java求眾數,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶大家一起來研究并學習一下“如何使用java求眾數”這篇文章吧。
給定一個大小為 n 的數組,找出其中所有出現超過 ? n/3 ?
次的元素。
說明: 要求算法的時間復雜度為 O(n),空間復雜度為 O(1)。
示例 1:
輸入: [3,2,3]
輸出: [3]
示例 2:
輸入: [1,1,1,3,3,2,2,2]
輸出: [1,2]
答案:
1public List<Integer> majorityElement(int[] nums) {
2 List<Integer> res = new ArrayList<>();
3 if (nums.length == 0)
4 return res;
5 int num1 = nums[0];
6 int num2 = nums[0];
7 int count1 = 1;
8 int count2 = 0;
9
10 for (int val : nums) {
11 if (val == num1)
12 count1++;
13 else if (val == num2)
14 count2++;
15 else if (count1 == 0) {
16 num1 = val;
17 count1++;
18 } else if (count2 == 0) {
19 num2 = val;
20 count2++;
21 } else {
22 count1--;
23 count2--;
24 }
25 }
26 count1 = 0;
27 count2 = 0;
28 for (int val : nums) {
29 if (val == num1)
30 count1++;
31 else if (val == num2)
32 count2++;
33 }
34 if (count1 > nums.length / 3)
35 res.add(num1);
36 if (count2 > nums.length / 3)
37 res.add(num2);
38 return res;
39}
解析:
最簡單的一種方式是通過HashMap存儲,key存儲數組的值,value計算出現的次數,這種寫法比較簡單就不在列出,我們來看上面這種寫法,超過1/3,說明最多也只有2個,我們先用兩個變量num1和num2來存儲。注意這里的關鍵點在第一個循環語句,也就是10到25行,其實也很好理解,我們還可以參照之前的146,求眾數的第一種解法,這里就不在詳細介紹。
Java中的集合主要分為四類:1、List列表:有序的,可重復的;2、Queue隊列:有序,可重復的;3、Set集合:不可重復;4、Map映射:無序,鍵唯一,值不唯一。
以上就是關于“如何使用java求眾數”的內容,如果該文章對您有所幫助并覺得寫得不錯,勞請分享給您的好友一起學習新知識,若想了解更多相關知識內容,請多多關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。