LeetCode 刷题笔记 20170130

1.Largest Plus Sign问题:此问题的思路为求输入矩阵非零点的上、下、左、右连续一的个数,包括这个点本身。引用动态规划的思想,当一个点为0时,他的上下左右连续1个数为0;非零时,上连续1个数为上面点的个数加1,下连续1个数为下面点的个数加1

,左连续1个数为左面点的个数加1,右连续1个数为右面点的个数加1。每个点拥有这四个量,他们的最小值为以这个点为中心的加号的大小。然后遍历所有点,查找这些点中加号大小的最大值。但是由于本题对于时间复杂度空间复杂度的要求,在后面的代码中进行了多次的优化,才到达AC。

简记优化过程:原始矩阵和上下左右四个值通过N*N的四个矩阵存储(MLE)

->上下左右值通过一个N*N矩阵存储,每次只更新到最小值(MLE)

->使用vector存储原始矩阵,只存储零元素,使用到了vector的查找(TLE)

->自定义结构体,使用unordered_set存储零元素,但是用函数封装了rank的计算(TLE)

->去除函数封装(AC)

2.Ones and Zeros 可以看作含有两个weight和value的背包问题,对两个变量同时进行优化。将每个str的value看作1,weight看作其中1和0分别的个数,最后需要的m和n的个数看作背包总容量。1和0的任一weight分别不可以超过m和n;

3.C++高维数组的申请;

4.使用引用传递参数;

5.01背包问题的详细解释见此;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值