首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

S的两个数字

题目描述 输入一个递增排序的数组一个数字S,在数组中查找两个数,使得他们的正好是S,如果有多对数字等于S,输出两个数的乘积最小的。 输出描述: 对应每个测试案例,输出两个数,小的先输出。...思想 排好序的情况下 若ai + aj == sum ij相差越远乘积越小 我们可以定义两个指针,一个从前面走,一个从后面走,如何走由ai + ajsum关系驱动; 分析: 若ai + aj...== sum 则可以直接返回了,因为,遇到的第一个符合条件的必然是最小的; 若ai + aj > sum 那么只能 j-- 让降低下次才可能出现ai + aj == sum 若ai + aj...< sum那么只能 i-- 让升高下次才可能出现ai + aj == sum 代码 public ArrayList FindNumbersWithSum(int [] array,

26420
您找到你想要的搜索结果了吗?
是的
没有找到

S的两个数字

题目描述 输入一个递增排序的数组一个数字S,在数组中查找两个数,使得他们的正好是S,如果有多对数字等于S,输出两个数的乘积最小的。 解题思路 法一:哈希法。...用一个HashMap,它的 key 存储数S与数组中每个数的差,value 存储当前的数字,比较S=15, 当前的数 4,则往 hashmap 中插入(key=11, value=4)。...我们遍历数组,判断hashmap 中的 key 是否存在当前的数字,如果存在,说明存在着另一个数与当前的数相加 S,我们就可以判断它们的乘积是否小于之前的乘积,如果小的话就替换之前的找到的数字,如果大就放弃当前找到的...如果hashmap 中的 key 不存在当前的数字,说明还没有找到相加 S 的两个数,那就把S与当前数字的差作为 key,当前数字作为 value 插入到 hashmap 中,继续遍历。...a+b=sum,ab越远乘积越小,因为数组是递增排序,所以一头一尾两个指针往内靠近的方法找到的就是乘积最小的情况。

46120

【Python实践-8】S的两个数字

(剑指offer)输入一个递增排序的数组一个数字S,在数组中查找两个数,使得他们的正好是S,如果有多对数字等于S,输出两个数的乘积最小的。...思路:选定第一个数字,然后遍历后面的数字求和并与S比较,需要n-1次,不行的话再选定第2,3,,,n个数字,需要n^2次,时间复杂度比较高。...更简单的方法可以是定义两个指针,第一个指向第一个元素,第二个指向最后一个元素,两个元素相加,如果等于S则输出这两个元素,如果大于,则将第二个指针向前移一位,再求和进行比较;如果小于,则将第一个指针向前移一位...1 11 if data[i]+data[j]<tsum: 12 i=i+1 13 return () 知识点: 1、if not x是判断是否None...注意代码完备性,需判断传入参数是否空。 2、涉及到两个元素,想到定义两个指针,避免多层循环。 3、要考虑找不到两个数的情况,可以输出一个空列表或空元组。

66120

剑指Offer-S的两个数字

题目描述 输入一个递增排序的数组一个数字S,在数组中查找两个数,是的他们的正好是S,如果有多对数字等于S,输出两个数的乘积最小的。 输出描述: 对应每个测试案例,输出两个数,小的先输出。...,然后开始遍历数组找到sum的两个元素,从左到右找到的第一对sum的就是最小的一对。...代码实现 package Array; import java.util.ArrayList; import java.util.HashMap; /** * S的两个数字 * 输入一个递增排序的数组一个数字...S,在数组中查找两个数,是的他们的正好是S,如果有多对数字等于S,输出两个数的乘积最小的。...,然后开始遍历数组找到sum的两个元素,从左到右找到的第一对sum的就是最小的一对。

63840

S的两个数字VSs的连续正数序列

题目:输入一个递增排序的数组一个数字s,在数组中查找两个数,使得它们的正好是s。如果有多对数字等于s,输出任意一对即可。 例如输入数组1、2、4、7、11、15和数字15。...首先定义两个指针,第一个指针指向数组的第一个(也就是最小的)数字,第二个指针指向数组的最后一个(也就是最大的)数字。...当两个数字大于输入的数字时,把较大的数字往前移动;当两个数字小于数字时,把较小的数字往后移动;当相等时,打完收工。这样扫描的顺序是从数组的两端向数组的中间扫描。...<<endl; return 0; } 题目:输入一个正数S,打印出所有S的连续正数序列(至少有两个数)。...如果从small到big的序列的小于S,可以增大big,让这个序列包含更多的数字。因为这个序列至少要有两个数字,我们一直增加small到(1+S)/2为止。

63850

【剑指offer:s的两个数字】双指针

题目描述:输入一个递增排序的数组一个数字 s,在数组中查找两个数,使得它们的正好是 s。如果有多对数字等于 s,则输出任意一对即可。...示例: 输入:nums = [2,7,11,15], target = 9 输出:[2,7] 或者 [7,2] 解法:双指针 准备两个指针,left 指向数组开始,right 指向数组结尾 如果 nums...[left] 与 nums[right] 的等于 target,那么返回 nums[left] nums[right] 如果 nums[left] 与 nums[right] 的大于 target...,那么说明应该缩小,所有 right 指针右移 如果 nums[left] 与 nums[right] 的小于 target,那么说明应该扩大和,所有 left 指针左移 其实整个过程就是两个指针,...根据所指向的数的的大小,来不断向中间移动查找的过程。

32720
领券