每日一题12

问题描述:n个数里出现次数大于等于n/2的数

解题思路:关键方法:

str.split(" "):按照空格切分字符串

Integer.valueOf(str):将数字字符串转为int

代码示例:

import java.util.*;
public class Main {
public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    while (in.hasNext()) {
    String str = in.nextLine();
    String[] strs = str.split(" ");
    int[] arr = new int[strs.length];
    for (int i = 0; i < arr.length; i++) {
        arr[i] = Integer.valueOf(strs[i]);
     }
    int num = arr[0];
    int count = 0;
    for(int j=1;j<arr.length;j++){
        if(arr[j]==num){
        count++;
     } else if (count > 0) {
        count--;
     } else {
        num = arr[j];
         }
     }
        System.out.println(num);
     }
     }
}

思路二:使用哈希Map存储数字出现的次数

private static void halfTime(int[] array){
        HashMap<Integer,Integer> map=new HashMap<>();
        for(int i=0;i<array.length;i++){
            int m= map.getOrDefault(array[i],0);
            map.put(array[i],m+1);
        }
        for(int key:map.keySet()){
            if(map.get(key)>=array.length/2){
                System.out.println(key);
                return ;
            }
        }
    }
    public static void main(String[] args) {
       Scanner sc=new Scanner(System.in);
           String x=sc.nextLine();
           String[] c=x.split(" ");
           int[] s=new int[c.length];
           for(int j=0;j<c.length;j++){
               s[j]=c[j].charAt(0)-'0';
           }
           halfTime(s);
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值