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


    【题目】数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
    * 例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。
    * 由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
    * 【思路】首先取第一个数,之后的数与其比较。相同次数+1;不同次数-1.次数=0的时候将第一个数改为次数保存并将次数设置为1.
    * 这里要考虑到如果出现次数最多的数字没有达到一半的话,就返回0;

     1 package com.exe11.offer;
     2 
     3 /**
     4  * 【题目】数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
     5  *           例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。
     6  *           由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
     7  * 【思路】首先取第一个数,之后的数与其比较。相同次数+1;不同次数-1.次数=0的时候将第一个数改为次数保存并将次数设置为1.
     8  *                这里要考虑到如果出现次数最多的数字没有达到一半的话,就返回0;
     9  * @author WGS
    10  *
    11  */
    12 public class MoreThanHalfNumber {
    13     
    14     boolean isValid=true;//全局变量用来表示次数没有一半情况
    15     
    16     public int getMoreThanHalfNumber(int[] nums){
    17         
    18         if(nums==null || nums.length<=0) return 0;
    19         int index=0;
    20         int times=0;
    21         int target=nums[index];
    22         
    23         while(index<nums.length){
    24             if(times==0){
    25                 target=nums[index];
    26                 times=1;
    27             }else if(nums[index]==target){
    28                 times++;
    29             }else{//nums[index]!=target
    30                 times--;
    31             }
    32             index++;
    33         }
    34         //如果出现次数最多的数字没有达到数组长度一半的话,就返回0;
    35         int times2=0;
    36         for(int i=0;i<nums.length;i++){
    37             if(nums[i]==target){
    38                 times2++;
    39             }            
    40         }
    41         if(2*times2<=nums.length){
    42             isValid=false;
    43             return 0;
    44         }
    45         
    46         System.out.println(isValid);
    47         return target;
    48                 
    49     }
    50     
    51     public static void main(String[] args) {
    52         MoreThanHalfNumber m=new MoreThanHalfNumber();
    53         int[] nums=new int[]{1,2,3,2,5,4,2};
    54         int n=m.getMoreThanHalfNumber(nums);
    55         System.out.println(n);
    56     }
    57 }
  • 相关阅读:
    简单了解enum
    PowerDesigner CDM 生成PDM时,外键的命名规则
    HADOOP docker(五):hadoop用户代理 Proxy user
    记一次云安全的安全事件应急响应
    docker学习笔记--重基础使用
    Elasticsearch学习随笔(二)-- Index 和 Doc 查询新建API总结
    Elasticsearch学习随笔(一)--原理理解与5.0核心插件部署过程
    ntopng-一款流量审计框架的安装以及应用
    Suricata规则编写——常用关键字
    浅谈运维中的安全问题-FTP篇
  • 原文地址:https://www.cnblogs.com/noaman/p/5632683.html
Copyright © 2020-2023  润新知