当青训营遇上码上掘金
主题三:
这段代码是一个用 Java 语言实现的广度优先搜索(BFS)算法,用于求出从数字 n 开始到达数字 k 所需的最少步数。该代码读入两个整数 n 和 k,并输出从 n 开始到达 k 所需的最少步数。
主函数 bfs 实现了 BFS 算法。它使用队列来记录待处理的节点,使用数组 visited 记录已经访问过的节点。该算法从将初始节点 n 添加到队列并将其标记为已访问。然后算法进入一个循环,该循环在队列为空时终止。在每次循环中,函数从队列的首位取出一个节点,并检查它是否是目标节点 k。如果是,则函数返回循环的次数,表示到达 k 所需的最少步数。
如果当前节点不是目标节点,则函数通过减 1 和乘 2 生成两个新节点,并在它们在范围内(0 到 100000)且没有被访问过时将其添加到队列中。然后函数增加级别计数器,表示迄今为止已经进行的步数。
该代码使用 Java 的 LinkedList 类实现
import java.util.Queue;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int n =5;
int k = 15;
int result = bfs(n, k);
System.out.println(result);
}
public static int bfs(int n, int k) {
Queue<Integer> queue = new LinkedList<>();
boolean[] visited = new boolean[100001];
queue.offer(n);
visited[n] = true;
int level = 0;
while (!queue.isEmpty()) {
int size = queue.size();
for (int i = 0; i < size; i++) {
int node = queue.poll();
if (node == k) {
return level;
}
int next1 = node - 1;
int next2 = node * 2;
if (next1 >= 0 && !visited[next1]) {
queue.offer(next1);
visited[next1] = true;
}
if (next2 <= 100000 && !visited[next2]) {
queue.offer(next2);
visited[next2] = true;
}
}
level++;
}
return -1;
}
}
主题四: 这是一种双指针法,用于解决「接雨水」问题。
创作过程:
题目理解:首先要仔细理解题目,明确题目中的柱子和青豆的意思。
思考算法:找到能解决这个问题的算法。由于每个柱子的宽度都是1,因此可以使用双指针法。
实现算法:创建一个双指针算法,分别从两端开始,遍历整个数组。
测试代码:用多组数据测试代码,以确保代码的正确性。
public static void main(String[] args){
int[] height = {0,1,0,2,1,0,1,3,2,1,2,1};
int result = trap(height);
System.out.println(result);
}
static int trap(int[] height) {
int left = 0, right = height.length - 1;
int leftMax = 0, rightMax = 0;
int result = 0;
while (left < right) {
if (height[left] < height[right]) {
if (height[left] >= leftMax) {
leftMax = height[left];
} else {
result += leftMax - height[left];
}
left++;
} else {
if (height[right] >= rightMax) {
rightMax = height[right];
} else {
result += rightMax - height[right];
}
right--;
}
}
return result;
}
}
经验总结:
题目理解:在写代码前,需要对题目进行仔细的理解,以确保正确的实现。
双指针法:双指针法是一种常用的算法,可以在处理一些数组问题时很有用。
数组问题:很多数组问题都可以通过双指针法来解决,如果能够找到适用的算法,可以大大简化代码。
多测试:在写代码后,要用多组数据测试代码,以确保代码的正确性。