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

剑指offer 和为S的两个数字

题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。...解题思路 先找到1/2S的值所在的位置pivot,从这个位置开始往左右两边遍历,设置两个指针i和j,I指向pivot的位置,j往右遍历,一旦array[i]+array[j]>S ,则进入下一轮,i往左移一位...右边的数字进行组合 for (int i = pivotindex; i >= 0; i--) { for (int j = pivotindex...i] + array[j]) > sum) { break; } } } //如果有多对数字的和等于...S,就选乘积最小的 if (temp.size() >= 2) { int min = temp[0][0] * temp[0][1];

24910

LeetCode68|和为s的两个数字

1,问题简述 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。 如果有多对数字的和等于s,则输出任意一对即可。...2,示例 示例 1: 输入:nums = [2,7,11,15], target = 9 输出:[2,7] 或者 [7,2] 示例 2: 输入:nums = [10,26,30,31,47,60],...target = 40 输出:[10,30] 或者 [30,10] 限制: 1 10^5 1 10^6 3,题解思路 双指针的使用...[]{-1, -1}; } } 5,题解程序图片版 6,总结 双指针的使用,最近一段时间的输出文章都是自己之前做过的内容,自己打算将做过的题都整理成一篇篇文章进行梳理一下,喜欢看java的文章可以查看历史记录...,本人写过Mybatis框架的系列文章,包括简单的增删改查,高级用法,都是工作中常用的,JDK源码也写了十几篇,MySQL文系列文章等都可以在历史文章进行查找的。

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

    剑指Offer-和为S的两个数字

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

    65440

    【剑指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 指针左移 其实整个过程就是两个指针,...根据所指向的数的和的大小,来不断向中间移动查找的过程。

    33820

    剑指Offer(四十二)-- 和为S的两个数字

    题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 返回值描述: 对应每个测试案例,输出两个数,小的先输出。...输入 [1,2,4,7,11,15],15 返回值 [4,11] 暴力遍历 直接遍历每两个数,查看其和是否符合等于sum,再计算其乘积,是否小于之前的乘积,如果小于,则更新。...import java.util.ArrayList; public ArrayList FindNumbersWithSum(int[] array, int sum) {...} } } return results; } 时间复杂度:O(n2) 空间复杂度:O(n) 使用hashSet 针对每一个数字...a,都查看hashset中是否存在sum-a,同时把该数字添加到set中。

    24920

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

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

    67520

    和为S的两个数字

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

    27620

    和为S的两个数字VS和为s的连续正数序列

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

    65550

    和为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,a和b越远乘积越小,因为数组是递增排序,所以一头一尾两个指针往内靠近的方法找到的就是乘积最小的情况。

    47220
    领券