关闭

数组元素过半问题

标签: 查找
133人阅读 评论(0) 收藏 举报
分类:

现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。

方法1Hash链表

方法2:使用两个变量AB,其中A存储某个数组中的数,B用来计数。开始时将B初始化为0 

遍历数组,

如果B=0,则令A等于当前数,令B等于1

如果当前数与A相同,则B=B+1

如果当前数与A不同,则令B=B-1

遍历结束时,A中的数就是要找的数。 

这个算法的时间复杂度是O(n),空间复杂度为O(1)

public int findNumber(int nums[]) {
    int count = 0;
    int k = nums[0];
    for (int i = 0; i < nums.length; i++) {
        if (count == 0) {
            count = 1;
            k = nums[i];
        } else if (k == nums[i]) {
            count += 1;
        } else if (k != nums[i]) {
            count -= 1;
        }
    }
    return k;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:47503次
    • 积分:2127
    • 等级:
    • 排名:第17968名
    • 原创:162篇
    • 转载:40篇
    • 译文:2篇
    • 评论:3条
    最新评论