时间限制:1秒
空间限制:32768K
热度指数:101082
算法知识视频讲解
题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
思路:两个数离的越远并且满足条件,此时输出的结果是我们所需的。
C++实现:
class Solution {
public:
vector<int> FindNumbersWithSum(vector<int> array,int sum) {
vector <int> a;
int t = array.size();
int i = 0, j = t - 1;
while(i < j)
{
if(array[i] + array[j] == sum)
{
a.push_back(array[i]);
a.push_back(array[j]);
return a;
}
if(array[i] + array[j] > sum)
{
j --;
}
if(array[i] + array[j] < sum)
{
i ++;
}
}
return a;
}
};
python实现:
(1)
# -*- coding:utf-8 -*-
class Solution:
def FindNumbersWithSum(self, array, tsum):
# write code here
for i in array:
if tsum - i in array:
return [i, tsum - i]
return []
(2)
# -*- coding:utf-8 -*-
class Solution:
def FindNumbersWithSum(self, array, tsum):
# write code here
a = []
c = []
for i in range(0, len(array) - 1):
for j in range(i + 1, len(array)):
b = []
if(array[i] + array[j] == tsum):
b.append(array[i])
b.append(array[j])
c.append(b)
a.append(array[i] * array[j])
d = sorted(a)
e = []
f = []
for i in range(0, len(d)):
for j in range(0, len(a)):
if d[i] == a[j]:
f.append(j)
flag = False
for i in range(0, len(f)):
e.append(c[f[i]])
flag = True
if flag:
return e[0]
else:
return e