题目描述

输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

输出描述:
对应每个测试案例,输出两个数,小的先输出。

【思路】同LeetCode中的Two Sum类似,但由于要将乘积最小的一组输出,因此需要一个辅助函数Sift来将不符合条件的删除。

 1 class Solution
 2 {
 3 public:
 4     void Sift(vector<int> &vec)
 5     {
 6         int minid = 0;
 7         int num = vec.size();
 8         vector<int> multi(num/2);
 9         for(int i = 0,j = 0; i < num; i = i + 2,j ++)
10         {
11             multi[j] = vec[i]*vec[i+1];
12         }
13         for(int i = 1; i < num/2; i ++)
14         {
15             if(multi[minid] > multi[i])
16             {
17                 vec[minid*2] = vec[minid*2+1] = -1;
18                 minid = i;
19             }
20             else
21             {
22                 vec[i*2] = vec[i*2+1] = -1;
23             }
24         }
25         for (vector<int>::iterator iter = vec.begin(); iter != vec.end(); )
26         {
27             if (*iter == -1)
28             {
29                 if (++iter == vec.end())
30                 {
31                     vec.erase(--iter);
32                     break;
33                 }
34                 else iter = vec.erase(--iter);
35             }
36             else
37                 ++iter;
38         }
39     }
40
41     vector<int> FindNumbersWithSum(vector<int> array,int sum)
42     {
43         vector<int> res;
44         if(array.size() < 2) return res;
45         int target = 0;
46         vector<int> temp;
47         for(int i = 0; i < array.size(); i ++)
48         {
49             target = sum - array[i];
50             if(find(temp.begin(),temp.end(),target) != temp.end())
51             {
52                 res.push_back(target);
53                 res.push_back(array[i]);
54             }
55             else
56             {
57                 temp.push_back(array[i]);
58             }
59         }
60         Sift(res);
61         return res;
62     }
63 };

转载于:https://www.cnblogs.com/lca1826/p/6520188.html

[剑指Offer] 42.和为S的两个数字相关推荐

  1. LeetCode_剑指 Offer 57. 和为s的两个数字(利用set、双撞指针两种思路 Java实现)

    题目描述:剑指 Offer 57. 和为s的两个数字 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,则输出任意一对即可. 示例 1: 输入:n ...

  2. 剑指offer:和为S的两个数字

    题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 解题思路 class Solution { public:v ...

  3. 《剑指offer》和为s的两个数字

    题目:输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. 解析:由 ...

  4. 【算法】剑指 Offer 57. 和为s的两个数字

    1.概述 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,则输出任意一对即可. 示例 1: 输入:nums = [2,7,11,15], tar ...

  5. 剑指Offer值和为S的两个数字

    题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 思路 l表示左侧位置,r表示右侧位置.不断向中间靠拢,如果a ...

  6. 剑指 Offer II 006. 排序数组中两个数字之和

    由于题目中数组已经排好序,所以可以用双指针 双指针: i=0,j=nums.size( )-1 当 i<j 时循环,当目标小于target时i++,当目标大于target时,j-- 当目标小于t ...

  7. Leetcode——连续子数组的最大和(剑指offer 42)

    题目选择Leetcode--剑指offer 42 动态规划基础练习题,也就是最大连续子序列和 解题代码: class Solution { public:int maxSubArray(vector& ...

  8. 【LeetCode】剑指 Offer 42. 连续子数组的最大和

    [LeetCode]剑指 Offer 42. 连续子数组的最大和 文章目录 [LeetCode]剑指 Offer 42. 连续子数组的最大和 一.动态规划 一.动态规划 状态定义 设动态规划列表 dp ...

  9. 剑指 Offer 42. 连续子数组的最大和(官解)

    14天阅读挑战赛 努力是为了不平庸~ 算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!欢迎记录下你的那些努力时刻(算法学习知识点/算法题解/遇到的算法bug/等等),在分享的同时加深对于算 ...

最新文章

  1. R语言使用dplyr聚合统计分组数据、ggplot2可视化分组线图、使用geom_line函数自定义设置线条类型、粗细、颜色(Change line types + colors by groups)
  2. QT textedit 滚动条自动往下滚动
  3. Oracle导入导出数据
  4. string对象和C风格字符串
  5. python的魅力在哪_python的优势在哪
  6. php 备份数据库 Backup Your MySQL Database Using PHP
  7. __attribute__((regparm(number))):函数通过number个寄存器传递参数,否则通过堆栈
  8. pythoncsv格式清洗与转换_数据预处理-清洗转换
  9. 毕业设计,步进电机解魔方机器人
  10. c语言表达式amp;amp;,C语言中的运算符及其优先级
  11. 计算机组成原理 第二版 课后答案 (唐朔飞) 1~8章
  12. 从零开始学Docker(超详细讲解+案例分析)
  13. Wechat协议初探
  14. 石头剪刀布程序流程图_民间传统体育游戏 | 石头剪刀布
  15. android retrofit实例,Retrofit使用步骤
  16. 第三章 电商分析之会员活跃度
  17. Android实现自适应正方形GridView(陌陌引导页面效果)
  18. 1011: [HNOI2008]遥远的行星
  19. 产品经理基础——需求文档
  20. 用 bat 批处理命令启动 Android Studio 自带模拟器

热门文章

  1. Machine Learning学习计划
  2. 爬取校园网新闻首页的新闻 使用正则表达式,函数抽离
  3. apktool 在mac下的使用 -反编译安卓apk文件
  4. Kafka分区原理图
  5. SpringMVC文件上传笔记
  6. 微信支付开发(6) 收货地址共享接口
  7. EMA算法的C#实现
  8. raspberry pi_适用于Linux,Raspberry Pi和开源的游戏:年度热门读物
  9. 一年新的一年_热门系统管理员阅读新的一年
  10. dsp怪胎_我是如何发现内心怪胎的