题目如下:

看到了一个巧妙的解法 时间复杂度小于 O(n2)

class Solution {public int[] twoSum(int[] nums, int target) {int[] arr=new int[2];HashMap<Integer,Integer> hashMap=new HashMap<Integer,Integer>();//遍历每个数for (int i = 0; i < nums.length; i++) {//hashmap里都是互补的数,所以只要有一个数等于hashmap里的数就可以输出结果(因为只让输出一种结果)if(hashMap.containsKey(nums[i])){arr[1]=i;arr[0]=hashMap.get(nums[i]);return arr;}//用target减去当前的数,然后把减去后的数存入hashmaphashMap.put(target-nums[i],i);}return arr;}
}

那么我们将题目改一下,给的数组中的数都是有序的,那我们该怎么解呢?

第一种解法: hashmap
跟上面的一样,只不过效率较低

class Solution {public int[] twoSum(int[] numbers, int target) {HashMap<Integer,Integer> hashMap=new HashMap<>();//遍历数组的每个数,不满足条件存进hashmap,满足条件输出for(int i=0;i<numbers.length;i++){if(hashMap.containsKey(numbers[i])) {int a=hashMap.get(numbers[i]);int b=i;return new int[]{a,b};}hashMap.put(target-numbers[i],i);}return new int[0];}
}

第二种解法:首位双指针,时间复杂度更低

解法来自评论区

由于数组递增的特性,所以后面的元素比前面的元素大
可以安排两个指针i,j在两头,记录两个指针的和

    如果和大于target则代表需要缩小指针和,即需要右移j,来缩小指针和如果和小于target则代表需要增大指针和,即需要左移i,来增大指针和
class Solution {public int[] twoSum(int[] nums, int t) {int len = nums.length-1;for(int i = 0, j = len; i < j;){int sum = nums[i] + nums[j];if(sum > t) j--;else if(sum < t) i++;else return new int[]{i,j};  }return new int[2];}
}

总之,遇到有序,第一反应 二分和双指针

两数相加(有序/无序) 时间复杂度小于 O(n2)做题心得相关推荐

  1. 数组中两个数的最大异或值 两数异或值一定小于两数相加和

    链接:数组中两个数的最大异或值 给你一个整数数组 nums ,返回 nums[i] XOR nums[j] 的最大运算结果,其中 0 ≤ i ≤ j < n . 进阶:你可以在 O(n) 的时间 ...

  2. 【前端来刷LeetCode】两数之和与两数相加

    大部分玩前端的小伙伴,在算法上都相对要薄弱些,毕竟调样式.调兼容就够掉头发的了,哪还有多余的头发再去折腾. 确实在前端中需要使用到算法的地方是比较少,但若要往高级方向发展,算法的基本功就非常重要啦.对 ...

  3. 计算机组成原理两数相加指令,计算机组成原理复习题

    27. 一个16K×32位的存储器,其地址线和数据线的总和是 . A.48 B.46 C.36 答案:B 28.由于磁盘上的内部同心圆小于外部同心圆,则对其所存储的数据量而言, . A.内部同心圆大于 ...

  4. 两数之和,两数相加(leetcode)

    我们都知道算法是程序员成长重要的一环,怎么才能提高算法呢, 出来在网上看视频之外,动手练习是非常重要的.leetcode 就是一个非常好的锻炼平台. 1. 两数之和,在 leetcode 里面是属于 ...

  5. LeetCode:2. 两数相加(中等)

    2. 两数相加(中等) 题目: 解题思路: 源码: 踩坑点: 题目: 解题思路: 把俩个链表对应位相加,如果大于等于10,对10取余,小于10,直接得到这一位 解题过程存在这样几个问题: 1.进行循环 ...

  6. 【LeetCode】【HOT 100】2. 两数相加

    [LeetCode][HOT 100]2. 两数相加 文章目录 [LeetCode][HOT 100]2. 两数相加 package hot;import java.util.Arrays;class ...

  7. leetcode链表中的两数相加问题

    2. 两数相加 找出两个链表中较长的链表,原地修改后,作为最后的返回结果 两个链表从前往后遍历,考虑进位,直到短链表结束. 将长链表数值放入结果(考虑进位). 考虑是否需要额外增加一个结点来放进位 c ...

  8. 2022-6-13 全O(1)的数据结构,两数相加,无重复字符的最长子串,寻找两个正序数组的中位数,盛最多水的容器,......

    1. 全 O(1) 的数据结构 Design a data structure to store the strings' count with the ability to return the s ...

  9. day02_LettCode 两数相加 / 无重复字符的最长子串

    day02 2. 两数相加 3. 无重复字符的最长子串 2. 两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 ...

  10. 两数相加——哈希表算法

    力扣刷题总结 一.前言 二.两数相加 1.题意 2.示例 3.题目解析 4.官方题解 思路分析 哈希表算法的优势: 思路及算法: 代码分析 C语言代码实现及详细注释说明: python代码实现及详细注 ...

最新文章

  1. 快速理解平衡二叉树、B-tree、B+tree、B*tree
  2. 最佳实践 | 中文文案排版指北
  3. 理解ResNet结构与TensorFlow代码分析
  4. redis 同步化操作
  5. 雅虎开源可以提升流操作速度的DataSketches
  6. 解决SVN:E210007无法协商认证机制
  7. Springboot 2.0.0单元测试
  8. python 除数总是提示为0_python负数求余不正确?——取模 VS 取余
  9. Qt工作笔记-使用QFileSystemWatcher监控文件是否改变
  10. Centos如何使用SSH远程连接主机
  11. Date跟String类型之间的转换!
  12. 自动驾驶算法-滤波器系列(四)——不同运动模型在KF/EKF中的应用
  13. 三角形一点到三边距离最小_三角形内有没有一个点到三边距离之和最小 -
  14. Access to the path Library\UnityAssemblies\UnityEngine.xml is denied.
  15. w10计算机用户名密码忘了,一招简单帮你解决win10系统电脑忘记开机密码
  16. python动态规划爬楼梯_Python走楼梯问题解决方法示例
  17. 哈罗单车再获10亿融资,摩拜、ofo难合并!
  18. 拼多多校招内推编程题1 最大乘积
  19. 2019年1月即将上映的热门电影推荐,赶快来先睹为快吧!
  20. 数据类型-浮点型(C语言)

热门文章

  1. gcf,gca,gco的区别
  2. SV宏定义中反斜杠(\),反引号(`),双反引号(``)的作用
  3. 银行核心业务系统性能测试方法
  4. C语言移动营业厅程序设计,【程序设计论文】C语言教学的移动应用程序设计(共2486字)...
  5. CS5211设计方案|替代CH7511B设计电路|EDP转LVDS转接板设计参考电路
  6. 计算机wordif函数,wordif函数怎么用
  7. 股票量化实盘交易接口如何做回测?
  8. Web渗透攻击实战(2)—获取网站后台登录用户名密码
  9. 【Windows】Windows10 企业版 LTSC/Windows Server 2019如何安装应用商店和UWP应用?
  10. 2013 EE 排名