58同城笔试(2021/10/23)

58同城笔试(2021/10/23)

# 第一道
题目大意:输入“AAABBCCCDD”,输出A3B2C3D2;输入ABCDEF,输出ABCDEF

```java
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //采用行输入,将输入回车符之前的一行数据赋值给str
        String str = sc.nextLine();
		//都是优先转换为字符数组
        char[] chars = str.toCharArray();
        //System.out.println(chars);
        int len = chars.length;
        //用HashMap存储
        //如果字符不存在,则put进map,并将value设置为1;如果字符存在,则put进map,将值覆盖为map.get(chars[i])+1;
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i <len ; i++) {
            if(!map.containsKey(chars[i])){
                map.put(chars[i],1);
            }else{
                map.put(chars[i],map.get(chars[i])+1);
            }
        }

        //需要将数取出来然后拼接字符串输出
        //遍历map采用entrySet方法加上foreach
        //加上""是为了防止字符转化为ASCII码的数字
            map.entrySet().forEach(entry -> {
                System.out.print(entry.getKey()+ "" + (entry.getValue() == 1 ? "" : entry.getValue()));
            });
    }
}

# 第二道
题目大意:类似于股票买卖最高利润(1次买卖),但不知道为啥只通过了20%
import java.util.Scanner;

public class test002 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();

        char[] chars = str.toCharArray();
        int len = chars.length;
        int[] arr = new int[len];
        for (int i = 0; i <len ; i++) {
            arr[i] = chars[i]- '0';
        }

        //相当于隔天买卖最大值问题,即股票最大利润问题
        int min = Integer.MAX_VALUE;
        int max = 0;

        for (int i = 0; i <len ; i++) {
            if(arr[i] < min){
                min = arr[i];
            }else if(arr[i] - min > max){
                max = arr[i] - min;
            }
        }

        System.out.println(max);
    }
}


# 第三道
题目大意:一个数组,输出出现指定次数的对应数字。当数字出现次数相同时,输出数字最大的。
例如:输入 arr[1,1,2,2,3],2;输出2;输入arr=[1,3,6,6,6,2,2,2,2],3;输出6import java.util.*;

public class test003 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int times = sc.nextInt();
        Scanner sca = new Scanner(System.in);
        String str = sca.nextLine();

        char[] chars = str.toCharArray();
        int len = chars.length;
        int[] arr = new int[len];
        for (int i = 0; i <len ; i++) {
            arr[i] = chars[i]- '0';
        }
        Arrays.sort(arr);

        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i <len ; i++) {
            if(!map.containsKey(arr[i])){
                map.put(arr[i],1);
            }else{
                map.put(arr[i], map.get(arr[i])+1);
            }
        }

        List<Integer> list = new ArrayList<>();
        map.entrySet().forEach(entry -> {
            if(entry.getValue() == times){
                list.add(entry.getKey());
            }
        });

        int[] ans = new int[list.size()];
        for (int i = 0; i <list.size() ; i++) {
            ans[i] = list.get(i);
        }
        Arrays.sort(ans);
        System.out.println(ans[list.size()-1]);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值