数组元素过半问题

原创 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;
}


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

相关文章推荐

自测3. 数组元素循环右移问题

一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1……AN-1)变换为(AN-M …… AN-1 A0 A1……A...

1008 数组元素循环右移问题

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

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

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

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

一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0A1……AN-1)变换为(AN-M …… AN-1 A0 A1……AN...

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

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

数组元素循环右移问题

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

数组元素组合问题分析

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

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

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

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

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

重学java之随机/给定数组元素统计问题

import java.util.Arrays;import java.util.*;import java.lang.Integer;public class BinarySearchTest { ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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