您将获得一个数字数组,它们是未分类/随机顺序.您应该在阵列中找到最长的连续数字序列.请注意,序列不需要在数组中按排序顺序排列.这是一个例子:
输入:
A[] = {10,21,45,22,7,2,67,19,13,45,12,11,18,16,17,100,201,20,101}
Run Code Online (Sandbox Code Playgroud)
输出是:
{16,17,18,19,20,21,22}
Run Code Online (Sandbox Code Playgroud)
解决方案需要具有O(n)复杂度.
我被告知解决方案涉及使用哈希表,我确实遇到了几个使用2个哈希表的实现.人们无法对此进行排序和解决,因为排序将需要O(nlgn),这不是所期望的.
不幸的数字(不是家庭作业)
很少有数字被认为是不吉利的(它只包含4和7).我们的目标是在正整数a和b的范围内找到这些数字的计数.
例如:
输入:a = 10 b = 20
输出:0
输入:a = 30 b = 50
输出:2(44,47)
下面是我使用静态数组方法尝试的代码,其中我最初计算32位整数的所有可能的不吉利数字.这在O(n)中完成,并且稍后顺序扫描有助于获得再次为O(n)操作的计数.没有静态数组的帮助,有没有更好的方法来解决这个问题?
#define MAX_UNLUCKY 1022
static int unlucky[MAX_UNLUCKY];
int main(int argc, char **argv) {
int i, j, k;
int a, b, factor;
printf("Enter the numbers : \n");
scanf("%d",&a);
scanf("%d",&b);
unlucky[0] = 4;
unlucky[1] = 7;
factor = 10;
k = 1;
for(i = 2; i < MAX_UNLUCKY; ++i)
unlucky[i] = unlucky[(i >> 1) - 1]*factor + unlucky[k ^= 1];
for (i = 0; i …Run Code Online (Sandbox Code Playgroud) 我正在阅读MHZ - lmbench的创建者和源代码浏览代码的基准论文解剖.
在BENCH_INNER()宏内部,我有一个疑问:
#define BENCH_INNER(loop_body, enough) { \
static iter_t __iterations = 1; \
int __enough = get_enough(enough); \
iter_t __n; \
double __result = 0.; \
\
while(__result < 0.95 * __enough) { \
start(0); \
for (__n = __iterations; __n > 0; __n--) { \
loop_body; \
} \
__result = stop(0,0); \
if (__result < 0.99 * __enough \
|| __result > 1.2 * …Run Code Online (Sandbox Code Playgroud)