前言
`第八个,刷完睡觉
一、合并表记录
描述
数据表记录包含表索引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
二、使用步骤
1.消耗空间与时间
代码如下(示例):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HJ08_HeBingBiao
{
class Program
{
public static void Main(string[] args)
{
string line;
while ((line = System.Console.ReadLine()) != null)
{
// 笑死 活学活用前面的,但是数据量太大就不讨巧了
int n = Convert.ToInt32(line);
int[] arr = new int[11111112];
while (n-- > 0)
{
string[] tokens = System.Console.ReadLine().Split(' ');
for (int i = 0; i < arr.Length; i++)
{
if (i == Convert.ToInt32(tokens[0]))
{
arr[i] += Convert.ToInt32(tokens[1]);
break;
}
}
}
for (int i = 0; i < arr.Length; i++)
{
if (arr[i] != 0)
{
System.Console.WriteLine(i + " " + arr[i]);
}
}
}
}
}
}
2.吸取先进经验后的
代码如下(示例):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HJ08_HeBingBiao1
{
class Program
{
public static void Main(string[] args)
{
string line;
while ((line = System.Console.ReadLine()) != null)
{
int n = int.Parse(line);
// 注意复习Dictionary
Dictionary<int, int> dic = new Dictionary<int, int>();
while (n-- > 0)
{
string[] tokens = System.Console.ReadLine().Split(' ');
int key = int.Parse(tokens[0]);
int value = int.Parse(tokens[1]);
if (dic.ContainsKey(key))
{
dic[key] += value;
}
else
{
dic.Add(key, value);
}
}
// 对键进行排序
List<int> indexs = new List<int>();
foreach (var obj in dic)
{
indexs.Add(obj.Key);
}
// list也能用Sort啊,我现在的感觉就是list是数组先进版,动态➕泛型
indexs.Sort();
for (int i = 0; i < indexs.Count; i++)
{
Console.WriteLine(indexs[i] + " " + dic[indexs[i]]);
}
}
}
}
}
总结
先进方法主要用到了一个list,排序,dictionary,我工作中倒是见过,但是不太熟,那个Containskey方法也不记得,所以没想到,这波好好复习下相关知识,有空补充在下面