leetcode1. 两数之和

1.之前只知道桶排序那种标志数组,所以看到第一眼就想到那个方面去了。但在本题数组里面存储某个数出现的次数对该题是没有意义的,应该存储某个数出现的位置。
2.哈希表是优化遍历数组寻找某个数的很好方法,看情况需要改数的值还是位置决定其中的value是什么


class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums.length; i++) {map.put(nums[i], i);}for (int i = 0; i < nums.length; i++) {int left = target - nums[i];if (map.containsKey(left) && map.get(left) != i) {return new int[] { i, map.get(left) };}}return new int[] { -1, -1};}
}

167.两数之和 II - 输入有序数组

其实是比两数之和更容易的题,可以照搬两数之和的算法,但是没有利用其有序的条件。
所以利用双指针的方法,利用其有序的条件,只要数组有序,就应该想到双指针技巧。

对于双指针的应用环境的补充:
双指针技巧再分为两类,一类是「快慢指针」,一类是「左右指针」。
前者解决主要解决链表中的问题,比如典型的判定链表中是否包含环;
后者主要解决**数组(或者字符串)**中的问题,比如二分查找。
因为链表不能倒退而数组可以倒退,能倒退才使得前后指针有意义,不然就只能左右指针

class Solution {public int[] twoSum(int[] numbers, int target) {int st=0;int end=numbers.length-1;while(end>st){if(numbers[st]+numbers[end]==target)return new int[]{st+1,end+1};if(numbers[st]+numbers[end]>target)end--;if(numbers[st]+numbers[end]<target)st++;        }        return new int[] { -1, -1 };}
}

653.两数之和 IV - 输入 BST

不难,但是尽量利用BST的性质才能得到不错的复杂度。
之前两题的实验可知利用双指针会优于Hashmap,但是多了个条件,即需要数组有序,对于BST,进行中序遍历即可得到有序数组。再双指针即可

public class Solution {public boolean find(TreeNode root, int k) {List < Integer > list = new ArrayList();helper(root, list);int l = 0, r = list.size() - 1;while (l < r) {int sum = list.get(l) + list.get(r);if (sum == k)return true;if (sum < k)l++;elser--;}return false;}public void helper(TreeNode root, List < Integer > list) {if (root == null)return;helper(root.left, list);list.add(root.val);helper(root.right, list);}
}

从leetcode1. 两数之和循序渐进(双指针,BST,哈希表)相关推荐

  1. 算法训练Day6 | LeetCode:242. 有效的字母异位词(数组作哈希表);349. 两个数组的交集(Set作哈希表);202.快乐数 (Set作哈希表);1. 两数之和(Map作哈希表)

    目录 LeetCode242. 有效的字母异位词 方法:数组作哈希表 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 Leetcode349. 两个数组的交集 方法一:用Set作HashMa ...

  2. 【LeetCode笔记】1. 两数之和(JAVA、哈希表)

    文章目录 一. 题目描述 二. 解法 ① 暴力破解 ② 静态哈希表 1. 为什么用哈希表来做 2. 特殊情况:两数相同,map映射覆盖 ③ 动态哈希表 ④ 未解之谜 诶嘿,经典开头题目 一. 题目描述 ...

  3. 【每日一算法】两数之和 IV - 输入 BST

    微信改版,加星标不迷路! 每日一算法-两数之和IV-输入BST 作者:阿广 阅读目录 1 题目 2 解析 1 题目 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目 ...

  4. LeetCode1. 两数之和

    LeetCode1. 两数之和 1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应 ...

  5. LeetCode1.两数之和

    LeetCode1.两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你 ...

  6. 【手把手带你刷好题】—— 43.满足条件的两数之和(双指针、非力扣)

    [前言] 今天是刷题打卡第43天! 不好意思哈铁汁们,最近这几周要准备考试,博文更新的可能会不及时,但是一有时间笔者都会补上的哦,抱歉哈. 原题:满足条件的两数之和(双指针) 题目描述: 给定一个有序 ...

  7. 两数之和 IV - 输入 BST

    两数之和 IV - 输入 BST 题目 两数之和 IV - 输入 BST(力扣:653) 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true. ...

  8. LeetCode1——两数之和

    最近在家拧三阶魔方,把初级的玩法掌握了,也就是可以还原六个面了,速度不快,但是也很兴奋.三阶魔方的初级玩法按照套路拧就可以了,每一步需要完成的任务,该步骤转动的方法基本都是固定的,而且变化也并不是特别 ...

  9. LeetCode简单题之两数之和 IV - 输入 BST

    题目 给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true. 示例 1: 输入: root = [5,3,6,2,4,null, ...

最新文章

  1. R语言ggplot2可视化使用不连续的y轴、中断的Y轴来可视化数值分布差异很大的数据实战:把数据轴分为两个区间或者多个区间来匹配不同区间数据的可视化(因为有的数据可能10附近,有的数值可能1W附近)
  2. 日本搞出奇妙充电屋,坐在任意位置都能隔空充电!研究登上Nature子刊
  3. linkstack头文件 c语言,链式栈的基本操作——LinkStack(C语言版)
  4. tomcat日志切割-logrotate
  5. 80070583类不存在_结合JVM源码谈Java类加载器
  6. ssl提高组周三备考赛【2018.10.17】
  7. 以太坊区块链 JSON-RPC
  8. Basic Calculator II
  9. 手机游戏量产引擎研发手记-导读
  10. python爬取论坛帖子_python爬虫爬取虎扑论坛的帖子名称和链接,为什么只能爬10页就报...
  11. 数字校园APP——可行性报告分析
  12. 自定义元素探秘及构建可复用组件最佳实践 1
  13. 鸿蒙系统可以安装teams吗,鸿蒙致命弱点被曝光!不能装这个软件,80%用户将望而却步!...
  14. 总结: C++ 中如何把输出结果写入到文件中
  15. C#基础-获得当前程序的 空间名.类名.方法名
  16. php while循环语句格式,PHP while 循环
  17. 如何单独编译Linux源代码中的驱动模块,比如NVMe驱动?
  18. 使用POI创建PPT
  19. 你的短信接口真的安全吗?
  20. python colormap jet_Opencv:Jetmap或colormap到灰度,反转applyColorMap()

热门文章

  1. C++版本OpenCv教程(四十三)直线拟合
  2. 万代南梦宫假面骑士时尚品牌HENSHIN by KAMEN RIDER首登中国;安宏资本宣布与资生堂达成协议 | 知消...
  3. 如何用UE4制作2D游戏文档(一)——基础篇
  4. Python递归实现①把嵌套列表压平为一层列表②返回嵌套列表中某元素出现的个数③返回第n个斐波那契数
  5. 408,你可敬的对手!
  6. 转载李嘉诚先生曾经写的一首激励他的员工的诗,送给大家!
  7. AccountManager 数据库存储位置
  8. 心得体会day52(日撸 Java 三百行)
  9. 为新购Thinkpad T410打造Windows Server 2008工作环境
  10. 思科 计算机网络 第六章测试考试答案