首页 > 试题广场 >

合并表记录

[编程题]合并表记录
  • 热度指数:767044 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
数据表记录包含表索引index和数值value(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照index值升序进行输出。


提示:
0 <= index <= 11111111
1 <= value <= 100000


输入描述:

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



输出描述:

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

示例1

输入

4
0 1
0 2
1 2
3 4

输出

0 3
1 2
3 4
示例2

输入

3
0 1
0 2
8 9

输出

0 3
8 9
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

// mergeRecords函数接受一个异步迭代器和记录的数量
async function mergeRecords(n) {
    // 创建一个对象来存储每个索引及其对应的值的总和
    let data = {};
    for (let i = 0; i < n; i++) {
        // 使用迭代器异步读取输入
        let line = await readline();
        // 分割索引和值,并将它们转换为数字
        let [index, value] = line.split(" ").map(Number);
        // 将值添加到对应索引的总和中
        if (data[index]) {
            data[index] += value;
        } else {
            data[index] = value;
        }
    }

    // 返回一个按索引升序排列的键值对数组
    return Object.keys(data)
        .sort((a, b) => a - b)
        .map((index) => [parseInt(index), data[index]]);
}

void (async function () {
    // 读取记录的数量
    let n = parseInt(await readline());
    // 调用mergeRecords函数并等待它完成
    let result = await mergeRecords(n);
    // 遍历结果并打印每个键值对
    result.forEach(([index, value]) => {
        console.log(index + " " + value);
    });
})();

发表于 2024-03-19 11:00:34 回复(0)
为啥一样的代码,运行时间差别那么大?
发表于 2022-04-23 16:59:43 回复(0)
const readline = require('readline')

var rl = readline.createInterface({
    input:process.stdin,
    output:process.stdout
})
var length = 0
var arr = []
rl.on('line',(line)=>{
    if(length == 0){
         length = parseInt(line)
    }else{
        arr.push(line)
    }
   
})
rl.on('close',()=>{
    var res = []
    arr.forEach((val,index)=>{
        var item = val.split(' ')
        if(res[parseInt(item[0])]){
            res[parseInt(item[0])] = parseInt(res[parseInt(item[0])]) + parseInt(item[1])
        }else{
            res[parseInt(item[0])] = item[1]
        }
    })
    res.forEach((val,index)=>{
        if(val){
             console.log(index + ' ' + val)
        }
    })
})

发表于 2021-09-03 23:33:36 回复(0)
var readline = require('readline');
var rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
})
var inputData = [];
rl.on('line', (input) => {
    inputData.push(input);
}).on('close', () => {
//     console.log(inputData)
    buildRes(inputData)
})
var buildRes = function(data) {
    const res = data.slice(1);
    const resObj = {};
    res.forEach(item => {
        const val = item.split(' '); 
        if (!resObj[val[0]]) {
            resObj[val[0]] = parseInt(val[1]);
        } else {
            resObj[val[0]] = parseInt(resObj[val[0]]) + parseInt(val[1]);
        }
    })
    Object.keys(resObj).forEach(key => {
        const str = key + ' ' + resObj[key];
        console.log(str)
    })
}
发表于 2021-08-04 22:43:05 回复(0)
let num;
while (num = parseInt(readline())) {
    let data = {}
    var keyList = []
    for (let i = 0; i < num; i++) {
        let input = (readline()).split(' ');
        if (!data[input[0]]) {
            keyList.push(parseInt(input[0]));
            data[input[0]] = parseInt(input[1])
        } else {
            data[input[0]] += parseInt(input[1])
        }
    }
    let arr = keyList.sort((a, b) => {
        return a-b;
    });
    for (let i = 0; i < keyList.length; i++) {
        let key = keyList[i];
        console.log(key + ' ' + data[key]);
    }
}
发表于 2021-07-04 23:20:19 回复(0)
var line
while(line=readline()){
    var data={}
    var keyList=[];
    for(var i=0;i<parseInt(line);i++){
        var input=readline()
        var key=input.split(' ')[0];       
        var value=parseInt(input.split(' ')[1])
        if(!data[key]){
            keyList.push(key);
             data[key]=value;
        }else{
            data[key]=data[key]+value
        }
       
    }
    keyList.sort((a,b)=>{return a-b})
    for(var i=0;i<keyList.length;i++){
        var sortKey=keyList[i]
        console.log(sortKey+' '+data[sortKey])
    }
}
发表于 2021-07-02 15:09:52 回复(0)
用js完成:
可以用map数据接口,key值可以为任何值,组成键值对,然后用map.has()去对比,如果有,就value相加,如果没有,就map.set
// 循环取出每一个键值个数
// 新建一个map  { key: value, key:value },
// 判断map是否有这个key,有key的话,value相加,没有就塞进map中
// 最终结果 取出所有的key,对key进行排列, 按照key值从map中取出value输出
function sys() {
    let map = new Map();
    var line = [];
    while(line=readline()) {
        var arr = line.split(' ');
        if (arr.length == 2) {
            if (map.has(arr[0])) {
                var val = map.get(arr[0]);
                map.set(arr[0], Number(val) + Number(arr[1]));
            } else {
                map.set(arr[0], arr[1]);
            }
        }
        
    }
    var keysArr = [];
    for (var s of map.keys()) {
        arrKeys.push(s);
    }
    keysArr.sort((a,b) => {return a - b});
    keysArr.map((item) => {
        console.log(item + ' ' + map.get(item));
    })
}
sys();


发表于 2021-05-27 21:23:51 回复(0)
let snum = readline()
let arr = []
for(let i =0;i<snum;i++){
    arr.push(readline())
}
let obj = {}
for (let item of arr) {
  let key = Number(item.split(' ')[0])
  let val = Number(item.split(' ')[1])
  if (obj[key]) {
    obj[key] = obj[key] + val
  } else {
    obj[key] = val
  }
}
Object.keys(obj).map((key) => {
  console.log(key + ' ' + obj[key])
})
发表于 2021-04-02 14:51:09 回复(0)
var readline = require('readline');
const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout
});

const obj = {}
rl.on('line', function(line){
   var tokens = line.split(' ');
    
    if(tokens[1]){
       if(obj[tokens[0]]){
           obj[tokens[0]] += Number(tokens[1])
       } else {
           obj[tokens[0]] = Number(tokens[1])
       } 
    }
});

rl.on('close',()=>{
    for (const [key, value] of Object.entries(obj)) {
       console.log(`${key} ${value}`);
    }
})
应该是js最简洁的写法,简单易懂,用obj存储和计算还不需要排序,直接使用Object.entries输出完事
编辑于 2021-03-22 00:53:41 回复(0)
var num=parseInt( readline())
var map=new Map()
while(num-- >0){
   
    var line=readline().split(' ').map(v=>+v)
    var index=line[0]
    var value=line[1]    
    if(map.get(index)){
        map.set(index,map.get(index)+value)
    }else{
        map.set(index,value) 
    } 
}
 //转数组
  var arrayObj=Array.from(map); 
 //排序
  arrayObj.sort(function(a,b){return a[0]-b[0]}) 
  arrayObj.forEach(item=>{
     console.log( item[0],item[1]);
   });

编辑于 2021-01-19 10:43:51 回复(0)
while(line = readline()){
    var result = new Map();
    for(let i = 0;i<parseInt(line);i++){
        let lines = readline().split(' ')
        if(result.has(lines[0])){
            result.set(lines[0],parseInt(lines[1])+result.get(lines[0]))
        }else{
            result.set(lines[0],parseInt(lines[1]))
        }
    }
    var resultlist = new Array();
    result.forEach((value,key)=>{
        resultlist.push(parseInt(key))
    })
    resultlist.sort((a,b)=>{return a-b})
    resultlist.forEach((item)=>{
        console.log(item+' '+result.get((item).toString()))
    })
}

发表于 2020-12-09 16:40:16 回复(0)
    let n = readline();
    let obj = {};
    while(line=readline()){
        let lines = line.split(' ');
        let a = parseInt(lines[0]);
        let b = parseInt(lines[1]);
        obj[a] !== undefined ? obj[a]+=b : obj[a]=b;
    }
    Object.keys(obj).map(el=> print(el + ' ' + obj[el]));


编辑于 2020-01-14 12:07:50 回复(0)
var n = readline(),arr,resArr = []
while(n--){
    arr = readline().split(' ')
    arr[0] = parseInt(arr[0])
    resArr[arr[0]]=(resArr[arr[0]] || 0)+ parseInt(arr[1])
}
resArr.forEach((e,key)=>{
    console.log(key +' ' + e)
})

发表于 2019-11-24 12:56:31 回复(0)
var rr;
while(str=readline()){
    var arr = [];
    var obj={};
    for(var i=0;i<Number(str);i++){
        if (rr = readline()) {
            rr = rr.split(" ");
            if (!obj[rr[0]]) {
                obj[rr[0]] = Number(rr[1]);
            } else {
                obj[rr[0]] +=Number(rr[1]);
            }
        }
    }
    for (var k in obj) {
        arr.push(k);
    }
    arr.sort(function(a,b){return a-b;});
    for (var j=0;j<arr.length;j++) {
         console.log(arr[j]+" "+obj[arr[j]]);
    }
}
发表于 2019-10-27 12:46:12 回复(0)
const readline = require("readline");
var rl = readline.createInterface({
    input:process.stdin,
    output:process.stdout
})
var n = -1;
var obj = {};
var data = [];
rl.on("line",function(line){
    data.push(line);
    if(n<0){
        n = data[0]-0;  // 键值对的个数
        data.splice(0,1); // 去掉第一个数
    }else{
        var tokens = data[data.length-1].split(" ");
        if(obj[tokens[0]]){ //如果存在,就求和
            obj[tokens[0]] = parseInt(obj[tokens[0]]) + parseInt(tokens[1]);
        }else{  // 如果不存在,就存入
            obj[tokens[0]] = tokens[1];
        }
    }
    if(data.length == n){ // 当把所有数据输入完之后,再打印对象
        for(var k in obj){
           console.log(k+" "+obj[k])
        }
    }
})
发表于 2019-03-15 16:32:33 回复(0)
var num = readline();
var obj = {}
for(var i = 0;i < num;i ++){
    var arr = readline().split(' ');
    var str1 = arr[0]
    var str2 = arr[1]
    if(obj[str1]){
        obj[str1] += parseInt(str2)
    }else{
        obj[str1] = parseInt(str2)
    }
}
for(k in obj){
    console.log(k + " " + obj[k])
}
发表于 2019-03-14 19:20:54 回复(0)
不知道为什么错误
var line;
var arr=[];
while (line=realine()){
    arr.push(line);
}
arr.shift();
var result=arr.map((item)=>item.split(' ').map((i)=>+i)).reduce((prev,item)=>{
    var index=prev.findIndex((n)=>n[0]===item[0]);
    index ? prev.splice(index,1,[item[0],item[1]+prev[index][1]]):
           prev.push(item);
    return prev;
},[])
result.forEach((item)=>{
    var str=item.join(' ');
    console.log(str)
});
发表于 2018-11-29 11:34:51 回复(0)
var k=parseInt(readline())
var obj={} for(var i=0;i<k;i++){ arr=readline().split(' ').map(function(item){ return parseInt(item); });     //key值相等的,合并value if(arr[0] in obj){ obj[arr[0]]+=arr[1]; }else{ obj[arr[0]]=arr[1]; } } var newarr=Object.keys(obj); for(var i=0;i<newarr.length;i++){ console.log(newarr[i]+' '+obj[newarr[i]]); }

编辑于 2018-06-18 22:50:32 回复(0)
var k = parseInt(readline());
var obj = {};
for(var i=0; i<k; i++){
    arr = readline().split(' ').map(function(item){
        return parseInt(item);
    });
    if(arr[0] in obj){
        obj[arr[0]] += arr[1]; 
    }else{
        obj[arr[0]] = arr[1];
    }
}
var newarr = Object.keys(obj);
for(var i=0; i<newarr.length; i++){
    print(newarr[i] + ' ' + obj[newarr[i]]);
}

发表于 2017-09-22 22:26:49 回复(0)
js代码 已通过
var readline = require('readline')
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
})
var lines = 0;
var obj = {};
rl.on('line', function(line) {
    if(lines===0) {
      lines = parseInt(line);
      obj = {};
    }
  else{
    lines--;
    var key, value;
    var num = line.split(' ');
    key = num[0];
    value = parseInt(num[1]);
    if(obj[key]) obj[key] += value;
    else obj[key] = value;
    if(lines === 0){
      for(var key in obj){
        console.log(key + ' ' + obj[key]);
      }
    }
  }
})
发表于 2017-07-04 16:58:45 回复(0)

问题信息

难度:
23条回答 105685浏览

热门推荐

通过挑战的用户

查看代码
合并表记录