169. 多数元素

素颜马尾好姑娘i 2023-07-13 15:26 69阅读 0赞

题目:

169. 多数元素
面试题39. 数组中出现次数超过一半的数字
在这里插入图片描述

题解:

1. 最原始的思路:

先排序,然后遍历整个数组,对记录每个数值出现的次数进行统计即可。

2. 排序法:

在这里插入图片描述
在这里插入图片描述

3. 摩尔投票法:(首选)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码:

1. 最原始的思路:

  1. /** * code169 */
  2. import java.util.*;
  3. public class code169 {
  4. public static int majorityElement(int[] nums) {
  5. if (nums.length == 1) {
  6. return nums[0];
  7. }
  8. Arrays.sort(nums);
  9. int count = 1;
  10. int res = -1;
  11. for (int i = 0; i < nums.length - 1; i++) {
  12. if (nums[i] == nums[i + 1]) {
  13. count++;
  14. } else {
  15. count = 1;
  16. }
  17. if (count > (nums.length - 1) / 2) {
  18. res = nums[i];
  19. }
  20. }
  21. return res;
  22. }
  23. public static void main(String[] args) {
  24. int nums1[] = { 3, 2, 3 };
  25. int nums2[] = { 2, 2, 1, 1, 1, 2, 2 };
  26. int ans1 = majorityElement(nums1);
  27. int ans2 = majorityElement(nums2);
  28. System.out.println(ans1 + " " + ans2);
  29. }
  30. }

2. 排序法:

  1. /** * code169 */
  2. import java.util.*;
  3. public class code169 {
  4. public static int majorityElement(int[] nums) {
  5. Arrays.sort(nums);
  6. return nums[nums.length / 2];
  7. }
  8. public static void main(String[] args) {
  9. int nums1[] = { 3, 2, 3 };
  10. int nums2[] = { 2, 2, 1, 1, 1, 2, 2 };
  11. int ans1 = majorityElement(nums1);
  12. int ans2 = majorityElement(nums2);
  13. System.out.println(ans1 + " " + ans2);
  14. }
  15. }

3. 摩尔投票法:(首选)

  1. /** * code169 */
  2. import java.util.*;
  3. public class code169 {
  4. // 摩尔投票法:
  5. public static int majorityElement(int[] nums) {
  6. int candidate = nums[0];
  7. int count = 1;
  8. for (int i = 1; i < nums.length; i++) {
  9. if (candidate == nums[i]) {
  10. count++;
  11. } else {
  12. count--;
  13. }
  14. if (count == 0) {
  15. candidate = nums[i];
  16. count = 1;
  17. }
  18. }
  19. return candidate;
  20. }
  21. public static void main(String[] args) {
  22. int nums1[] = { 3, 2, 3 };
  23. int nums2[] = { 2, 2, 1, 1, 1, 2, 2 };
  24. int ans1 = majorityElement(nums1);
  25. int ans2 = majorityElement(nums2);
  26. System.out.println(ans1 + " " + ans2);
  27. }
  28. }

参考:

  1. 多数元素
  2. Java-3种方法(计数法/排序法/摩尔投票法)
  3. 独乐乐不如众乐乐,如何装逼的求众数!
  4. 面试题39. 数组中出现次数超过一半的数字(摩尔投票法,清晰图解)
  5. java中向上向下及四舍五入取整的方法,double型强制转换成int型的取整方法?
  6. 如何理解摩尔投票算法?

发表评论

表情:
评论列表 (有 0 条评论,69人围观)

还没有评论,来说两句吧...

相关阅读

    相关 leetcode169. 多数元素

    题目描述: 给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元

    相关 169. 多数元素

    给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例