【发布时间】:2015-10-12 16:23:53
【问题描述】:
检查是否可以从指定的数字序列创建等差数列的最有效方法是什么?
目前我对序列进行排序,然后这样做:
#include<bits/stdc++.h>
using namespace std;
static bool sort_using_greater_than(float u, float v)
{
return u > v;
}
int main()
{
int licznik=0, i=0;
double number[100000];
while(~scanf("%f", &number[i]))
{
i++;
licznik++;
}
sort(number,number+100, sort_using_greater_than);
for(int i = 1; i < licznik-1; i++)
{
if(number[i] - number[i+1] != number[0] - number[1])
{
puts("NO");
return 0;
}
}
puts("YES");
}
测试用:
- 1.0 5.0
我的代码返回 YES,为什么?
enter code here
double search_min(double tab[], int n)
{
double min = tab[0];
for(int i = 1; i < n; i++)
{
if(min > tab[i])
min = tab[i];
return min;
}
还有,我怎样才能找到两个最小的元素?
【问题讨论】:
-
你必须检查每个数字,所以复杂度是
O(n)。 -
是刚刚排序或唯一的数字。如果它们也是独一无二的,并且你知道有多少,你可以在 O(1) 内完成
-
@ManosNikolaidis:仅在一种特殊情况下。
-
否,但可以进行一些微优化:在循环外只计算一次
diff = number[0] - number[1]。虽然优化编译器可能会为你做这件事,但这不是一个微不足道的优化。 -
当用户可能无法输入 100 个数字时,为什么要
sort(number,number+100, sort_using_greater_than);?