我有一个包含10个项目的数组:
int [] arrayNum = new [] {1,2,3,4,5,6,7,8,9,10}
当用户从数字10的控制台输入值时:
请输入数字:10
我希望找到总和为10
(第一个数字对)的数字
在上面的数组我应该得到4& 6。
请给我最好的解决方案。
答案 0 :(得分:0)
这是你可以开始的伪代码,找到一些数字加起来达到预期的目标:
array[] = {1 .. 10}
desired_value = 12 # will give 2 and 10, from 1 .. 10
for index1 in 1 .. array.size() - 1:
for index2 in index1 + 1 .. array.size():
if array[index1] + array[index2] == desired_value:
print array[index1], array[index2]
stop program
print "No pairs found"
这假定基于一个数组的索引,并且将为您提供第一对“最左边”(数组中最早的)初始数。
将其转换为您必须使用的任何实际语言是我留给您的工作,因为:
答案 1 :(得分:0)
此问题的最佳解决方案是使用 INVARIANTS 进行操作,并且还在 EPI 一书中报告了原因(编程访谈的要素)。
无论如何,找到第一对(如果存在)的最佳解决方案(复杂度 O(n) )是有两个指针然后(例如在Java中):
int i = 0, j = array.length-1;
do {
int sum = array[i] + array[j];
if(sum == k) {
System.out.println("Number are: " + array[i] + " and " + array[j]);
break;
}
if(sum < k) i++;
else j--;
} while (i <= j);