繁体   English   中英

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

[英]How to scan in and compare values in an array without loops

我有一项任务需要做一些案件的扫描。 在每种情况下,都为您提供一个数组和一个目标。 目的是扫描阵列以找到两个数字的集合,这些数字加起来等于目标。

我的问题是我需要使big-oh(运行时间)等于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值循环,从而使我能够在其他地方使用循环,并使big-oh运行时间保持在n以下。

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

这是一个经典的两和问题。 使用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的放置和获取操作,通常为O(1)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM