深度优先搜索和广度优先搜索广泛运用于树和图中,但是它们的应用远远不止如此。
广度优先搜索一层一层地进行遍历,每层遍历都以上一层遍历的结果作为起点,遍历一个距离能访问到的所有节点。需要注意的是,遍历过的节点不能再次被遍历。
第一层:
第二层:
第三
241. Different Ways to Add Parentheses (Medium)
Input: "2-1-1". ((2-1)-1) = 0 (2-(1-1)) = 2 Output : [0, 2]
public List<Integer> diffWaysToCompute(String input) { List<Intege
正常实现
Input : [1,2,3,4,5] key : 3 return the index : 2
public int binarySearch(int[] nums, int key) { int l = 0, h = nums.length - 1; while (l <= h) { int m = l + (h - l) / 2;
保证每次操作都是局部最优的,并且最后得到的结果是全局最优的。
Input: [1,2], [1,2,3] Output: 2 Explanation: You have 2 children and 3 cookies. The greed factors of 2 children are 1, 2.
双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。
Leetcode :167. Two Sum II - Input array is sorted (Easy)
Input: numbers={2, 7, 11, 15}, target=9 Output: index1=1, index2=2
题目描述:在有序数组中找出两个
把 n 个骰子仍在地上,求点数和为 s 的概率。
使用一个二维数组 dp 存储点数出现的次数,其中 dp[i][j] 表示前 i 个骰子产生点数 j 的次数。
空间复杂度:O(N2)
public List<Map.Entry<Integer, Double>> dic
在一个字符串中找到第一个只出现一次的字符,并返回它的位置。
Input: abacc Output: b
最直观的解法是使用 HashMap 对出现次数进行统计,但是考虑到要统计的字符范围有限,因此可以使用整型数组代替 HashMap,从而将空间复杂度由 O(N) 降低为 O(1)。
pub
快速排序的 partition() 方法,会返回一个整数 j 使得 a[l..j-1] 小于等于 a[j],且 a[j+1..h] 大于等于 a[j],此时 a[j] 就是数组的第 j 大元素。可以利用这个特性找出数组的第 K 个元
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的 min 函数。
private Stack<Integer> dataStack = new Stack<>(); private Stack<Integer> minStack = new Stack<>(); public void