数组元素过半问题

原创 2016年05月31日 21:44:34

现在有一个整数数组,已知一个数出现的次数超过了一半,请用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;
}


版权声明:如有不同见解、欢迎批评和指正

PAT-B 1008. 数组元素循环右移问题

题目内容: 一个数组AA中存有 n>0n>0 个整数,在不允许使用另外数组的前提下,将每个整数循环向右移 m≥0m\ge0 个位置,即将A中的数据由(A0A1……An−1)(A_0 A_...

1008. 数组元素循环右移问题 (20)

 1008. 数组元素循环右移问题 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B ...

1008 数组元素循环右移问题

// ---------------------------------------1008------------------------------------------- // 一个数组A中存...

PAT BASIC PRACTICE: 1008. 数组元素循环右移问题 (20)

1008. 数组元素循环右移问题 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B ...
  • leayc
  • leayc
  • 2015年04月09日 19:08
  • 452

数组元素循环右移问题

一、 实验目的   (1)熟练使用循环语句。   (2)熟练理解和掌握顺序存储与数据处理算法的关系。 二、 实验内容 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整...

数组元素组合问题分析

//从数组中抽出N个元素程序的分析过程. public class Test{ public static void main(String[] args){ //首先先定义一个数组strs,...

1008 数组元素循环右移问题 (20)

这个题目被我想复杂了,其实本身只是一个数组打印的题目,第一次和第二次均为思路错误导致,第三次,没有注意到N与M之间的关系问题,第四次没有注意到M=0的情况,仍然是通过特殊值的方法发现了错误。以后一定要...
  • Yauchee
  • Yauchee
  • 2016年06月28日 15:55
  • 237

数组元素循环左/右移问题

回顾以前写的算法,看到一个问题----循环左/右移动问题。

1008. 数组元素循环右移问题

一、题目一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1……AN-1)变换为(AN-M …… AN-1 A0 A...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数组元素过半问题
举报原因:
原因补充:

(最多只允许输入30个字)