您获得整数数组a
。需要在x
中返回延迟值a
,以便-x
也在a
中。如果没有这样的值,请返回0。
示例:对于[6,5,2,-1,-2,-5]
,返回值是5
,因为-5
在数组中(答案不是6
,因为-6
在数组中)。
现在,如果我可以使用Java,我将使用HashSet来解决它,我将所有数组元素添加到它们的绝对值中,循环遍历该数组,如果它是迄今为止我看到的最大值,则对最大值进行udpat我在哈希表中找到了它的绝对价值。这将导致O(n)
平均时间。
但是在采访中,我需要使用C代码来解决它,而无需创建任何特殊的数据结构,例如HashSet。我唯一的想法是对数组进行排序,使用两个指针(一个用于开始,一个用于结束),然后将指针彼此相对移动,直到找到答案。这还不够,因为它是O(nlogn)
。
您有一个想法,如何仅使用内置库在O(n)
中的C代码中解决它?
#include <stdio.h>
#include <stdlib.h>
int found = 0;
int n = 0;
int len = 6; // your array has 6 elements
for(int i = 0; i < len -1; i++) {
for(int j = i+1; j < len; j++) {
if(a[i] == -a[j] && (found = 0 || abs(a[i] > n)) n = abs(a[i]);
}
}
if(found) printf("Number is : %d\n", n);
else printf("Not found");