深度优先搜索和广度优先搜索广泛运用于树和图中,但是它们的应用远远不止如此。
广度优先搜索一层一层地进行遍历,每层遍历都以上一层遍历的结果作为起点,遍历一个距离能访问到的所有节点。需要注意的是,遍历过的节点不能再次被遍历。
第一层:
第二层:
第三
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
题目描述:在有序数组中找出两个
题目:找到所有数组中消失的数字
给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。 找到所有在 [1, n] 范围之间没有出现在数组中的数字。
示例:
输入: [4,3,2,7,8,2,3,1] 输出: [5,6]
思考:
遍历数组,取数组中每个元素的绝对值-1(这里-1是因为数组下标从0开
题目:平方数之和
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a 的平方加 b 的平方等于 c 。
示例:
输入: 5 输出: True 解释: 1 * 1 + 2 * 2 = 5 输入: 3 输出: False
思考:
这题因为 a * a + b * b = c,所以 a < 根号c,b < 根号c。 所以可以用两个变量i = 0,j = 根号c, 当 i <= j 时,计算i * i + j * j 当结果小于c则i++,否则j--, 若结果等于c则返回true。
实现:
class Solution { public boolean judgeSquareSum(int c) { int i = 0; int j = (int) Math.sqrt(c); while (i <= j) { int num = i * i + j * j; if (num == c) { return true; } if (num < c) { i++; } else { j--; } } return false; } }