資料表記錄包含表索引和數值,請對錶索引相同的記錄進行合併,即將相同索引的數值進行求和運算,輸出按照key值升序進行輸出。 輸入描述: 先輸入鍵值對的個數 然後輸入成對的index和value值,以
輸入描述:
先輸入鍵值對的個數 然後輸入成對的index和value值,以空格隔開
輸出描述:
輸出合併後的鍵值對(多行)
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner str = new Scanner(System.in); int n = Integer.parseInt(str.nextLine()); int key[]=new int[n]; int value[]=new int[n]; for(int i=0;i<n;i++){ String input=str.nextLine(); String[] input2=input.split(" "); key[i]=Integer.parseInt(input2[0]);//把輸入的index值存入陣列key中 value[i]=Integer.parseInt(input2[1]);//把輸入的value值存入陣列value中 } bucketMap(key,value); str.close(); } public static void bucketMap(int[] key, int[] value){//利用桶排序合併鍵值相同的記錄,並輸出 int size=key.length; int max=maxNumber(value); int[] map=new int[max]; for(int i=0;i<size;i++){ map[key[i]]+=value[i];//合併鍵值相同的記錄 } for(int j=0;j<map.length;j++){ if(map[j]!=0){ System.out.println(j+" "+map[j]); } } } public static int maxNumber(int[] value){//求鍵值對應陣列中數值最大值,用於定義桶的個數 int length=value.length; int max=value[0]; for(int i=1;i<length;i++){ if(max<value[i]){ max=value[i]; } } return max; } }