打家劫舍问题

213. 打家劫舍 II

Difficulty: 中等

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警

给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。

示例 1:

1
2
3
输入:nums = [2,3,2]
输出:3
解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。

示例 2:

1
2
3
4
输入:nums = [1,2,3,1]
输出:4
解释:你可以先偷窃 1 号房屋(金额 = 1),然后偷窃 3 号房屋(金额 = 3)。
     偷窃到的最高金额 = 1 + 3 = 4 。

示例 3:

1
2
输入:nums = [0]
输出:0

提示:

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 1000

Solution

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public:
    int rob(vector<int>& nums) {
        if(nums.size()==1) return nums[0];
        if(nums.size()==0) return 0;
        if(nums.size()==2) return max(nums[0],nums[1]);
        int n = nums.size();
        static int dp[101][2];
        memset(dp,0,sizeof dp);
        for(int i=1;i<=n-1;++i) {
            dp[i][0] = max( dp[i-1][0] , dp[i-1][1] );
            dp[i][1] = dp[i-1][0] + nums[i-1];
        }
        int res1 = max(dp[n-1][0], dp[n-1][1]);
        memset(dp,0,sizeof dp);
        for(int i=2;i<=n;++i) {
            dp[i][0] = max( dp[i-1][0] , dp[i-1][1] );
            dp[i][1] = dp[i-1][0] + nums[i-1];
        }
        int res2 = max(dp[n][0], dp[n][1]);

        return max(res2,res1);
    }
    
};

golang的问题

  1. 讲讲协程,为什么协程比线程轻量

面向对象设计

  1. 讲讲 面向对象设计的几种方法

1),OCP原则(也叫开闭原则) 2),SRP原则(职责单一原则) 3),OCP原则(里氏替换原则) 4),DIP原则(依赖倒置原则) 6),LoD法则(迪米特法则)

开闭原则: 对扩展开放,对修改关闭

1、轻易不要去修改别人的方法 可能很多地方调用 有的方法抛出去后 被其他外部的调用(你都不知道 被谁调用了) 做兼容 做扩展

2、自己的设计 保证好的扩展性 对扩展开放,对修改关闭

redis 缓存 更新

  1. 你是先更新缓存 ,还是先更新DB

http2.0 相比 http1.1 做了哪些升级

八、HTTP2.0和HTTP1.X相比的新特性

  • 新的二进制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。
  • 多路复用(MultiPlexing),即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。
  • header压缩,如上文中所言,对前面提到过HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。
  • 服务端推送(server push),同SPDY一样,HTTP2.0也具有server push功能。