第一题

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相关推荐

  1. 左程云大厂算法刷题班——07

    第一题 leetcode42:接雨水 public class 第一题01 {public static int trap1(int[] height) {int n = height.length; ...

  2. 左程云大厂算法刷题班——05

    第一题 public class 第一题05 {public static void main(String[] args) {int[] res = maxSplitNum("010110 ...

  3. 左程云大厂算法刷题班——08

    第一题 leetcode37:解数独 public class 第一题08 {public void solveSudoku(char[][] board) {boolean[][] row = ne ...

  4. 左程云大厂算法刷题班——14

    第一题 leetcode475:供暖器 public class 第一题14 {public static int findRadius(int[] houses, int[] heaters) {A ...

  5. 左程云大厂算法刷题班——12

    第一题 leetcode296. 最佳的碰头地点 public class 第一题12 {public static void main(String[] args) {int[][] grid = ...

  6. 左程云大厂算法刷题班——13

    第一题 leetcode992. K 个不同整数的子数组 思路:1.滑动窗口(两个) 2.技巧:k = k = (小于等于k) - (小于等于k-1) public class 第一题13 {publ ...

  7. 左程云大厂算法刷题班——10

    第一题 leetcode279. 完全平方数 public class 第一题10 {public static int numSquares(int n) {int[] dp = new int[n ...

  8. 左程云大厂算法刷题班——02

    第一题 思路:滑动窗口(左右两指针) public class 第一题01 {public static void main(String[] args) {int[] arr = {1,3,4,5, ...

  9. 面试算法LeetCode刷题班—BAT面试官带你刷真题、过笔试

    课程名称: <面试算法LeetCode刷题班> --BAT面试官带你刷真题.过笔试 主讲老师: 林老师 BAT资深研发工程师(T7/P8级),致力于搜索引擎及其子系统的研发.迭代与优化,数 ...

最新文章

  1. 大型网站的灵魂——性能
  2. 小蚂蚁学习数据结构(32)——二叉排序树的概念
  3. 坏掉的项链Broken Necklace
  4. java中的equals和hashCode
  5. TI的Controlsuit里的硬件资源打开方式(Eagle转AD)
  6. FaceBook 开发者应用申请
  7. Dynamsoft Barcode Reader Crack,强大而快速的条码解码
  8. APM2.8 Rover 自动巡航车设计(硬件连接)
  9. 计算机的第一道安全防线是,网络安全的第一道防线是
  10. 电脑复制粘贴不了怎么办?
  11. python xposed_Xposed插件开发进阶篇
  12. Java第二次实训课堂
  13. 一份小白前端可视化学习指南——附思维导图
  14. 指数型基金购买技巧汇总(程序猿买基金必备——未完待续)
  15. 模式识别技术漫谈(5)
  16. bzoj 3811 玛里苟斯 - 线性基
  17. 【微信测试版】支持安卓平板和手机同时登录
  18. 地球,再一次完成了绝妙的自转 ......
  19. 微软过桥问题Dijkstra/倒水问题
  20. mysql_store_result和mysql_use_result的区别

热门文章

  1. 《圣经》中最让人感动的十句
  2. 雅思写作拾遗01----图表类作文
  3. HHUOJ 1862 帮助名侦探
  4. 【高等数学】反常积分敛散性的判定工具——P积分的敛散性
  5. 8位同步码修改变4位同步码
  6. Android应用开发基础篇(4)-----TabHost(选项卡)
  7. 卿学姐种花(线段树)
  8. Android Banner2.1.0
  9. 只有0.7M?超超超轻量SOTA目标检测模型揭秘!
  10. 减肥新方法?科学家发现脑内控制摄食的新“开关”