合并表记录、提取不重复的整数 题目

HJ8 合并表记录

描述

数据表记录包含表索引index和数值value(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照index值升序进行输出。

提示:

0 <= index <= 11111111

1 <= value <= 100000

输入描述:

先输入键值对的个数n(1 <= n <= 500)
接下来n行每行输入成对的index和value值,以空格隔开

输出描述:

输出合并后的键值对(多行)

示例:

输入:4
	 0 1
	 0 2
	 1 2
	 3 4
输出:0 3
	 1 2
	 3 4
输入:3
	 0 1
	 0 2
	 8 9
输出:0 3
	 8 9

 

分析:

​ 1.使用TreeMap集合来存储键值对。

​ 2.TreeMap集合可以key去重和key自然排序。

 

代码:

import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num=sc.nextInt();
        TreeMap<Integer,Integer> map=new TreeMap<>();
        int index,value;
        for (int i = 0; i < num; i++) {
            index=sc.nextInt();
            value=sc.nextInt();
            if(index<0&& i>11111111 ||value<1&&value>100000){
                System.out.println("输入非法!");
                return;
            }
            if(map.containsKey(index)){
                map.replace(index,map.get(index)+value);
            }else {
                map.put(index,value);
            }

        }

        Set<Map.Entry<Integer,Integer>> entrySet = map.entrySet();
        for (Map.Entry<Integer, Integer> entry : entrySet) {

            Integer key1 = entry.getKey();
            Integer value1 = entry.getValue();
            System.out.println(key1 + " " + value1);

        }
    }
}

 
 
 

大佬代码:

getOrDefault:通过Key获取对应的value,如果key不存在则返回默认值。

import java.io.*;
import java.util.*;
 
public class Main{
    public static void main(String[] args) throws Exception{
        Scanner sc = new Scanner(System.in);
        TreeMap<Integer, Integer> map = new TreeMap<>(); // 输出结果要求有序!
       while(sc.hasNextInt()){
            int n = sc.nextInt();
            for(int i = 0; i < n; ++i){
                int a = sc.nextInt();
                int b = sc.nextInt();
                map.put(a,map.getOrDefault(a,0) + b);
            }
       }
       for (Integer i : map.keySet()) {
           System.out.println(i + " " + map.get(i));
       }
    }
}

 
 
 

HJ9 提取不重复的整数

描述

输入一个 int 型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。

保证输入的整数最后一位不是 0 。

数据范围: 1≤𝑛≤108 1≤n≤108

输入描述:

输入一个int型整数

输出描述:

按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。

示例:

输入:9876673
输出:37689

 
 

分析:

​ 1.使用StringBuilder类的reverse方法反转字符串。

​ 2.使用LinkedHashSet集合去重。

 

代码:

import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        StringBuilder sb=new StringBuilder(sc.nextLine()).reverse();
        String str=sb.toString();
        if(str.charAt(0)=='0'){
            System.out.println("输入非法!");
            return;
        }
        
        LinkedHashSet<Character> set=new LinkedHashSet<>();
        for (int i = 0; i < str.length(); i++) {
            set.add(str.charAt(i));
        }

        for (char ch:set) {
            System.out.print(ch);
        }
    }
}

 
 

大佬代码:

使用HashSet集合来去重。再从右往左依次算出每个位数的数值。

import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            // 使用HashSet来判断是否是不重复的
            HashSet<Integer> hs = new HashSet<>();
            int target = sc.nextInt();// 获取代求解的值
            while(target != 0){ // 求解每位上面的整数
                int temp = target % 10;
                if(hs.add(temp)) // 如果能加入,就是说明没有重复
                    System.out.print(temp);
                target /= 10;// 除10能去掉最右边的数字
            }
            System.out.println();
        }
    }
}

 

 

indexOf() :返回指定字符ch在此字符串中第一次出现处的索引值;如果未出现该字符,则返回-1。

 //逆序排列
    StringBuilder stringBuilder = new StringBuilder(scanner.nextLine()).reverse();
    String str = stringBuilder.toString();
 
    //结果集
    StringBuilder result = new StringBuilder();
 
    for (int i = 0; i < str.length(); i++) {
        if (str.indexOf(str.charAt(i)) == i) {
            result.append(str.charAt(i));
        }
    }
    System.out.println(result.toString());
}

 
 

直接利用字符串包含。

import java.util.*;
 
public class Main{
    public static void main(String agrs[]) {
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();
        String result = "";
        for (int i = line.length(); i > 0; i--) {
            if (!result.contains(line.substring(i-1,i))) {
                result += line.substring(i-1,i);
            }
        }
        System.out.println(result);
         
    }
}
  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值