您好,登錄后才能下訂單哦!
這篇文章主要介紹“java怎么找到數組中的多數元素”,在日常操作中,相信很多人在java怎么找到數組中的多數元素問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”java怎么找到數組中的多數元素”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
問題:給定一個大小為 n 的數組,找到其中的多數元素。多數元素是指在數組中出現次數大于 ? n/2 ? 的元素。你可以假設數組是非空的,并且給定的數組總是存在多數元素。比如:數組 [3,2,3] 的多數元素是 3 ,數組 [2,2,1,1,1,2,2] 的多數元素是 2 。
既然多數元素在數組中出現的次數大于 ? n/2 ? ,給這個數組排個序,然后取中間的值,得到的肯定就是多數元素,要不然不符合題意。
這樣的話,兩行代碼就可以搞定:
java Arrays.sort(nums); return nums[nums.length >> 1];
但是時間復雜度是 O(nlogn) ,空間復雜度是 O(logn) 。
咱們平時都是怎么投票的呢?大家每個人都選一個人寫在紙條上,然后開始拆開紙團瞅瞅選的是誰。剛開始默認大家都是 0 票,然后紙條上投的是誰,這個人就多一票,最后看誰的票數比較多。回到咱們這個題目,既然是眾數,而且出現的次數大于 ? n/2 ? ,那我們可以假設一個數就是要求的眾數,同時設置這個數字出現的次數為 0 ,然后和接下來的數字進行比較。如果一樣呢,咱們把這個數字出現的次數加上 1 ,如果不一樣,就讓次數減 1 ,當這個值減到 0 時,說明剛開始假設的數字不是眾數,那就換當前的這個數字,繼續循環。這樣最后這個數字出現的次數一定是大于等于 0 的,要不然就不符合 出現的次數大于 ? n/2 ?
這個題意了,最后的最后,將真正的眾數返回即可。
java // 設置初始票數為 0 int count = 0 ; // 先將要求的眾數定義為空 Integer majorityElement = null; // 循環數組 for(int num : nums){ // 當 count 為 0 時,假設當前的數為要求的眾數 if (count == 0){ majorityElement = num; } // 當 num 等于假設的眾數時, count 就加 1 count += ( num == majorityElement ) ? 1 : -1 ; } // 最后返回真正的眾數 return majorityElement;
到此,關于“java怎么找到數組中的多數元素”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。