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

漫画:如何在数组中找到和为 “特定值” 的两个数?

我们来举个例子,给定下面这样一个整型数组(题目假定数组不存在重复元素): 我们随意选择一个特定值,比如13,要求找出两数之和等于13的全部组合。...由于12+1 = 13,6+7 = 13,所以最终的输出结果(输出的是下标)如下: 【1, 6】 【2, 7】 小灰想表达的思路,是直接遍历整个数组,每遍历到一个元素,就和其他元素相加,看看和是不是等于那个特定值...第1轮,用元素5和其他元素相加: 没有找到符合要求的两个元素。 第2轮,用元素12和其他元素相加: 发现12和1相加的结果是13,符合要求。 按照这个思路,一直遍历完整个数组。...在哈希表中查找7,查到了元素7的下标是7,所以元素6(下标是2)和元素7(下标是7)是一对结果: 按照这个思路,一直遍历完整个数组即可。...= i) { resultList.add(Arrays.asList(i,map.get(other))); //为防止找到重复的元素对

3.1K64

寻找和为定值的两个数

什么是散列 Hash一般翻译成散列,或哈希,就是把任意长度的输入(又叫做预映射)通过散列算法,变换成固定程度的输出,该输出就是散列值。...解题思路 知道上面的定义,让我们来看看解题思路,首先我们需要明确的是哈希表在进行查询的时候,时间复杂度为O(1)。...然后我们可以遍历我们的原始数组,进行查询比较。这里需要注意按照题目的要求已经遍历的不可以在进行遍历了,因此我们对已经遍历的需要进行标记。结合map我们可以用key所对应的value值进行判定。...完整代码 // 解法一:散列映射 func SelectNum(data []int, sum int) [][]int { // 构建一个空间为n的散列表即map,bool值用来标记是否已经被使用...Qiuck_Sort(data, 0, len(data)-1) // 定义两个前后指针指向数组的首和尾 begin, end := 0, len(data)-1 for begin < end

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

    寻找和为定值的两个数

    题目:输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。...解析:如果数组是无序的,先排序(n*logn),然后用两个指针i,j,各自指向数组的首尾两端,令i=0,j=n-1,然后i++,j--,逐次判断 a[i]+a[j]?...=sum,如果某一刻a[i]+a[j]>sum,则要想办法让sum的值减小,所以此刻i不动,j--,如果某一刻 a[i]+a[j]的值增大,所以此刻i++,j不动。...所以,数组无序的时候,时间复杂度最终为 O(n*logn+n)=O(n*logn),若原数组是有序的,则不需要事先的排序,直接O(n)搞定,且空间复杂度还是O(1),此思路是相对于上述 所有思路的一种改进...<<endl; 44 45 return 0; 46 } 寻找和为定值的多个数: 2010年中兴面试题编程求解:输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数,使其和等于

    1.1K70

    如何从有序数组中找到和为指定值的两个元素下标

    如何从有序数组中找到和为指定值的两个元素下标?...例如:{2, 7, 17, 26, 27, 31, 41, 42, 55, 80} target=72.求得值为17和55,对应下标为:2,8 思考下,只要将元素自己与后面的所有元素相加计算一下,就能找到对应的两个值...,但这种算法时间复杂度为O(n^2),需要优化一下....换个思路,在这个有序数组中,可以使用2个指针分别代表数组两侧的两个目标元素.从目标数组的两侧,向中间移动;当两个指针指向的元素计算值,比预定值target小了,那左侧指针右移下,重新计算;当计算值大于target...时,右侧指针左移下,直到两个元素和与target相等.这种方法叫做搜索空间缩减,这也是这道题的关注点.这种方法的时间复杂度只有O(2*n)(非严谨说法),是非常高效的一种方法了.

    2.3K20

    关于数组合并及对象去重的问题

    写这篇文章是源于群内的朋友的问题,今天早上,像往常一样摸鱼,发现一个妹子发群里问了一个问题。 事情的经过大概是这样的 ?...image.png 总的来说就是后端给他返回了一个对象,对象内有2个数组,2个数组中的内容不一样,但是有相同的id,他需要把们合并到一个数组中,并且保留不重复的属性 简单的模拟一下妹子的数据结构,外层对象就不写了...name:"bbb",time:"201900",c:'333'}, {id:3,name:"ccc"}, {id:4,time:"201011"}, ] 好了开始处理问题,其中使用到了数组的一些方法...concat,push,filter,和for...of方法遍历对象 处理代码如下 const OrderNoList=[ {id:1,name:"aaa",}, {id:2,name:...最后得到了一个赞 不过还是希望更好一点的解法,哈哈哈 ?

    1.2K31

    通过canvas计算任意两个颜色的插值

    计算任意两个颜色的插值 实际应用中通常要计算两个颜色的之间插值结果,比如计算“red”和“green” 之间的插值。...比较通用的方法就是首先通过《通过canvas转换颜色为RGBA格式及性能问题》中提到的方法把颜色转换成RGBA格式,由于RGBA格式是都是数字的形式,可以直接进行插值运算。...); 除此之外,还可以通过canvas的线性渐变来计算两个颜色之间的插值。...得宽度为100(根据渐变得精细度可以调整),高度为1 然后创建一个线性渐变对象,线性渐得尺寸和canvas尺寸保持一致,通过addColorStop添加颜色点,stop为0的时候添加第一种颜色,stop...插值计算出插值颜色所在的位置,通过canvas的getImageData方法获取。

    1K30

    Go 语言面向对象教程 —— 通过组合实现类的继承

    Go 语言不是像 PHP 等传统面向编程实现那样通过 extends 关键字来显式定义子类与父类之间的继承关系,而是通过组合方式实现类似功能,显式定义继承关系的弊端有两个:一个是导致类的层级复杂,另一个是影响了类的扩展性...,设计模式里面推荐的也是通过组合来替代继承提高类的扩展性。...,我们不用考虑单继承还是多继承,你想要复用哪个类型的方法,直接组合进来就好了(需要注意组合的类型中包含同名方法,如果子类没有重写,调用的时候会报错),另外,我们可以通过任意调整被组合类型位置改变类的内存布局...:", dog.FavorFood()) 结构体是值类型,如果传入值字面量的话,实际上传入的是结构体值的副本,对内存耗费更大,所以传入指针性能更好。...最后,Go 语言没有类似 PHP 的 parent 关键字,我们可以把组合进来的类型当做子类的一个匿名字段,直接通过引用类型名调用父类被重写的方法或属性: fmt.Println(dog.Animal.name

    1.1K30

    LeetCode - #4 求两个有序数组的中间值

    微博:@故胤道长[1])的 Swift 算法题题解整理为文字版以方便大家学习与阅读。...难度水平:困难 描述 已知两个有序数组 nums1 和 nums2,他们的数据长度分别是 n 和 m,将两个数组合并成一个新数组,返回新数组的中间值。...整体的运行时间复杂度应该是 O(log (m+n)) 示例 示例 1 输入:nums1 = [1,3], nums2 = [2] 输出:2.00000 说明:合并后的新数组为 [1,2,3],中间值为...2 示例 2 输入:nums1 = [1,2], nums2 = [3,4] 输出:2.50000 说明:合并后的新数组为 [1,2,3,4],中间值为 (2 + 3) / 2 = 2.5 示例 3...1, ..., mid2 - 1] | nums2[mid2, mid2 + 1, ..., n] 数组分后的左右部分要确保: 左数 = 右数 左边的最大值 的最小值 前往 LeetCode

    68820
    领券