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
的和)是足够的(占total
20% 以上)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)-微信企业号的消息发送(文本、图片、文件、语音、视频、图文消息等)
我们知道,企业号主要是面向企业需求而生的,因此内部消息的交流显得非常重要,而且发送.回复消息数量应该很可观,对于大企业尤其如此,因此可以结合企业号实现内部消息的交流.企业号具有关注安全.消息无限制等特 ...
随机推荐
- Hive(七)【内置函数】
目录 一.系统内置函数 1.查看系统自带内置函数 2.查看函数的具体用法 二.常用内置函数 1.数学函数 round 2.字符函数 split concat concat_ws lower,upper ...
- 大数据学习day18----第三阶段spark01--------0.前言(分布式运算框架的核心思想,MR与Spark的比较,spark可以怎么运行,spark提交到spark集群的方式)1. spark(standalone模式)的安装 2. Spark各个角色的功能 3.SparkShell的使用,spark编程入门(wordcount案例)
0.前言 0.1 分布式运算框架的核心思想(此处以MR运行在yarn上为例) 提交job时,resourcemanager(图中写成了master)会根据数据的量以及工作的复杂度,解析工作量,从而 ...
- 零基础学习java------37---------mybatis的高级映射(单表查询,多表(一对一,一对多)),逆向工程,Spring(IOC,DI,创建对象,AOP)
一. mybatis的高级映射 1 单表,字段不一致 resultType输出映射: 要求查询的字段名(数据库中表格的字段)和对应的java类型的属性名一致,数据可以完成封装映射 如果字段和jav ...
- android studio 使用 aidl(一)基础用法
最近公司需要开发一个项目用的到aidl,之前研究过eclipse版本的,但是好久了一直没用,现在需要捡起来,但是现在都用android studio了,所以查了下资料 都不是很全,我在这里总结一下,方 ...
- 实现将rsyslog将日志记录与MySQL中
准备两个节点 node3: rsyslog node2: 数据库 准备相应的包 [root@node3 php-fpm.d]#yum install rsyslog-mysql 将数据拷贝到数据 ...
- 监控网站是否异常的shell脚本
本节内容:shell脚本监控网站是否异常,如有异常就自动发邮件通知管理员. 脚本检测流程,如下:1,检查网站返回的http_code是否等于200,如不是200视为异常.2,检查网站的访问时间,超过M ...
- 【Python】【Algorithm】排序
冒泡排序 dic = [12, 45, 22, 6551, 74, 155, 6522, 1, 386, 15, 369, 15, 128, 123, ] for j in range(1, len( ...
- 【Java基础】JAVA中优先队列详解
总体介绍 优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++的优先队列每次取最大元素).这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序( ...
- lucene中创建索引库
package com.hope.lucene;import org.apache.commons.io.FileUtils;import org.apache.lucene.document.Doc ...
- Mysql原有环境部署多个版本
目录 一.环境准备 二.下载安装包 三.Mysql-5.7单独部署 四.启动Mysql-5.7 五.muliti使用 一.环境准备 原先已经有一个5.6版本的数据库在运行了,当前操作是完全不影响原数据 ...