Algorithm:1219. 黄金矿工
Review:
Tip/Tech:
Share:
Algorithm
1219 黄金矿工
https://leetcode-cn.com/problems/path-with-maximum-gold
和单词的搜索的思想是一致的。首先遍历的每个单词,然后以每个点进行深度优先搜索。
- 每次都判断这个点是否可以挖矿,两个条件:挖过了没?有没有矿?如果有,就把临时的值加上能挖到矿物的产量。
- 以当前的点为起点,分别从四个方向重复步骤1),返回四个方向中最大那个。
结束遍历后返回答案,最大的矿。
如果有点难以理解,没事直接来看代码吧。。
注意递归的时候,要有退出条件和循环条件哦。
Show The Code
class Solution {
private int ans = Integer.MIN_VALUE;private int rowSize = 0;private int columnSize = 0;public int getMaximumGold(int[][] grid) {
if (grid == null || grid.length == 0 || grid[0].length == 0) {
return 0;}rowSize = grid.length;columnSize = grid[0].length;boolean[][] visited = new boolean[grid.length][grid[0].length];for (int i = 0; i < rowSize; ++i) {
for (int j = 0; j < columnSize; ++j) {
dfs(i, j, 0, grid, visited);}}return ans;}public int dfs(int rowIndex, int columnIndex, int temp, int[][] grid, boolean[][] visited) {
if (rowIndex >= rowSize || columnIndex >= columnSize || rowIndex < 0 || columnIndex < 0 || grid[rowIndex][columnIndex] == 0 || visited[rowIndex][columnIndex]) {
return temp;}visited[rowIndex][columnIndex] = true;temp += grid[rowIndex][columnIndex];int temp1 = dfs(rowIndex + 1, columnIndex, temp, grid, visited);int temp2 = dfs(rowIndex - 1, columnIndex, temp, grid, visited);int temp3 = dfs(rowIndex, columnIndex + 1, temp, grid, visited);int temp4 = dfs(rowIndex, columnIndex - 1, temp, grid, visited);visited[rowIndex][columnIndex] = false;int maxTemp = Math.max(temp1, Math.max(temp2, Math.max(temp3, temp4)));ans = Math.max(ans, maxTemp);return maxTemp;}
}
Review
The Structure of the The Multiprogramming System
这篇论文是看《操作系统概论》的时候看到的一篇论文,这篇论文中提到了操作系统分层的概念。
他把操作系统分成了level0~level5
Level0:把处理器分配的职责就是分配给动态进程一些逻辑权限,进行逻辑操作?(硬件)。就是把程序合理拆分成各种任务给CPU。
Level1:存储临时信息,功能看起来有点像寄存器。这里(硬件)
Level2:这个好像是个用户空间的概念,这个是在每个进程都有自己的一个专用的对话控制台?是用来和CPU和缓存啊这些打交道的,这一层感觉是个虚拟的概念。
Level3:输入流输出流。IO层。
Level4:这一层是面向用户的程序的。
Level5:这是面向操作员的,用今天的话来说,就是电脑使用者(可以是玩家,工作人员等等)。
Tip/Tech
基于链表实现 LRU 缓存淘汰算法
思路:
我们维护一个有序单链表,越靠近链表尾部的结点是越早出现的数据。当有一个新的数据出现的时候,我们从链表头开始顺序遍历链表。
有以下两种情况:
1 )找到了数据,也就是,已经存在了数据了,那么就把找到的点删除,搬移到链表头的位置
2 )没有找到:因为一般LRU这种数据结构都有长度限制也分成两种情况:
- 链表未满:直接插入到头部
- 链表满了:把末尾的删除,然后插入头部。
Share
https://www.economist.com/science-and-technology/2019/08/31/new-ways-to-make-vertical-farming-stack-up
New ways to make vertical farming stack up
垂直农业的新方法
这个看起来真的挺酷的,这个让我想起了未来,农田搬进城市大楼,可以用很少的种植面积培养出大量的食物。
而且这个占地面积看起来并不大,大概是一个床的面积吧,其实可以放在家里,如果可行的话,以后每个人都可以吃上自己种植的大米了。
家庭农场的概念也许不远的将来真的可以实现。
可以种菜,种花生,种西瓜。。哈哈哈。