【剑指offer】面试题39:数组中出现次数超过一半的数字
发布日期:2021-04-30 21:01:22 浏览次数:106 分类:精选文章

本文共 1517 字,大约阅读时间需要 5 分钟。

public class Solution {    public int majorityElement(int[] nums) {        if (nums.length == 0) {            return 0;        }        int result = nums[0];        int count = 0;        for (int i = 0; i < nums.length; i++) {            if (count == 0 && i != 0) {                result = nums[i];            }            if (nums[i] == result) {                count++;            } else {                count--;            }            if (count > nums.length / 2) {                return result;            }        }        return result;    }}

多数元素的寻找方法

在这个问题中,我们需要找到一个数字,它在数组中出现次数超过了数组长度的一半。这个问题可以通过遍历数组并统计每个数字的出现次数来解决。以下是详细的解决方案:

方法思路

我们可以通过以下步骤来解决这个问题:

  • 初始化变量:将结果初始化为数组的第一个元素,并将计数器初始化为0。
  • 遍历数组:对于数组中的每一个元素,检查它是否与当前结果相同。
    • 如果计数器为0且当前元素与结果不同,则更新结果为当前元素。
    • 如果当前元素与结果相同,则增加计数器;否则,减少计数器。
  • 提前返回:一旦计数器超过数组长度的一半,立即返回结果,因为这表示我们已经找到了多数元素。
  • 这种方法的时间复杂度是O(n),因为我们只需遍历数组一次。这使得该算法在处理较大数组时非常高效。

    代码解释

    public class Solution {    public int majorityElement(int[] nums) {        if (nums.length == 0) {            return 0;        }        int result = nums[0];        int count = 0;        for (int i = 0; i < nums.length; i++) {            if (count == 0 && i != 0) {                result = nums[i];            }            if (nums[i] == result) {                count++;            } else {                count--;            }            if (count > nums.length / 2) {                return result;            }        }        return result;    }}

    示例

    输入[1, 2, 3, 2, 2, 2, 5, 4, 2]输出2

    这个方法通过遍历数组并统计每个数字的出现次数,能够高效地找到出现次数超过一半的数字。

    上一篇:Java的加载与执行
    下一篇:ps制作磨皮效果

    发表评论

    最新留言

    路过,博主的博客真漂亮。。
    [***.116.15.85]2026年05月26日 06时15分08秒