题解 | #合并表记录#
合并表记录
https://www.nowcoder.com/practice/de044e89123f4a7482bd2b214a685201
import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str=null; while((str=br.readLine())!=null){//输入非空进行 int n=Integer.parseInt(str);//将输入n转为int型 int indexs[]=new int[n];//构建一个长为n的indexs数组 for(int i=0;i<n;i++){ indexs[i]=-1; }//数组indexs值全=-1 Map<Integer,Integer> map=new HashMap<>();//Map接口,表示键值对的存储结构,此为添加一个键值对 for(int i=0;i<n;i++){//把该过程循环四次,循环内容和i无关 String v_k[]=br.readLine().split(" ");//用指定的分隔符(如空格)调用spilt方法对字符串进行分割 int index=Integer.parseInt(v_k[0]);//存入键,提取数组中的值,index是最新的数值 int value=Integer.parseInt(v_k[1]);//存入值,提取数组中的值,value是最新的数值 for(int j=0;j<n;j++){ if(indexs[j]==-1||indexs[j]==index){ indexs[j]=index; break;//break是终止循环语句,例如for循环和while循环,不是终止if语句 } }//找到k_y对要放进去的数组 map.put(index,map.getOrDefault(index,0)+value);//在for循环中,如果没有重复的键,则读写最新的值,如果有重复的键,则把新值加在旧值上重新读写数据(重新添加键值对)getOrDefault(index,0),没有index键,则返回值为0,有则返回值 } Arrays.sort(indexs);//对数组进行从小到大的排序 for(int i=0;i<n;i++){ if(indexs[i]!=-1){//剔除数组中值为-1的数 int value=map.get(indexs[i]);//取值 System.out.println(indexs[i]+" "+value);//输出值 } } } } }