
java学习
java学习过程中的小问题~~
让我来记录我的学习过程吧~~
sunlili_yt
这个作者很懒,什么都没留下…
展开
-
如何判定一个问题能否用贪心算法
如果无法举出反例,如何证明贪心算法的正确性?数学归纳法由n推到n+1反证法,假设不正确推导矛盾给定一组区间,保证区间不重复个数最多。解:按照区间结尾排序,每次选择结尾最早的,且和前一个区间不重叠的区间。某次选择的是si,fi,其中fi是当前所有选择中结尾最早的假设不是最优的。也就是说,如果这个问题的最优解为k,则这个选择得到的解最多为k-1.假设最优解在这一步选择sj,fj,fj&g...原创 2020-09-13 09:20:05 · 786 阅读 · 0 评论 -
Java——贪心算法与动态规划之间的关系(Leecode435)
问题等价于:给定一组区间,问最多保留多少个区间,可以让这些区间之间互相不重叠。暴力解法:找出所有子区间的组合,之后判断是否重叠O((2^n)*n)先要排序,方便判断是否重叠。按照开始位置排序。动态规划类比于:最长上升子序列贪心算法按照区间的结尾排序。每次选择结尾最早的(留给后面的空间就越大),且和前一个区间不重叠的区间...原创 2020-09-13 09:19:43 · 211 阅读 · 0 评论 -
如何判定一个问题能否用贪心算法
如果无法举出反例,如何证明贪心算法的正确性?数学归纳法由n推到n+1反证法,假设不正确推导矛盾给定一组区间,保证区间不重复个数最多。解:按照区间结尾排序,每次选择结尾最早的,且和前一个区间不重叠的区间。某次选择的是si,fi,其中fi是当前所有选择中结尾最早的假设不是最优的。也就是说,如果这个问题的最优解为k,则这个选择得到的解最多为k-1.假设最优解在这一步选择sj,fj,fj&g...原创 2020-09-13 09:19:37 · 1036 阅读 · 0 评论 -
动态规划概念理解——以爬楼梯问题为例
之前我们介绍了爬楼梯问题的解决思路,今天我们通过爬楼梯的不同解决思路总结一下什么叫做动态规划:前文分析得到,爬楼梯问题实际上类似于斐波那契数列,只是递归终止条件不同,最容易想到的递归实现方式:public int climbStairs(int n) { if(n==1) return 1; if(n==2) return 2; return c...原创 2020-06-27 08:26:46 · 444 阅读 · 0 评论 -
Java——二叉搜索树(Leecode235/98/450/108/230/236)
Leecodde235 二叉搜索树的最近公共祖先class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(root == null) return null; TreeNode re_node = null; ...原创 2020-04-16 19:53:59 · 208 阅读 · 0 评论 -
Java——二叉搜索树(查找、插入、删除)
二叉搜索树是一种特殊的二叉树,保证了左子树的所有数据都小于根节点,右子树的所有数据都大于根节点,是比较常用的一种数据结构。类似于下图:既然是一种特殊的二叉树,那么二叉树的一些性质都适用,但由于其数据的特殊性,经常会用于求最大值、最小值、上界、下界、第k个元素或者元素i所在的位置,复杂的题目练习下一篇文章中将介绍。那么先对二叉搜索树的简单操作进行回顾:(一)建立上图的搜索二叉树public...原创 2020-04-09 21:23:26 · 283 阅读 · 0 评论 -
Java——二叉树递归遍历练习(复杂逻辑Leecode257/113/129)
这一篇将介绍一些相对复杂的二叉树递归遍历逻辑,相对于上一篇较难。但是如果很好地理解了递归遍历的思想,也很容易找到解题思路。Leecode257 找出二叉树的所有路径1.判断递归结束条件:当节点为叶子结点,就可以返回该节点值对应的String集合。否则一直递归调用。2.递归查找左子树的子路径,当前节点连接左子树中所有子路径,就是当前节点所有路径。3.递归查找右子树的子路径,当前节点连接右子...原创 2020-04-09 15:49:00 · 251 阅读 · 0 评论 -
Java——二叉树递归遍历综合练习(Leecode104/111/226/100/101/222/110/112/404)
简单回顾二叉树的递归遍历应用今天我们来一起来看一下二叉树的的递归遍历以及其他的相关应用。首先回顾一下二叉树的前序遍历。public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }Class Solution{ List&l...原创 2020-04-07 15:49:47 · 305 阅读 · 0 评论 -
Java——二叉树非递归遍历方式(Leecode144/94/145)
(一)了解递归实现前序遍历的底层原理对于二叉树最经典的就是前中后序遍历的递归实现。以前序遍历为例,宏观来看,只要当前节点不为空,就将当前节点存入list,遍历左子树遍历右子树。最终即可完成整棵树的遍历。通过java代码实现一棵二叉树的遍历,代码如下:public class TreeNode { int val; TreeNode left; TreeNode ...原创 2020-04-07 15:48:56 · 167 阅读 · 0 评论 -
Leecode23_合并K个排序链表_PriorityQueue_两两merge_暴力
思路一:暴力法解决1.先将数组中所有的list中的节点全部转存到ArrayList中2.通过Collections.sort对数组中的元素进行排序3.根据数组中元素个数,边遍历边重新生成ListNode第一步遍历时间复杂度O(n),空间复杂度O(n)第二步进行排序时间复杂度O(nlogn),空间复杂度取决于算法选择第三步遍历生成ListNode时间复杂度O(n),空间复杂度O(n)...原创 2020-04-03 15:19:34 · 169 阅读 · 0 评论 -
leecode347_出现频率前k高的元素_Map+PriorityQueue
public List<Integer> topKFrequent(int[] nums, int k) { List<Integer> list = new ArrayList<Integer>(); Map<Integer,Integer> map = new HashMap<Integer,Integer>(); ...原创 2020-04-03 10:50:53 · 148 阅读 · 0 评论 -
Java——Map比较器
一、未指定排序方式时HashMap通过计算存入键值对的Key值进行排序HashTree通过对存入的键值对的Key值进行升序排序public static void main(String[] args){ Map<String,Integer> map = new HashMap<String, Integer>(); System.out.print...原创 2020-04-02 20:22:33 · 1210 阅读 · 0 评论 -
Java——Map分类及三种遍历方式
在了解Map之前先看一下java的集合框架Collection、List、Set都是接口,不能直接实例化。List:可存在重复元素,直接迭代结果与插入顺序相同;Set:不存在重复元素(若插入重复元素,则覆盖原来的值),插入后内部排序与插入顺序不同;Map:键值对,<key,value>存入相同的key会覆盖原来的键值对;对于Map而言分为HashMap、TreeMap、Li...原创 2020-04-02 14:35:56 · 312 阅读 · 0 评论 -
StringBuffer添加字符与""+字符的区别
对于相同级别的数据进行运算其他代码都相同,只是在串接字符的时候使用的方法不同,造成一个超出时间范围,一个可以成功运行。这是为什么?原创 2019-12-19 20:08:06 · 756 阅读 · 0 评论