Queue<int[]> queue = new ArrayDeque<>(); int m = grid.length, n = grid[0].length; // 先把所有的陆地都入队。 for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (grid[i][j] == 1) { queue.offer(newint[] {i, j}); } } }
// 从各个陆地开始,一圈一圈的遍历海洋,最后遍历到的海洋就是离陆地最远的海洋。 boolean hasOcean = false; int[] point = null; while (!queue.isEmpty()) { point = queue.poll(); int x = point[0], y = point[1]; // 取出队列的元素,将其四周的海洋入队。 for (int i = 0; i < 4; i++) { int newX = x + dx[i]; int newY = y + dy[i]; if (newX < 0 || newX >= m || newY < 0 || newY >= n || grid[newX][newY] != 0) { continue; } grid[newX][newY] = grid[x][y] + 1; // 这里我直接修改了原数组,因此就不需要额外的数组来标志是否访问 hasOcean = true; queue.offer(newint[] {newX, newY}); } }
作者全是响当当的人物,比如 Brian Goetz,我多次在专栏里引用他的观点,众多强力作者也保证了书的质量。抛开作者光环,这本书的内容全部建立在理论之上,先讲清道理再谈实践,可以真正让你知其然也知其所以然。这本书更加侧重并发编程中有哪些问题,如何来深刻地理解和定义问题,如何利用可靠的手段指导工程实践,并没有过分纠结于并发类库的源码层面。
深入理解 Java 虚拟机
性能优化
性能优化,我推荐 Charlie Hunt 和 Binu John 所著的《Java 性能优化权威指南》(Java Performance),也是我上次在直播时向大家推荐的。Java 之父 James Gosling。
Spring实战
可以说 Spring 等相关框架已经成为业务开发的事实标准,系统性地掌握 Spring 框架的设计和实践,是必需的技能之一。