摘要: 所有笔记内容基于教材《Java语言程序设计与数据结构(进阶篇)》 19.2 19.3 定义泛型类/接口。直接在类名后面加<E>即可。如果有多个参数,需逗号分隔,如:<E1, E2, E3>等。 没有<E> 阅读全文
posted @ 2019-10-06 07:57 末夏始秋 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 代码 java public class Solution { public boolean duplicate(int numbers[],int length,int [] duplication) { duplication[0] = 1; if (numbers == null) { ret 阅读全文
posted @ 2019-10-06 07:32 末夏始秋 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 题目: 本质上就是dp里的找零或者解方程问题。 思路: dp。 代码: 注意事项: 1.初始化,opt[0] = 1; 2.避免数组越界。由于i - nums[j]作为下标,所以需要判断。 阅读全文
posted @ 2019-05-29 22:58 末夏始秋 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 题意: 在1的基础上,猜错一次罚款对应的钱数,问最少需要多少钱保证一定能猜对。 思路: 直觉告诉我们可以用dp。但这题难在如何理解需要dp的变量以及dp的方程式怎么写。 dp的作用是遍历所有可能的情况并选出最优的情况。考虑的关键是如何把原问题分解成子问题。 注意到在原问题里,我们是在1~n的区间里猜 阅读全文
posted @ 2019-05-28 21:45 末夏始秋 阅读(520) 评论(0) 推荐(0) 编辑
摘要: 思路:二分查找。 需要注意的一个地方: 1. mid的写法。如果按照旧的写法,low + high有可能溢出(虽然可以用long解决)。这里学习到了mid的新写法: mid = low + (high - low) / 2; 两种写法效果一样。以后就按新的来写了。 阅读全文
posted @ 2019-05-27 10:41 末夏始秋 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 题意: 判断一个字符串是否可以分割成若干个子串(单词),使得每个单词都可以在字符串列表(词典)中找到。 思路一: 回溯(递归)。一开始想到的解法(可能也是因为最近类似解法的题做的有点多),非常简单直观,但是效率低,超时。 思路二: dp(动态规划)。为了重复利用递归过程中的一些结果,提高效率,所以改 阅读全文
posted @ 2019-04-22 06:38 末夏始秋 阅读(671) 评论(0) 推荐(0) 编辑
摘要: 题目: 就是层次遍历分层输出的变种,左右来回倒。有了leetcode 199的经验,做这题完全不在话下。但实际写的时候,还是遇到了些问题,说明对199的代码没有理解透彻。 问题总结如下: 1. 对于根节点的处理,只需要将根节点加入队列初始化即可。无需记录并添加到结果列表里,因为后面while循环里会 阅读全文
posted @ 2019-04-20 13:06 末夏始秋 阅读(283) 评论(0) 推荐(0) 编辑
摘要: 这题如果如果开挂的话, 可以直接用BigInteger类。 思路 用了三个辅助方法: 1. 大数相加。(顺带实现的,毕竟乘法的过程中需要用到加法) 2. 大数 * 一位数字 (很基础的步骤,列竖式的时候用到) 3. 去除结果的前导0。(很容易忽略,如0 * 123 结果会是 000,正确的结果应该是 阅读全文
posted @ 2019-04-18 07:31 末夏始秋 阅读(338) 评论(0) 推荐(0) 编辑
摘要: 思路: 和基础版的全排列很像。关键在于:需要判断同样值的元素在当次递归的for循环中是否已经处理过,如果已经处理过,则忽略。这里选择用map来记录。 其他的没什么好说的,都是模式化的东西。 阅读全文
posted @ 2019-04-18 07:20 末夏始秋 阅读(558) 评论(0) 推荐(0) 编辑
摘要: 题目: 求按字典序生成的第k个排列。 思路一: 先生成所有全排列,然后按字典序排序,取第k个即可。事实证明完全不行,超时。 思路二: 康托展开的逆运算。关于康托展开的有关内容,参考这位兄弟的博客。(n年前本科的时候似乎上课讲过。。。)思路还是比较简单的,如果比较熟悉的话。 阅读全文
posted @ 2019-04-16 08:14 末夏始秋 阅读(373) 评论(0) 推荐(0) 编辑