zoukankan      html  css  js  c++  java
  • 数组中出现次数超过一半的数

    题目描述

    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

    类似于桶排序的思路:

    弊端:数组中的值不能过大,否则必须开辟很大的空间(或者得构造函数去进行离散处理)

    Java代码如下:

    public class Solution {
        public int MoreThanHalfNum_Solution(int [] b) {
        int a[]=new int [100];
        for(int i=0;i<b.length;i++){
            a[b[i]]++;
        }
          for(int i=0;i<100;i++){
              if(a[i]>b.length/2){
                  return i;
              }
          }return 0;
        }
    }

    Java代码如下:

    class Solution {
        public int majorityElement(int[] nums) {
         Arrays.sort(nums);
         return nums[nums.length/2];
        }
    }

    用HashMap

    class Solution {
        public int majorityElement(int[] nums) {
            HashMap<Integer,Integer> map = new HashMap<>();
    
            for(int num:nums){
                map.put(num,map.getOrDefault(num,0)+1);
    
                if(map.get(num)>(nums.length/2)){
                    return num;
                }
            }
    
            return -1;
    
        }
    }
    不一样的烟火
  • 相关阅读:
    Android比较实用的属性
    软件版本命名规则
    Dhroid框架笔记(DhNet、Adapter)
    Activity对话框
    Dhroid框架笔记(IOC、EventBus)
    Eclipse快捷键
    解析Excel_Jxl
    面试题
    java基础——值传递和应用传递
    java基础——子类继承父类程序执行顺序
  • 原文地址:https://www.cnblogs.com/cstdio1/p/11237200.html
Copyright © 2011-2022 走看看