从leetcode1. 两数之和循序渐进(双指针,BST,哈希表)
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,哈希表)相关推荐
- 算法训练Day6 | LeetCode:242. 有效的字母异位词(数组作哈希表);349. 两个数组的交集(Set作哈希表);202.快乐数 (Set作哈希表);1. 两数之和(Map作哈希表)
目录 LeetCode242. 有效的字母异位词 方法:数组作哈希表 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 Leetcode349. 两个数组的交集 方法一:用Set作HashMa ...
- 【LeetCode笔记】1. 两数之和(JAVA、哈希表)
文章目录 一. 题目描述 二. 解法 ① 暴力破解 ② 静态哈希表 1. 为什么用哈希表来做 2. 特殊情况:两数相同,map映射覆盖 ③ 动态哈希表 ④ 未解之谜 诶嘿,经典开头题目 一. 题目描述 ...
- 【每日一算法】两数之和 IV - 输入 BST
微信改版,加星标不迷路! 每日一算法-两数之和IV-输入BST 作者:阿广 阅读目录 1 题目 2 解析 1 题目 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目 ...
- LeetCode1. 两数之和
LeetCode1. 两数之和 1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应 ...
- LeetCode1.两数之和
LeetCode1.两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你 ...
- 【手把手带你刷好题】—— 43.满足条件的两数之和(双指针、非力扣)
[前言] 今天是刷题打卡第43天! 不好意思哈铁汁们,最近这几周要准备考试,博文更新的可能会不及时,但是一有时间笔者都会补上的哦,抱歉哈. 原题:满足条件的两数之和(双指针) 题目描述: 给定一个有序 ...
- 两数之和 IV - 输入 BST
两数之和 IV - 输入 BST 题目 两数之和 IV - 输入 BST(力扣:653) 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true. ...
- LeetCode1——两数之和
最近在家拧三阶魔方,把初级的玩法掌握了,也就是可以还原六个面了,速度不快,但是也很兴奋.三阶魔方的初级玩法按照套路拧就可以了,每一步需要完成的任务,该步骤转动的方法基本都是固定的,而且变化也并不是特别 ...
- LeetCode简单题之两数之和 IV - 输入 BST
题目 给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true. 示例 1: 输入: root = [5,3,6,2,4,null, ...
最新文章
- R语言ggplot2可视化使用不连续的y轴、中断的Y轴来可视化数值分布差异很大的数据实战:把数据轴分为两个区间或者多个区间来匹配不同区间数据的可视化(因为有的数据可能10附近,有的数值可能1W附近)
- 日本搞出奇妙充电屋,坐在任意位置都能隔空充电!研究登上Nature子刊
- linkstack头文件 c语言,链式栈的基本操作——LinkStack(C语言版)
- tomcat日志切割-logrotate
- 80070583类不存在_结合JVM源码谈Java类加载器
- ssl提高组周三备考赛【2018.10.17】
- 以太坊区块链 JSON-RPC
- Basic Calculator II
- 手机游戏量产引擎研发手记-导读
- python爬取论坛帖子_python爬虫爬取虎扑论坛的帖子名称和链接,为什么只能爬10页就报...
- 数字校园APP——可行性报告分析
- 自定义元素探秘及构建可复用组件最佳实践 1
- 鸿蒙系统可以安装teams吗,鸿蒙致命弱点被曝光!不能装这个软件,80%用户将望而却步!...
- 总结: C++ 中如何把输出结果写入到文件中
- C#基础-获得当前程序的 空间名.类名.方法名
- php while循环语句格式,PHP while 循环
- 如何单独编译Linux源代码中的驱动模块,比如NVMe驱动?
- 使用POI创建PPT
- 你的短信接口真的安全吗?
- python colormap jet_Opencv:Jetmap或colormap到灰度,反转applyColorMap()
热门文章
- C++版本OpenCv教程(四十三)直线拟合
- 万代南梦宫假面骑士时尚品牌HENSHIN by KAMEN RIDER首登中国;安宏资本宣布与资生堂达成协议 | 知消...
- 如何用UE4制作2D游戏文档(一)——基础篇
- Python递归实现①把嵌套列表压平为一层列表②返回嵌套列表中某元素出现的个数③返回第n个斐波那契数
- 408,你可敬的对手!
- 转载李嘉诚先生曾经写的一首激励他的员工的诗,送给大家!
- AccountManager 数据库存储位置
- 心得体会day52(日撸 Java 三百行)
- 为新购Thinkpad T410打造Windows Server 2008工作环境
- 思科 计算机网络 第六章测试考试答案