• 【强训22】编程题——找出字符串中第一个只出现一次的字符&小易的升级之路


    找出字符串中第一个只出现一次的字符_牛客题霸_牛客网

    要找出第一次,只出现一次的字符

    思路:我们先去找出只出现一次的所有字符,然后再想办法找出第一个出现的字符

    我们要统计每个字符出现的次数对吧?那我们就要对应的使用 Map 来统计次数,我们用 HashMap

    我们搞一个Map来统计,遍历字符串,如果发现Map不存在这个字符,就是第一次出现,如果遍历的字符,出现大于1,就把它当前的次数记录下来,然后再加上1(次数)

    遍历完整个字符串后就已经统计好了所有字符的出现的次数~
    接着就要找第一次出现的数量为1的字符

    这就要再继续遍历整个字符串,每遍历一个字符,看这个字符在Map的value值,如果第一次遍历到value值是1的字符就直接打印出来,就不用再往下遍历了,此时打印的这个字符是满足条件的~

    1. import java.util.Scanner;
    2. import java.util.HashMap;
    3. import java.util.Map;
    4. // 注意类名必须为 Main, 不要有任何 package xxx 信息
    5. public class Main {
    6. public static void main(String[] args) {
    7. Scanner in = new Scanner(System.in);
    8. String str = in.nextLine();
    9. Map map = new HashMap<>();
    10. for(int i = 0; i < str.length(); i++){
    11. if(map.get(str.charAt(i)) == null){
    12. map.put(str.charAt(i), 1);
    13. }else{
    14. int value = map.get(str.charAt(i));
    15. map.put(str.charAt(i), value + 1);
    16. }
    17. }
    18. for(int i = 0; i < str.length(); i++){
    19. if(map.get(str.charAt(i)) == 1){
    20. System.out.println(str.charAt(i));
    21. return;
    22. }
    23. }
    24. System.out.println(-1);
    25. }
    26. }

    小易的升级之路_牛客题霸_牛客网

     这题的关键就是要求出两个整数的最大公约数~

    它说小易有一个初始能力值,然后有n个怪物,每打一个怪物就会在a的基础上给小易添加经验,

    小易的能力大于怪物防御力,可以轻松打死怪物,获取的经验是 怪物的 防御力 bi

    如果小易的能力此时小于等于怪物防御力,打死怪物得到的经验是  此时小易的能力 和 这个怪物防御力 bi 的最大公约数

    所以我们要写一个求两个数最大公约数的方法

    注意:多组输入(while)

    求两个整数的最大公约数请跳转到上一篇博客~

    1. import java.util.*;
    2. public class Main {
    3. public static void main(String[] args){
    4. Scanner in = new Scanner(System.in);
    5. while(in.hasNextInt()){
    6. int n = in.nextInt();
    7. int a = in.nextInt();
    8. int[] arr = new int[n];
    9. for(int i = 0; i < n; i++){
    10. arr[i] = in.nextInt();
    11. }
    12. for(int i = 0; i < n; i++){
    13. if(a > arr[i]){
    14. a += arr[i];
    15. }else if(a <= arr[i]){
    16. a += gcd(a,arr[i]);
    17. }
    18. }
    19. System.out.println(a);
    20. }
    21. }
    22. //辗转相除法求约数
    23. public static int gcd(int m, int n){
    24. if(m < n){
    25. int tmp = m;
    26. m = n;
    27. n = tmp;
    28. }
    29. while(n != 0){
    30. int ret = m % n;
    31. m = n;
    32. n = ret;
    33. }
    34. return m;
    35. }
    36. }
  • 相关阅读:
    centos7设置开机启动
    matlab洗碗机节水模型的优化设计-这是个课题名称,不是买洗碗机,审核的人仔细看下,谢谢
    全局后置路由守卫(afterEach)
    linux安装jdk1.8
    python毕业设计作品基于django框架 疫苗预约系统毕设成品(7)中期检查报告
    分布式互斥
    【缺陷检测】基于matlab GUI印刷电路板自动缺陷检测【含Matlab源码 1912期】
    回忆三年浮沉
    [RK-Linux] recovery分区详解(一)
    开源日报 0829 | 改变面试方式:拒绝死板问题,推崇真实情境
  • 原文地址:https://blog.csdn.net/qq_61862008/article/details/127794454