主页

Leetcode —「动态规划」系列题解

组合数之和 IV Leetcode - 337 Combination Sum IV (Medium) 题目描述:从数组 nums 中选出和为 target 的数字组合,数字之间的顺序不同表示不同的组合。 nums = [1, 2, 3] target = 4 The possible combination ways are: (1, 1, 1, 1) (1, 1, 2) (1, ...

阅读更多

Leetcode —「树」系列题解

二叉树的遍历 先序遍历 Leetcode - 144 Binary Tree Preorder Traversal (Medium) 解法一:递归 public List<Integer> preorderTraversal(TreeNode root) { List<Integer> ansList = new ArrayList<Integer...

阅读更多

Leetcode —「搜索」系列题解

回溯 子集 Leetcode - 78 Subsets (Medium) 题目描述:给定一个不重复的整数数组,找出所有的子集。 Input: nums = [1,2,3] Output: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ] public List<List<Intege...

阅读更多

Leetcode —「双指针」系列题解

有序数组的两数之和 Leetcode - 167 Two Sum II - Input array is sorted (Easy) Input: nums = [2,7,11,15], target = 9 Output: [1,2] Explanation: The sum of 2 and 7 is 9. Therefore index1 = 1, index2 = 2. pu...

阅读更多

Leetcode —「数组」系列题解

多数元素 Leetcode - 169 Majority Element (Easy) 题目描述:找出数组中出现次数超过 ⌊ n/2 ⌋ 次的元素,假设这个元素一定存在。 Input: [3,2,3] Output: 3 解题思路:利用了摩尔投票算法的思想,每次从序列里选择两个不相同的数字删除掉(抵消),最后剩下一个数字或几个相同的数字,就是出现次数大于总数一半的那个。 publ...

阅读更多

Java 函数式编程

一、概述 函数式编程是种编程范式。与之相对的是命令是编程,来做一下对比你就可以更好的理解函数式编程了。 比如要计算 (1 + 2) * 3 – 4 的结果。 命令式编程 为了体现命令式和函数式的区别,所以使用下面这种方法: int a = 1 + 2; int b = a * 3; int c = b - 4; 函数式编程 subtract(multiply(add(1,2),...

阅读更多

《睡眠革命》

上一周觉得时间非常不够用,想要做的事情有好多好多,但是每天的时间只有这么一点,于是就想压缩自己的睡眠时间,结果因为睡眠时间太短,并且每天脑力和体力消耗很大,身体就变得很虚弱,还去校医院开了一些帮助睡眠的药。最后的结果就是发现,压缩什么也不能压缩休息的时间。 很早之前就被安利过这本书了,封面上的副标题也十分吸引我: 用更科学的睡眠方案,优化你的人生效率。 借此正好提取一下这本书里...

阅读更多

算法 — 复杂度基础

一、什么是算法复杂度? 算法进行计算的时候,存储数据需要占用一定的 空间,执行计算需要耗费一定的时间 时间。算法复杂度就是在算法计算过程中对「空间」与「时间」的评价。 解决同一个问题,不同算法所有的空间和时间是不同的,这取决于算法是如何设计的。同样,同一个问题,规模不同时,同一个算法所用的空间和时间也不同。 例如:某排序算法为 100 个数排序和为 1000 个数排序。 所以,一个算...

阅读更多