zoukankan      html  css  js  c++  java
  • 算法笔记_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

  • 相关阅读:
    mysql热备脚本
    linux系统编程-进程
    15-模块
    14-面向对象3
    13-面向对象2
    12-面向对象1
    02-对比两个文件的差异
    11-面向对象基础
    08-不定长函数
    07-缺省参数
  • 原文地址:https://www.cnblogs.com/liuzhen1995/p/6719695.html
Copyright © 2011-2022 走看看