算法笔记_131:出现次数超过一半的数(Java)

Posted 舞动的心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法笔记_131:出现次数超过一半的数(Java)相关的知识,希望对你有一定的参考价值。

目录

1 问题描述

2 解决方案

2.1 每次删除两个不同的数

2.2 记录两个值

 


1 问题描述

数组中有一个数出现的次数超过了数组长度的一半,请找出这个数。

 


2 解决方案

2.1 每次删除两个不同的数

具体代码如下:

 

package com.liuzhen.practice;

public class Main {
    
    public int getResult(int[] A) {
        //找到两个不相等的元素,将这两个元素变为0
        for(int start = 0, i = 1;i < A.length;i++) {
            while(A[start] == 0) {
                start++;
            }
            if(A[start] != A[i] && start < i) {
                A[start] = 0;
                A[i] = 0;
                start++;
            }
        }
        int result = 0;
        for(int i = 0;i < A.length;i++) {
            if(A[i] != 0) {
                result = A[i];
                break;
            }
        }
        return result;
    }
    
    public static void main(String[] args) {
        Main test = new Main();
        int[] A = {1,2,3,4,5,6,7,1,1,2,3,2,2,2,2,2};
        System.out.println(test.getResult(A));
    }
}

 

运行结果:

2

 

 

2.2 记录两个值

具体代码如下:

 

package com.liuzhen.practice;

public class Main1 {
    
    public int FindOneNumber(int[] A) {
        int result = A[0];
        int count = 1;
        for(int i = 1;i < A.length;i++) {
            if(count == 0) {
                result = A[i];
                count = 1;
            } else {
                if(A[i] == result)
                    count++;
                else
                    count--;
            }
        }
        return result;
    }
    
    public static void main(String[] args) {
        Main1 test = new Main1();
        int[] A = {1,2,3,4,5,6,7,1,1,2,3,2,2,2,2,2};
        System.out.println(test.FindOneNumber(A));
    }
}

 

运行结果:

2

 

 

 

 

参考资料:

   1.《编程之法面试和算法心得》  July

 

以上是关于算法笔记_131:出现次数超过一半的数(Java)的主要内容,如果未能解决你的问题,请参考以下文章

数组中出现次数超过一半的数

如何找出数组中出现次数超过长度一半的元素

数组中有一个数字出现次数超过数组长度一半,找出这个数字(用C语言解决)。要求时间复杂度尽量小。

Java 剑指offer(39) 数组中出现次数超过一半的数字

剑指offer系列54---数组中出现次数超过一半的数

c++题目:求出现次数超过一半的数