在数组a中找到最大值x,以便在使用C代码时也得到-x(面试问题)

问题描述 投票:1回答:1

您获得整数数组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代码中解决它?

c arrays performance hashset
1个回答
0
投票
#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");
© www.soinside.com 2019 - 2024. All rights reserved.