左程云大厂算法刷题班——15
第一题
leetcode499:迷宫2
思路:宽度优先遍历
public class 第一题15 {public static void main(String[] args) {int[][] maze = {{0,0,0,0,0},{1,1,0,0,1},{0,0,0,0,0},{0,1,0,0,1},{0,1,0,0,0}};int[] hole = {0,1};int[] ball = {4,3};String res = findShortestWay(maze, hole, ball);System.out.println(res);}public static int[][] to = {{1,0},{0,-1},{0,1},{-1,0},{0,0}};public static String[] re = {"d","l","r","u"};static class Node{public int x;public int y;public int d;//0,1,2,3,4 4 代表初始位置public String p;//路径public Node(int x,int y,int d,String p){this.x = x;this.y = y;this.d = d;this.p = p;}}public static String findShortestWay(int[][] maze,int[] hole,int[] ball){int n = maze.length;int m = maze[0].length;boolean[][][] visit = new boolean[n][m][4];int s1 = 0;int s2 = 0;Node[] p1 = new Node[n * m];Node[] p2 = new Node[n * m];s1 = spread(maze,n,m,visit,new Node(ball[0],ball[1],4,""),p1,s1);while (s1 != 0){for (int i = 0;i < s1;i++){Node cur = p1[i];if (cur.x == hole[0] && cur.y == hole[1]){return cur.p;}s2 = spread(maze,n,m,visit,cur,p2,s2);}Node[] temp = p1;p1 = p2;p2 = temp;s1 = s2;s2 = 0;}return "impossible";}private static int spread(int[][] maze, int n, int m, boolean[][][] visit, Node cur, Node[] p2, int s2) {int d = cur.d;int x = cur.x + to[d][0];int y = cur.y + to[d][1];if (d == 4 || x < 0 || x == n || y < 0 || y == m || maze[x][y] != 0){for (int i = 0;i < 4;i++){if (i != d){x = cur.x + to[i][0];y = cur.y + to[i][1];if (x >= 0 && x < n && y >= 0 && y < m && !visit[x][y][i]){visit[x][y][i] = true;p2[s2++] = new Node(x,y,i,cur.p + re[i]);}}}}else {if (!visit[x][y][d]){visit[x][y][d] = true;p2[s2++] = new Node(x,y,d,cur.p);}}return s2;}
}
第二题
leetcode446. 等差数列划分 II - 子序列
public class 第二题15 {public static int numberOfArithmeticSlices(int[] nums) {int n = nums.length;if (n < 3){return 0;}HashMap<Long,Integer>[] dp = new HashMap[n];for (int i = 0;i < n;i++){dp[i] = new HashMap<>();}int res = 0;for (int i = 1;i < n;i++){for (int j = 0;j < i;j++){long diff = (long) nums[i] - nums[j];if (diff > Integer.MAX_VALUE || diff < Integer.MIN_VALUE){continue;}dp[i].put(diff,dp[i].getOrDefault(diff,0) + dp[j].getOrDefault(diff,0) + 1);if (dp[j].containsKey(diff)){res += dp[j].get(diff);}}}return res;}
}
第三题
leetcode489. 扫地机器人
public class 第三题15 {interface Robot{public boolean move();public void turnLeft();public void turnRight();public void clean();}public static int[][] ds = {{-1,0},{0,1},{1,0},{0,-1}};public static void cleanRoom(Robot robot){clean(robot,0,0,0,new HashSet<String>());}private static void clean(Robot robot, int x, int y, int d, HashSet<String> visited) {robot.clean();visited.add(x + "_" + y);for (int i = 0;i < 4;i++){int nd = (d + i) % 4;int nx = x + ds[i][0];int ny = y + ds[i][1];if (robot.move() && !visited.contains(nx + "_" + ny)){clean(robot,nx,ny,nd,visited);}robot.turnRight();}robot.turnRight();robot.turnRight();robot.move();robot.turnRight();robot.turnRight();}
}
第四题
leetcode875. 爱吃香蕉的珂珂
思路:二分
public class 第四题15 {public static void main(String[] args) {int i = 805306368 * 3;System.out.println(i);}public int minEatingSpeed(int[] piles, int h) {int maxValue = 1;for (int pile : piles){maxValue = Math.max(pile,maxValue);}int l = 1;int r = maxValue;int lastTime = maxValue;while (l <= r){int mid = (l + r) / 2;if (calculateSum(piles,mid) > h){l = mid + 1;}else {lastTime = mid;r = mid - 1;}}return lastTime;}private int calculateSum(int[] piles, int mid) {int res = 0;for (int i = 0;i < piles.length;i++){res += (piles[i] + mid - 1) / mid;}return res;}
}
左程云大厂算法刷题班——15相关推荐
- 左程云大厂算法刷题班——07
第一题 leetcode42:接雨水 public class 第一题01 {public static int trap1(int[] height) {int n = height.length; ...
- 左程云大厂算法刷题班——05
第一题 public class 第一题05 {public static void main(String[] args) {int[] res = maxSplitNum("010110 ...
- 左程云大厂算法刷题班——08
第一题 leetcode37:解数独 public class 第一题08 {public void solveSudoku(char[][] board) {boolean[][] row = ne ...
- 左程云大厂算法刷题班——14
第一题 leetcode475:供暖器 public class 第一题14 {public static int findRadius(int[] houses, int[] heaters) {A ...
- 左程云大厂算法刷题班——12
第一题 leetcode296. 最佳的碰头地点 public class 第一题12 {public static void main(String[] args) {int[][] grid = ...
- 左程云大厂算法刷题班——13
第一题 leetcode992. K 个不同整数的子数组 思路:1.滑动窗口(两个) 2.技巧:k = k = (小于等于k) - (小于等于k-1) public class 第一题13 {publ ...
- 左程云大厂算法刷题班——10
第一题 leetcode279. 完全平方数 public class 第一题10 {public static int numSquares(int n) {int[] dp = new int[n ...
- 左程云大厂算法刷题班——02
第一题 思路:滑动窗口(左右两指针) public class 第一题01 {public static void main(String[] args) {int[] arr = {1,3,4,5, ...
- 面试算法LeetCode刷题班—BAT面试官带你刷真题、过笔试
课程名称: <面试算法LeetCode刷题班> --BAT面试官带你刷真题.过笔试 主讲老师: 林老师 BAT资深研发工程师(T7/P8级),致力于搜索引擎及其子系统的研发.迭代与优化,数 ...
最新文章
- 大型网站的灵魂——性能
- 小蚂蚁学习数据结构(32)——二叉排序树的概念
- 坏掉的项链Broken Necklace
- java中的equals和hashCode
- TI的Controlsuit里的硬件资源打开方式(Eagle转AD)
- FaceBook 开发者应用申请
- Dynamsoft Barcode Reader Crack,强大而快速的条码解码
- APM2.8 Rover 自动巡航车设计(硬件连接)
- 计算机的第一道安全防线是,网络安全的第一道防线是
- 电脑复制粘贴不了怎么办?
- python xposed_Xposed插件开发进阶篇
- Java第二次实训课堂
- 一份小白前端可视化学习指南——附思维导图
- 指数型基金购买技巧汇总(程序猿买基金必备——未完待续)
- 模式识别技术漫谈(5)
- bzoj 3811 玛里苟斯 - 线性基
- 【微信测试版】支持安卓平板和手机同时登录
- 地球,再一次完成了绝妙的自转 ......
- 微软过桥问题Dijkstra/倒水问题
- mysql_store_result和mysql_use_result的区别