From 8f86603ea87b7d7a7e88af42b516fe0b34b6b395 Mon Sep 17 00:00:00 2001 From: algorithmzuo Date: Wed, 28 Dec 2022 22:37:50 +0800 Subject: [PATCH] modify code --- .../Code01_StampingTheGrid.java | 66 +++++++++++ .../Code02_ClearAndPresentDanger.java | 79 +++++++++++++ .../Code03_ShortestPathVisitingAllNodes.java | 99 ++++++++++++++++ .../Code04_AsFarFromLandAsPossible.java | 84 ++++++++++++++ .../class_2022_12_4_week/Code05_RaceCar.java | 107 ++++++++++++++++++ .../Code06_KSimilarStrings.java | 83 ++++++++++++++ .../算法和数据结构知识梳理.xmind | Bin 197599 -> 197588 bytes ...养的大厂算法面试题(正在直播) | 56 +++++++++ 8 files changed, 574 insertions(+) create mode 100644 算法周更班/class_2022_12_4_week/Code01_StampingTheGrid.java create mode 100644 算法周更班/class_2022_12_4_week/Code02_ClearAndPresentDanger.java create mode 100644 算法周更班/class_2022_12_4_week/Code03_ShortestPathVisitingAllNodes.java create mode 100644 算法周更班/class_2022_12_4_week/Code04_AsFarFromLandAsPossible.java create mode 100644 算法周更班/class_2022_12_4_week/Code05_RaceCar.java create mode 100644 算法周更班/class_2022_12_4_week/Code06_KSimilarStrings.java diff --git a/算法周更班/class_2022_12_4_week/Code01_StampingTheGrid.java b/算法周更班/class_2022_12_4_week/Code01_StampingTheGrid.java new file mode 100644 index 0000000..7d04324 --- /dev/null +++ b/算法周更班/class_2022_12_4_week/Code01_StampingTheGrid.java @@ -0,0 +1,66 @@ +package class_2022_12_4_week; + +// 给你一个 m x n 的二进制矩阵 grid +// 每个格子要么为 0 (空)要么为 1 (被占据) +// 给你邮票的尺寸为 stampHeight x stampWidth +// 我们想将邮票贴进二进制矩阵中,且满足以下 限制 和 要求 : +// 覆盖所有空格子,不覆盖任何被占据的格子 +// 可以放入任意数目的邮票,邮票可以相互有重叠部分 +// 邮票不允许旋转,邮票必须完全在矩阵内 +// 如果在满足上述要求的前提下,可以放入邮票,请返回 true ,否则返回 false +// 测试链接 : https://leetcode.cn/problems/stamping-the-grid/ +public class Code01_StampingTheGrid { + + public static boolean possibleToStamp(int[][] grid, int h, int w) { + int n = grid.length; + int m = grid[0].length; + // 左上累加和矩阵 + int[][] sum = new int[n + 1][m + 1]; + for (int i = 0; i < n; i++) { + for (int j = 0; j < m; j++) { + sum[i + 1][j + 1] = grid[i][j]; + } + } + build(sum); + int[][] diff = new int[n + 2][m + 2]; + for (int a = 1, c = a + h - 1; c <= n; a++, c++) { + for (int b = 1, d = b + w - 1; d <= m; b++, d++) { + if (empty(sum, a, b, c, d)) { + set(diff, a, b, c, d); + } + } + } + build(diff); + for (int i = 0; i < n; i++) { + for (int j = 0; j < m; j++) { + if (grid[i][j] == 0 && diff[i + 1][j + 1] == 0) { + return false; + } + } + } + return true; + } + + public static void build(int[][] m) { + for (int i = 1; i < m.length; i++) { + for (int j = 1; j < m[0].length; j++) { + m[i][j] += m[i - 1][j] + m[i][j - 1] - m[i - 1][j - 1]; + } + } + } + + public static boolean empty(int[][] sum, int a, int b, int c, int d) { + return sum[c][d] - sum[c][b - 1] - sum[a - 1][d] + sum[a - 1][b - 1] == 0; + } + + // (3,4) (8,9) + // 3,4 +1 + + public static void set(int[][] diff, int a, int b, int c, int d) { + diff[a][b] += 1; + diff[c + 1][d + 1] += 1; + diff[c + 1][b] -= 1; + diff[a][d + 1] -= 1; + } + +} diff --git a/算法周更班/class_2022_12_4_week/Code02_ClearAndPresentDanger.java b/算法周更班/class_2022_12_4_week/Code02_ClearAndPresentDanger.java new file mode 100644 index 0000000..cea79c2 --- /dev/null +++ b/算法周更班/class_2022_12_4_week/Code02_ClearAndPresentDanger.java @@ -0,0 +1,79 @@ +package class_2022_12_4_week; + +// Floyd算法解析 +// 本题测试链接 : https://www.luogu.com.cn/problem/P2910 +// 请同学们务必参考如下代码中关于输入、输出的处理 +// 这是输入输出处理效率很高的写法 +// 提交如下方法,把主类名改成Main,可以直接通过 +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.io.StreamTokenizer; + +public class Code02_ClearAndPresentDanger { + + public static int N = 100; + public static int M = 10000; + public static int[] path = new int[M]; + public static int[][] distance = new int[N][N]; + public static int n, m, ans; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StreamTokenizer in = new StreamTokenizer(br); + PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out)); + while (in.nextToken() != StreamTokenizer.TT_EOF) { + n = (int) in.nval; + in.nextToken(); + m = (int) in.nval; + for (int i = 0; i < m; i++) { + in.nextToken(); + path[i] = (int) in.nval - 1; + } + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + in.nextToken(); + distance[i][j] = (int) in.nval; + } + } + floyd(); + ans = 0; + for (int i = 1; i < m; i++) { + ans += distance[path[i - 1]][path[i]]; + } + out.println(ans); + out.flush(); + } + + } + + public static void floyd() { + // O(N^3)的过程 + // 枚举每个跳板 + // 注意! 跳板要最先枚举,然后是from和to + for (int jump = 0; jump < n; jump++) { // 中途! + for (int from = 0; from < n; from++) { // from + for (int to = 0; to < n; to++) { // to + if (distance[from][jump] != Integer.MAX_VALUE && distance[jump][to] != Integer.MAX_VALUE + && distance[from][to] > distance[from][jump] + distance[jump][to]) { + distance[from][to] = distance[from][jump] + distance[jump][to]; + } + } + } + } + // 如下这么写是错的 +// for (int from = 0; from < n; from++) { +// for (int to = 0; to < n; to++) { +// for (int jump = 0; jump < n; jump++) { +// if (distance[from][jump] != Integer.MAX_VALUE && distance[jump][to] != Integer.MAX_VALUE +// && distance[from][to] > distance[from][jump] + distance[jump][to]) { +// distance[from][to] = distance[from][jump] + distance[jump][to]; +// } +// } +// } +// } + } + +} diff --git a/算法周更班/class_2022_12_4_week/Code03_ShortestPathVisitingAllNodes.java b/算法周更班/class_2022_12_4_week/Code03_ShortestPathVisitingAllNodes.java new file mode 100644 index 0000000..7553ce3 --- /dev/null +++ b/算法周更班/class_2022_12_4_week/Code03_ShortestPathVisitingAllNodes.java @@ -0,0 +1,99 @@ +package class_2022_12_4_week; + +// Floyd算法应用 +// 存在一个由 n 个节点组成的无向连通图,图中的节点按从 0 到 n - 1 编号 +// 给你一个数组 graph 表示这个图 +// 其中,graph[i] 是一个列表,由所有与节点 i 直接相连的节点组成 +// 返回能够访问所有节点的最短路径的长度 +// 你可以在任一节点开始和停止,也可以多次重访节点,并且可以重用边 +// 测试链接 : https://leetcode.cn/problems/shortest-path-visiting-all-nodes/ +public class Code03_ShortestPathVisitingAllNodes { + + public static int shortestPathLength(int[][] graph) { + int n = graph.length; + int[][] distance = floyd(n, graph); + int ans = Integer.MAX_VALUE; + int[][] dp = new int[1 << n][n]; + for (int i = 0; i < (1 << n); i++) { + for (int j = 0; j < n; j++) { + dp[i][j] = -1; + } + } + for (int i = 0; i < n; i++) { + ans = Math.min(ans, process(1 << i, i, n, distance, dp)); + } + return ans; + } + + public static int[][] floyd(int n, int[][] graph) { + int[][] distance = new int[n][n]; + // 初始化认为都没路 + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + distance[i][j] = Integer.MAX_VALUE; + } + } + // 自己到自己的距离为0 + for (int i = 0; i < n; i++) { + distance[i][i] = 0; + } + // 支持任意有向图,把直接边先填入 + for (int cur = 0; cur < n; cur++) { + for (int next : graph[cur]) { + distance[cur][next] = 1; + distance[next][cur] = 1; + } + } + // O(N^3)的过程 + // 枚举每个跳板 + // 注意! 跳板要最先枚举,然后是from和to + for (int jump = 0; jump < n; jump++) { + for (int from = 0; from < n; from++) { + for (int to = 0; to < n; to++) { + if (distance[from][jump] != Integer.MAX_VALUE && distance[jump][to] != Integer.MAX_VALUE + && distance[from][to] > distance[from][jump] + distance[jump][to]) { + distance[from][to] = distance[from][jump] + distance[jump][to]; + } + } + } + } + return distance; + } + + // status : 所有已经走过点的状态 + // 0 1 2 3 4 5 + // int + // 5 4 3 2 1 0 + // 0 0 1 1 0 1 + // cur : 当前所在哪个城市! + // n : 一共有几座城 + // 返回值 : 从此时开始,逛掉所有的城市,至少还要走的路,返回! + public static int process(int status, int cur, int n, int[][] distance, int[][] dp) { + // 5 4 3 2 1 0 + // 1 1 1 1 1 1 + // 1 << 6 - 1 + if (status == (1 << n) - 1) { + return 0; + } + if (dp[status][cur] != -1) { + return dp[status][cur]; + } + int ans = Integer.MAX_VALUE; + // status: + // 5 4 3 2 1 0 + // 0 0 1 0 1 1 + // cur : 0 + // next : 2 4 5 + for (int next = 0; next < n; next++) { + if ((status & (1 << next)) == 0 && distance[cur][next] != Integer.MAX_VALUE) { + int nextAns = process(status | (1 << next), next, n, distance, dp); + if (nextAns != Integer.MAX_VALUE) { + ans = Math.min(ans, distance[cur][next] + nextAns); + } + } + } + dp[status][cur] = ans; + return ans; + } + +} diff --git a/算法周更班/class_2022_12_4_week/Code04_AsFarFromLandAsPossible.java b/算法周更班/class_2022_12_4_week/Code04_AsFarFromLandAsPossible.java new file mode 100644 index 0000000..d86308b --- /dev/null +++ b/算法周更班/class_2022_12_4_week/Code04_AsFarFromLandAsPossible.java @@ -0,0 +1,84 @@ +package class_2022_12_4_week; + +// 你现在手里有一份大小为 n x n 的 网格 grid +// 上面的每个 单元格 都用 0 和 1 标记好了其中 0 代表海洋,1 代表陆地。 +// 请你找出一个海洋单元格,这个海洋单元格到离它最近的陆地单元格的距离是最大的 +// 并返回该距离。如果网格上只有陆地或者海洋,请返回 -1。 +// 我们这里说的距离是「曼哈顿距离」( Manhattan Distance): +// (x0, y0) 和 (x1, y1) 这两个单元格之间的距离是 |x0 - x1| + |y0 - y1| 。 +// 测试链接 : https://leetcode.cn/problems/as-far-from-land-as-possible/ +public class Code04_AsFarFromLandAsPossible { + + // 队列接受一个东西,比如(i,j),就加到r位置 + // queue[r][0] = i + // queue[r++][1] = j + // 队列弹出一个东西,就把l位置的东西弹出 + public static int[][] queue = new int[10000][2]; + public static int l; + public static int r; + // 一个东西进入了队列,比如(i,j)进入了,visited[i][j] = true + // 如果(i,j)没进入过,visited[i][j] = false + public static boolean[][] visited = new boolean[100][100]; + // find表示发现了多少海洋 + public static int find; + + public static int maxDistance(int[][] grid) { + // 清空变量 + // 只要l = 0,r = 0,队列就算被清空了 + l = 0; + r = 0; + find = 0; + int n = grid.length; + int m = grid[0].length; + // 清空visited + for (int i = 0; i < n; i++) { + for (int j = 0; j < m; j++) { + visited[i][j] = false; + } + } + // 大体思路 : + // 1) 先把所有的陆地加入队列,并且统计一共有多少海洋 + int seas = 0; + for (int i = 0; i < n; i++) { + for (int j = 0; j < m; j++) { + if (grid[i][j] == 1) { + visited[i][j] = true; + queue[r][0] = i; + queue[r++][1] = j; + } else { + seas++; + } + } + } + // 2) 从陆地开始广播出去(bfs),每一块陆地的上、下、左、右所能找到的海洋都是第一层海洋 + // 3) 第一层海洋继续bfs,每一块海洋的上、下、左、右所能找到的海洋都是第二层海洋 + // 4) 第二层海洋继续bfs,每一块海洋的上、下、左、右所能找到的海洋都是第三层海洋 + // ... + // 也就是说,以陆地做起点,每一层bfs都只找海洋! + // 看看最深能找到多少层海洋 + int distance = 0; // 这个变量就是最深的海洋层数 + while (l < r && find < seas) { // find < seas说明所有的海洋块没有找全,继续找! + int size = r - l; + for (int i = 0; i < size && find < seas; i++, l++) { + int row = queue[l][0]; + int col = queue[l][1]; + add(row - 1, col, n, m, grid); + add(row + 1, col, n, m, grid); + add(row, col - 1, n, m, grid); + add(row, col + 1, n, m, grid); + } + distance++; + } + return find == 0 ? -1 : distance; + } + + public static void add(int i, int j, int n, int m, int[][] grid) { + if (i >= 0 && i < n && j >= 0 && j < m && grid[i][j] == 0 && !visited[i][j]) { + find++; + visited[i][j] = true; + queue[r][0] = i; + queue[r++][1] = j; + } + } + +} diff --git a/算法周更班/class_2022_12_4_week/Code05_RaceCar.java b/算法周更班/class_2022_12_4_week/Code05_RaceCar.java new file mode 100644 index 0000000..35e6733 --- /dev/null +++ b/算法周更班/class_2022_12_4_week/Code05_RaceCar.java @@ -0,0 +1,107 @@ +package class_2022_12_4_week; + +import java.util.PriorityQueue; + +// 你的赛车可以从位置 0 开始,并且速度为 +1 ,在一条无限长的数轴上行驶 +// 赛车也可以向负方向行驶 +// 赛车可以按照由加速指令 'A' 和倒车指令 'R' 组成的指令序列自动行驶。 +// 当收到指令 'A' 时,赛车这样行驶: +// position += speed +// speed *= 2 +// 当收到指令 'R' 时,赛车这样行驶: +// 如果速度为正数,那么speed = -1 +// 否则 speed = 1 +// 当前所处位置不变。 +// 例如,在执行指令 "AAR" 后,赛车位置变化为 0 --> 1 --> 3 --> 3 +// 速度变化为 1 --> 2 --> 4 --> -1 +// 给你一个目标位置 target ,返回能到达目标位置的最短指令序列的长度。 +// 测试链接 : https://leetcode.cn/problems/race-car/ +public class Code05_RaceCar { + + // Dijkstra算法 + public static int racecar1(int target) { + int maxp = 0; + int maxs = 1; + while (maxp <= target) { + maxp += 1 << (maxs - 1); + maxs++; + } + // 0 : 几倍速 + // 1 : 花费了几步 + // 2 : 当前位置 + PriorityQueue heap = new PriorityQueue<>((a, b) -> a[1] - b[1]); + boolean[][] positive = new boolean[maxs + 1][maxp + 1]; + boolean[][] negative = new boolean[maxs + 1][maxp + 1]; + heap.add(new int[] { 1, 0, 0 }); + while (!heap.isEmpty()) { + int[] cur = heap.poll(); + int speed = cur[0]; + int cost = cur[1]; + int position = cur[2]; + if (position == target) { + return cost; + } + if (speed > 0) { + if (positive[speed][position]) { + continue; + } + positive[speed][position] = true; + add(speed + 1, cost + 1, position + (1 << (speed - 1)), maxp, heap, positive); + add(-1, cost + 1, position, maxp, heap, negative); + } else { + speed = -speed; + if (negative[speed][position]) { + continue; + } + negative[speed][position] = true; + add(-speed - 1, cost + 1, position - (1 << (speed - 1)), maxp, heap, negative); + add(1, cost + 1, position, maxp, heap, positive); + } + } + return -1; + } + + public static void add(int speed, int cost, int position, int limit, PriorityQueue heap, + boolean[][] visited) { + if (position >= 0 && position <= limit && !visited[Math.abs(speed)][position]) { + heap.add(new int[] { speed, cost, position }); + } + } + + // 动态规划 + 数学 + public static int racecar2(int target) { + int[] dp = new int[target + 1]; + return process(target, dp); + } + + public static int process(int target, int[] dp) { + if (dp[target] > 0) { + return dp[target]; + } + int steps = 0; + int speed = 1; + while (speed <= target) { + speed <<= 1; + steps++; + } + int ans = 0; + int beyond = speed - 1 - target; + if (beyond == 0) { + ans = steps; + } else { + ans = steps + 1 + process(beyond, dp); + steps--; + speed >>= 1; + int lack = target - (speed - 1); + int offset = 1; + for (int back = 0; back < steps; back++) { + ans = Math.min(ans, steps + 1 + back + 1 + process(lack, dp)); + lack += offset; + offset <<= 1; + } + } + dp[target] = ans; + return ans; + } + +} diff --git a/算法周更班/class_2022_12_4_week/Code06_KSimilarStrings.java b/算法周更班/class_2022_12_4_week/Code06_KSimilarStrings.java new file mode 100644 index 0000000..2825485 --- /dev/null +++ b/算法周更班/class_2022_12_4_week/Code06_KSimilarStrings.java @@ -0,0 +1,83 @@ +package class_2022_12_4_week; + +import java.util.HashSet; +import java.util.PriorityQueue; + +// 对于某些非负整数 k ,如果交换 s1 中两个字母的位置恰好 k 次 +// 能够使结果字符串等于 s2 ,则认为字符串 s1 和 s2 的 相似度为 k +// 给你两个字母异位词 s1 和 s2 ,返回 s1 和 s2 的相似度 k 的最小值 +// 测试链接 : https://leetcode.cn/problems/k-similar-strings/ +public class Code06_KSimilarStrings { + + public static class Node { + public int cost; // 代价,已经换了几回了! + public int guess;// 猜测还要换几回,能变对! + public int where;// 有必须去比对的下标,左边不再换了! + public String str; // 当前的字符 + + public Node(int r, int g, int i, String s) { + cost = r; + guess = g; + where = i; + str = s; + } + } + + public static int kSimilarity(String s1, String s2) { + int len = s1.length(); + PriorityQueue heap = new PriorityQueue<>((a, b) -> (a.cost + a.guess) - (b.cost + b.guess)); + HashSet visited = new HashSet<>(); + heap.add(new Node(0, 0, 0, s1)); + while (!heap.isEmpty()) { + Node cur = heap.poll(); + if (visited.contains(cur.str)) { + continue; + } + if (cur.str.equals(s2)) { + return cur.cost; + } + visited.add(cur.str); + int firstDiff = cur.where; + while (cur.str.charAt(firstDiff) == s2.charAt(firstDiff)) { + firstDiff++; + } + char[] curStr = cur.str.toCharArray(); + for (int i = firstDiff + 1; i < len; i++) { + if (curStr[i] == s2.charAt(firstDiff) && curStr[i] != s2.charAt(i)) { + swap(curStr, firstDiff, i); + add(String.valueOf(curStr), s2, cur.cost + 1, firstDiff + 1, heap, visited); + swap(curStr, firstDiff, i); + } + } + } + return -1; + } + + public static void swap(char[] s, int i, int j) { + char tmp = s[i]; + s[i] = s[j]; + s[j] = tmp; + } + + public static void add(String add, String s2, int cost, int index, PriorityQueue heap, + HashSet visited) { + if (!visited.contains(add)) { + heap.add(new Node(cost, evaluate(add, s2, index), index, add)); + } + } + + // 估值函数 + // 看每周有营养的大厂算法面试题,2022年1月第3周 + // 估值函数的估计值要绝对 <= 真实距离 + // 但又要确保估计值足够大足够接近真实距离,这样效果最好 + public static int evaluate(String s1, String s2, int index) { + int diff = 0; + for (int i = index; i < s1.length(); i++) { + if (s1.charAt(i) != s2.charAt(i)) { + diff++; + } + } + return (diff + 1) / 2; + } + +} diff --git a/算法课堂笔记/算法和数据结构知识梳理.xmind b/算法课堂笔记/算法和数据结构知识梳理.xmind index f1bdefd780d679bcf543a46fbfca37f850ff0b60..eb8579b4a2746945977cf038765bc5e4775b9bb9 100644 GIT binary patch delta 26092 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 RGFmrznNDA+9!St}^WQ`us8Ij_ delta 26105 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 1 --> 3 --> 3 +速度变化为 1 --> 2 --> 4 --> -1 +给你一个目标位置 target ,返回能到达目标位置的最短指令序列的长度。 +测试链接 : https://leetcode.cn/problems/race-car/ + +对于某些非负整数 k ,如果交换 s1 中两个字母的位置恰好 k 次 +能够使结果字符串等于 s2 ,则认为字符串 s1 和 s2 的 相似度为 k +给你两个字母异位词 s1 和 s2 ,返回 s1 和 s2 的相似度 k 的最小值 +测试链接 : https://leetcode.cn/problems/k-similar-strings/ + + + + + +