这篇文章主要介绍“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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。