ARTS Week 19
Algorithm
本周的 LeetCode 题目为 5. 最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。例如输入:s = "babad",输出:"bab"
本题使用动态规划进行解决,动态规划的核心就在于找到状态转移方程。通过观察发现,回文串去掉首尾两个字符后,依然是回文串,即 dp[i][j] = dp[i+1][j-1] ^ (s[i] == s[j]),再加上只有一个或两个字符时作为初始条件,因此状态转移方程为:
dp[i][i] = true,
dp[i][i+1] = (s[i] == s[i+1]),
dp[i][j] = dp[i+1][j-1] ^ (s[i] == s[j]), j-i>1
根据状态转移方程,很容易写出代码,主要要记录下最长回文子串的开始索引和长度,以方便得到该回文子串。
class Solution {
public String longestPalindrome(String s) {
int length = s.length();
if (length < 2) {
return s;
}
int maxLength = 1;
int begin = 0;
boolean[][] dp = new boolean[length][length];
for (int i = 0; i < length; i++) {
dp[i][i] = true;
}
for (int right = 1; right < length; right++) {
for (int left= 0; left < right; left++) {
if (s.charAt(left) != s.charAt(right)) {
dp[left][right] = false;
} else {
if (right - left < 3) {
dp[left][right] = true;
} else {
dp[left][right] = dp[left+1][right-1];
}
}
if (dp[left][right] == true && (right - left + 1 > maxLength)) {
maxLength = right - left + 1;
begin = left;
}
}
}
return s.substring(begin, begin+maxLength);
}
}
Review
本周 Review 的英文文章为:不要怕,你的内存是够用的!
因为 Linux 系统中存在着磁盘缓存,其目的是为了让系统变得更快。当你需要更多的内存时,磁盘缓存会自动释放来满足应用或进程的需要。虽然你无法关闭,但是你想强制清除目前的缓存,可以运行 echo 3 | sudo tee /proc/sys/vm/drop_caches。
但是我们在使用 top 或 free 命令查看内存时,却经常发现内存都已经被使用了,但这实际上是因为 Linux 系统中的 free 和 available 和我们平时的概念有所不同,它们的对比表如下:
| 内容情况 | 你会称它为 | Linux 系统会称它为 |
|---|---|---|
| 被应用所使用 | Used | Used |
| 被使用,但可以使得其可用 | Free (or Available) | Used (or Available) |
| 没有被使用 | Free | Free |
通过查看 free 命令显示结果中 available 这一列,你便可以得到现在系统中实际可用的内存。
$ free -m
total used free shared buff/cache available
Mem: 1504 1491 13 0 855 792
Swap: 2047 6 2041
最后作者给出了具体的何时需要担心内存情况的建议。当下面的情况发生时,你并不需要担心内存是否够用:
free值接近了0used值接近了total值available值(或者free+buffers/cache的和)是足够的(占total20% 以上)swap那一行中used的值没有改变
下面是值得注意的真正低内存可用的警告信号:
available值(或者free+buffers/cache的和) 接近0swap那一行中used的值在增加或者波动- 使用
dmesg | grep oom-killer来查看OutOfMemory-killer是否在工作
Tip
Python 中一个二维数组按列计算每一列的平均值,需要使用 numpy 包,调用 numpy.average(data, axis=0) 语句来执行,当 axis=1 时则为按行计算均值,示例如下:
import numpy
data = [[1, 2], [3, 4]]
avg = numpy.average(data, axis=0)
print(avg) # [2, 3]
Share
祝大家新年快乐,身体健康,万事如意!
ARTS Week 19的更多相关文章
- 【ARTS】01_17_左耳听风-20190304~20190310
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- Mediaplayer error (-19,0)
Android MediaPlayer 发生 error (-19,0) 错误解决方法. 引起原因:由于多次实例化MediaPlayer.start() 进行播放操作引起的.由于没有及时释放内存资源导 ...
- 录像时调用MediaRecorder的start()时发生start failed: -19错误
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 26 27 28 29 30 31 32 33 34 35 36 3 ...
- CSharpGL(19)用glReadPixels把渲染的内容保存为PNG图片(C#)
CSharpGL(19)用glReadPixels把渲染的内容保存为PNG图片(C#) 效果图 本文解决了将OpenGL渲染出来的内容保存到PNG图片的方法. 下载 CSharpGL已在GitHub开 ...
- ABP(现代ASP.NET样板开发框架)系列之19、ABP应用层——审计日志
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之19.ABP应用层——审计日志 ABP是“ASP.NET Boilerplate Project (ASP.NET ...
- js正则表达式校验非负浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js正则表达式校验非负整数:^\d+$ 或 ^[1-9]\d*|0$
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js正则表达式校验非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- C#开发微信门户及应用(19)-微信企业号的消息发送(文本、图片、文件、语音、视频、图文消息等)
我们知道,企业号主要是面向企业需求而生的,因此内部消息的交流显得非常重要,而且发送.回复消息数量应该很可观,对于大企业尤其如此,因此可以结合企业号实现内部消息的交流.企业号具有关注安全.消息无限制等特 ...
随机推荐
- 大数据学习day28-----hive03------1. null值处理,子串,拼接,类型转换 2.行转列,列转行 3. 窗口函数(over,lead,lag等函数) 4.rank(行号函数)5. json解析函数 6.jdbc连接hive,企业级调优
1. null值处理,子串,拼接,类型转换 (1) 空字段赋值(null值处理) 当表中的某个字段为null时,比如奖金,当你要统计一个人的总工资时,字段为null的值就无法处理,这个时候就可以使用N ...
- MYSQL获取更新行的主键ID 【转】
在某些情况下我们需要向数据表中更新一条记录的状态,然后再把它取出来,但这时如果你在更新前并没有一个确认惟一记录的主键就没有办法知道哪条记录被更新了. 举例说明下: 有一个发放新手卡的程序,设计数据库时 ...
- Spring Batch : 在不同steps间传递数据
参考文档: How can we share data between the different steps of a Job in Spring Batch? Job Scoped Beans i ...
- Oracle bulk collect into 的几种用法
bulk collect 和 forall 联合应用写起来显得有些啰嗦,不过为了速度,多写两句又何妨 建立两个临时表 create table T_TEST ( TESTID NUMBER(19) n ...
- MySQL(1):SQLyog
数据库(DataBase,简称DB) 一. 基本数据库操作命令 flush privileges 刷新数据库 show databases 显示所有数据库 use dbname 打开某个数据库 sho ...
- Next_day()函数的用法
一.定义 NEXT_DAY(date,char) date参数为日期型, char:为1~7或Monday/Mon~Sunday/ 指定时间的下一个星期几(由char指定)所在的日期, c ...
- Pythonweb采集
一.访问页面 import webbrowser webbrowser.open('http://www.baidu.com/') pip3 install requests import re ...
- tableau创建点位地图
一.双击省/自治区字段 二.双击销售额字段,标记类型改为圆 三.省/自治区字段设置标签显示,圆的大小和颜色细节调整,最终结果如下图所示
- PDF.js Electron Viewer
PDF.js 是基于 HTML5 解析与渲染 PDF 的 JavaScript 库,由 Mozilla 主导开源. 本文旨在介绍 PDF.js 于 Electron 里如何开始使用,实际尝试了用其 A ...
- [BUUCTF]PWN4——pwn1_sctf_2016
[BUUCTF]PWN4--pwn1_sctf_2016 题目网址:https://buuoj.cn/challenges#pwn1_sctf_2016 步骤: 例行检查,32位,开启nx(堆栈不可执 ...