大家都来看看,这个该用什么算法

bear_c 2009-05-11 12:01:09

给你一个包含有N个整数的集合,如果从集合中找到三个不同的整数a,b,c, 使得
a+b=c,那么我们说这个集合包含一个等式。
★编程任务
计算集合中所包含的等式数量。
★数据输入
输入数据由input.txt提供。文件的第一行为一个整数N (3<=N<=5,000),表示集合中有
N 个不同的整数。第二行有N 个整数,表示集合中的元素,元素的整数值大小为-
10000000~10000000。
...全文
181 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
2000ihby 2009-05-14
  • 打赏
  • 举报
回复
mark
chocolate001 2009-05-14
  • 打赏
  • 举报
回复
可以用回溯法求解。
绿色夹克衫 2009-05-14
  • 打赏
  • 举报
回复
如果没有可以dp的方法的话,n*log(n)是不太可能的,毕竟数据量都是n^2级的!

[Quote=引用 6 楼 coxfilur_2008 的回复:]
我觉得n * log(n) 时间内可以解决,不知道有没有更快的。
[/Quote]
Paradin 2009-05-14
  • 打赏
  • 举报
回复
5000比较小了,n^3都快
coxfilur_2008 2009-05-13
  • 打赏
  • 举报
回复
搞错了,应该是 o(n^2) 时间内可以解决。
第一步快速排序。。。
coxfilur_2008 2009-05-13
  • 打赏
  • 举报
回复
我觉得n * log(n) 时间内可以解决,不知道有没有更快的。
绿色夹克衫 2009-05-11
  • 打赏
  • 举报
回复
应该是一个N^2的算法吧!先用Hash记录一下所有的数,

然后枚举元素C(n,2),计算加和,然后在Hash中判断是否有等于加和的值!
绿色夹克衫 2009-05-11
  • 打赏
  • 举报
回复
基本上过的去吧!你自己试试才知道!

[Quote=引用 4 楼 bear_c 的回复:]
你试过当数组包含5000个整数时函数的效率如何?
[/Quote]
bear_c 2009-05-11
  • 打赏
  • 举报
回复
你试过当数组包含5000个整数时函数的效率如何?
绿色夹克衫 2009-05-11
  • 打赏
  • 举报
回复
给个简版的,LZ自己修改一下吧,主要是文件读取部分


using System;
using System.Collections.Generic;

public class program
{
private static void Main()
{
int N = Int32.Parse(Console.ReadLine());

int[] items = new int[N];

for (int i = 0; i < N; i++)
items[i] = i;

//排个序,为了方便剪枝
Array.Sort(items);
int max = items[items.Length - 1];
int count = 0,sum;

//弄个hash表,做解的快速判断
Dictionary<int, int> hash = new Dictionary<int, int>();

for (int i = 0; i < N; i++)
hash.Add(i, 1);

//枚举元素,统计解的个数
for (int i = 0; i < N - 1; i++)
{
for (int j = i + 1; j < N; j++)
{
sum = items[i] + items[j];
if(sum > max)
break;

if (hash.ContainsKey(sum))
count++;
}
}
}
}
bear_c 2009-05-11
  • 打赏
  • 举报
回复
还是看不太明白,有没有关键部分的代码?

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧