问题描述: 给定有序递增数组和整数S, 找出数组中和为S的两个元素. 如果有多对元素, 选择乘积最小的那对.
思路: 首尾向中间逼近, 设置product, m , n中间变量, 存储当前最小的乘积和对应元素.
vector<int> findNumberApperaOnce(vector<int> v, int s)
{
int i = 0;
int j = v.size()-1;
int m, n =0;
int min_product = 0;
while(i<j)
{
if(v[i] + v[j] == s)
{
if(min_product == 0)
{
min_product = v[i] * v[j];
m = v[i];
n = v[j];
}
if(min_product > v[i]*v[j])
{
min_product = v[i] * v[j];
m = v[i];
n = v[j];
}
i++;
j--;
}
if(a[i] + a[j] < s) i++;
if(a[i] + a[j] > s) j--;
}
vector<int> result;
if(n!=0)
{
result.push_back(m);
result.push_back(n);
}
return result;
}