DFS递归写法
Set<Node> visited = new HashSet<>();
public void dfs(Node root, Set<Node> visited) {
if (visited.contains(root)) {//terminator
// already visited
return;
}
visited.add(root);
// process current node here.
for (Node nextNode : node.children) {
if (!visited.contains(nextNode)) {
dfs(nextNode, visited);
}
}
}
DFS非递归写法
public int[] dfs(Node root){
if (root == null) {
return new int[0];
}
Set<Node> visited = new HashSet<>();
Stack<Node> stack = new Stack<>();
stack.push(root);
while (!stack.isEmpty()) {
Node node = stack.pop();
visited.add(node);
process (node);
List<Node> nodes = generate_related_nodes(node);
stack.addAll(nodes);
// other processing work
// ...
}
}
BFS代码模块
public void bfs(Node root) {
Set<Node> visited = new HashSet<>();
Queue<Node> queue = new ArrayQueue<>();
queue.offer(root);
visited.add(root);
while (!queue.isEmpty()) {
Node node = queue.poll();
visited.add(node);
process(node);
List<Node> nodes = generate_related_nodes(node);
queue.addAll(nodes);
}
// other processing work
// ...
}
Greedy 是一种在每一步选择都 采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。鼠目寸光,目光短浅
public int findIndexOf(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while (left <= right) {
int mid = left + ((right - left) >> 1);
if (nums[mid] == target) {
return mid;
} else if (nums[mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
使用二分查找,寻找一个半有序数组 [4, 5, 6, 7, 0, 1, 2] 中间无序的地方
说明:同学们可以将自己的思路、代码写在第 3 周的学习总结中时间有限,欢迎帮忙优化下
//查找一个半升序数组的中间无序下标(降序就翻转一下while里面的大于和小于符号)
public int searchMinValueIndex(int[] nums) {
//基准值,看mid索引的值小于基准值,大于基准点,说明mid左边是有序的,直接看mid右边,否则反之
int point = nums[0];
int i = 0;
int j = nums.length - 1;
while (i < j) {
int mid = i + (j - i) / 2;
//如果i + 1 = j,说明j的下标值就是最小值,
//但是还需要判断i j的 索引值,如果j值大于i值,说明这里就是无序点,返回j即可
if (i + 1 == j) {
if (nums[i] > nums[j]) {
return j;
}
//j 值不大于i 说明就是一个完全有序数组。反正0即可
return 0;
}
if (point > nums[mid]) {
j = mid;
} else {
i = mid;
}
}
return 0;
}
public static void main(String[] args) {
Assert.assertEquals(3, new Test().searchMinValueIndex(new int[]{7, 8, 9, 0, 1, 2, 3, 4, 5, 6}));
Assert.assertEquals(1, new Test().searchMinValueIndex(new int[]{9, 0, 1, 2, 3, 4, 5, 6, 7, 8}));
Assert.assertEquals(6, new Test().searchMinValueIndex(new int[]{4, 5, 6, 7, 8, 9, 0, 1, 2, 3}));
Assert.assertEquals(8, new Test().searchMinValueIndex(new int[]{2, 3, 4, 5, 6, 7, 8, 9, 0, 1}));
Assert.assertEquals(0, new Test().searchMinValueIndex(new int[]{1, 2, 3}));
}
因为时间关系。很多homework做得不好,希望有同学帮忙找出不好的地方,感谢!点击进入
因为时间关系。很多homework做得不好,希望有同学帮忙找出不好的地方,感谢!点击进入
因为时间关系。很多homework做得不好,希望有同学帮忙找出不好的地方,感谢!点击进入