第52周 ARTS 2019 10 13

Algorithm:1219. 黄金矿工
Review:
Tip/Tech:
Share:

Algorithm

1219 黄金矿工

https://leetcode-cn.com/problems/path-with-maximum-gold
在这里插入图片描述
和单词的搜索的思想是一致的。首先遍历的每个单词,然后以每个点进行深度优先搜索。

  1. 每次都判断这个点是否可以挖矿,两个条件:挖过了没?有没有矿?如果有,就把临时的值加上能挖到矿物的产量。
  2. 以当前的点为起点,分别从四个方向重复步骤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

垂直农业的新方法

在这里插入图片描述
这个看起来真的挺酷的,这个让我想起了未来,农田搬进城市大楼,可以用很少的种植面积培养出大量的食物。
而且这个占地面积看起来并不大,大概是一个床的面积吧,其实可以放在家里,如果可行的话,以后每个人都可以吃上自己种植的大米了。
家庭农场的概念也许不远的将来真的可以实现。
可以种菜,种花生,种西瓜。。哈哈哈。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值