如何在没有循环的情况下扫描并比较数组中的值

时间:2015-09-15 15:50:22

标签: c arrays loops

我有一项任务,我需要扫描一些案例。在每种情况下,您都会获得一个数组和一个目标。目标是扫描数组以找到一组两个加起来的数字。

我的问题是我需要让我的大哦(运行时间)等于n,这意味着我最多只能有一个循环。这是我现在的代码。

//Assume that cases, sizeofarray, array, and target already exist.    
while(cases =! 0){
        scanf("%d", @sizeofarray);
        scanf("%d", @target);

        array = malloc(sizeof(int) * sizeofarray);
    }

正如您所看到的,为多个案例运行的要求已经消除了我在函数中使用其他循环的能力。因此,我需要扫描并比较数组中的值而不使用for循环。

我认为另一种选择是不使用case值循环,从而使我能够在其他地方使用循环并将我的运行时间保持在n以下。

如果有人可以帮助我,我将不胜感激。重申一下,我需要知道是否存在一种技术,可以在没有循环的情况下将值扫描到数组中,用于比较数组中的值而不进行循环,或者用于扫描多个没有循环的情况。

1 个答案:

答案 0 :(得分:1)

这是一个经典的两和问题。使用HashMap存储目标值。我提供了一个Java示例供您参考。我认为它可以很容易地转换为C ++代码

public class Solution {
    public int[] twoSum(int[] numbers, int target) {
    HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
    int[] result = new int[2];

    for (int i = 0; i < numbers.length; i++) {
        if (map.containsKey(numbers[i])) {
            int index = map.get(numbers[i]);
            result[0] = index+1 ;
            result[1] = i+1;
            break;
        } else {
            map.put(target - numbers[i], i);
        }
    }

    return result;
    }
}

时间复杂度取决于HashMap的put和get操作,通常是O(1)。

此解决方案的时间复杂度为O(n)。