[剑指Offer] 42.和为S的两个数字
题目描述
输入一个递增排序的数组和一个数字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的两个数字相关推荐
- LeetCode_剑指 Offer 57. 和为s的两个数字(利用set、双撞指针两种思路 Java实现)
题目描述:剑指 Offer 57. 和为s的两个数字 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,则输出任意一对即可. 示例 1: 输入:n ...
- 剑指offer:和为S的两个数字
题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 解题思路 class Solution { public:v ...
- 《剑指offer》和为s的两个数字
题目:输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. 解析:由 ...
- 【算法】剑指 Offer 57. 和为s的两个数字
1.概述 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,则输出任意一对即可. 示例 1: 输入:nums = [2,7,11,15], tar ...
- 剑指Offer值和为S的两个数字
题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 思路 l表示左侧位置,r表示右侧位置.不断向中间靠拢,如果a ...
- 剑指 Offer II 006. 排序数组中两个数字之和
由于题目中数组已经排好序,所以可以用双指针 双指针: i=0,j=nums.size( )-1 当 i<j 时循环,当目标小于target时i++,当目标大于target时,j-- 当目标小于t ...
- Leetcode——连续子数组的最大和(剑指offer 42)
题目选择Leetcode--剑指offer 42 动态规划基础练习题,也就是最大连续子序列和 解题代码: class Solution { public:int maxSubArray(vector& ...
- 【LeetCode】剑指 Offer 42. 连续子数组的最大和
[LeetCode]剑指 Offer 42. 连续子数组的最大和 文章目录 [LeetCode]剑指 Offer 42. 连续子数组的最大和 一.动态规划 一.动态规划 状态定义 设动态规划列表 dp ...
- 剑指 Offer 42. 连续子数组的最大和(官解)
14天阅读挑战赛 努力是为了不平庸~ 算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!欢迎记录下你的那些努力时刻(算法学习知识点/算法题解/遇到的算法bug/等等),在分享的同时加深对于算 ...
最新文章
- R语言使用dplyr聚合统计分组数据、ggplot2可视化分组线图、使用geom_line函数自定义设置线条类型、粗细、颜色(Change line types + colors by groups)
- QT textedit 滚动条自动往下滚动
- Oracle导入导出数据
- string对象和C风格字符串
- python的魅力在哪_python的优势在哪
- php 备份数据库 Backup Your MySQL Database Using PHP
- __attribute__((regparm(number))):函数通过number个寄存器传递参数,否则通过堆栈
- pythoncsv格式清洗与转换_数据预处理-清洗转换
- 毕业设计,步进电机解魔方机器人
- c语言表达式amp;amp;,C语言中的运算符及其优先级
- 计算机组成原理 第二版 课后答案 (唐朔飞) 1~8章
- 从零开始学Docker(超详细讲解+案例分析)
- Wechat协议初探
- 石头剪刀布程序流程图_民间传统体育游戏 | 石头剪刀布
- android retrofit实例,Retrofit使用步骤
- 第三章 电商分析之会员活跃度
- Android实现自适应正方形GridView(陌陌引导页面效果)
- 1011: [HNOI2008]遥远的行星
- 产品经理基础——需求文档
- 用 bat 批处理命令启动 Android Studio 自带模拟器