0
点赞
收藏
分享

微信扫一扫

ARTS-for-week4-20181109


每周完成一个ARTS:
每周至少做一个 leetcode 的算法题、阅读并点评至少一篇英文技术文章、学习至少一个技术技巧、分享一篇有观点和思考的技术文章。(也就是 Algorithm、Review、Tip、Share 简称ARTS)

第四周了,哇咔咔。时间过得好快^_^

由于微信不支持添加外链,所以大家访问有链接的地方直接滑到文章最底部点击阅读原文就可以访问了^_^

一 

Algorithm

LeetCode 344. Reverse String 

【题意】

Write a function that takes a string as input and returns the string reversed.

Example 1:

1
2

Input: "hello"
Output: "olleh"

Example 2:

1
2

Input: "A man, a plan, a canal: Panama"
Output: "amanaP :lanac a ,nalp a ,nam A"

【思路】比较简单的一道字符串处理题。

  • 方法 1 双向循环,首尾字符交换,时间复杂度为o(n/2)
  • 方法 2 直接使用StringBuffer类的reverse()方法。
  • 方法 3 异或运算满足交换律。

【参考代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

/*方法 1 */
class Solution {
public:
string reverseString(string s) {
int l = 0;
int r = s.size() - 1;
char temp;
while(l < r){
temp = s[l];
s[l] = s[r];
s[r] = temp;
l++;
r--;
}
return s;
}
};

1
2
3
4

/*方法 2 */
public static String reverseString3(String s) {
return new StringBuffer(s).reverse().toString();
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

/*方法 3 */
public class Solution {
public String reverseString(String s) {
char[] word = s.toCharArray();
int i = 0;
int j = s.length() - 1;
while (i < j) {
word[i] = (char) (word[i] ^ word[j]);
word[j] = (char) (word[i] ^ word[j]);
word[i] = (char) (word[i] ^ word[j]);
i++;
j--;
}
return new String(bytes);
}
}

二 

Review

How to think like a programmer — lessons in problem solving

如何像程序员一样思考 - 解决问题的经验教训

这篇 medium 的文章,我认真的阅读了一遍,读完感觉很有启发,觉得有必要分享给大家。

这篇文章介绍了如何把编程思想和我们日常生活互相结合起来。

总体的观点就是告诉我们,如何拥有向程序员一样,遇到问题划分问题,通过解决子问题,合并子问题之后,然后解决大问题的思维方式。

文章一开始用通俗的语言展示了一个常见的现象,那就是我们大部分人遇到一个问题之后,经常采取的一种解决方式(作者认为这是一种不好的解决方式)。

  1. 首先尝试一种解决问题的方法。
  2. 如果当前方法不奏效,换一种方法。
  3. 如果还不能奏效,那么重复步骤 2,直到问题解决。

通过把我们之前习惯解决问题的方式记录下来,你在回头看看,有时候可能运气好。换几种方法可能就把问题解决了,但是作者却认为这是解决问题的最糟糕方式!这是一个巨大的,浪费时间的一种解决问题的方式。作者认为最好的方法包括:a)建立一个框架,b)实践它。

具体来说

a)​Understand

b) ​Plan

c)​Divide

d)​Stuck

  • Debug
  • Release
  • Search

Tip

sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。

总结一些常用的 命令用法

sar options -A -o file t n

其中:

t为采样间隔,n为采样次数,默认值是1;

-o file表示将命令结果以二进制格式存放在文件中,file 是文件名。

options 为命令行选项,sar命令常用选项如下:

ARTS-for-week4-20181109_系统活动

-A:所有报告的总和

-u:输出CPU使用情况的统计信息

-v:输出inode、文件和其他内核表的统计信息

-d:输出每一个块设备的活动信息

-r:输出内存和交换空间的统计信息

-b:显示I/O和传送速率的统计信息

-a:文件读写情况

-c:输出进程统计信息,每秒创建的进程数

-R:输出内存页面的统计信息

-y:终端设备活动情况

-w:输出系统交换活动信息

Share

压缩算法的解释(英文)

压缩是最常用的功能之一,压缩算法一般分成两大类:基于熵的压缩和基于字典的压缩。本文简单解释这两类算法的原理,以及将它们合在一起的 deflate 算法。

        

ARTS-for-week4-20181109_解决方案_02

ARTS-for-week4-20181109_系统活动_03


举报

相关推荐

ARTS Week 44

ARTS Week 24

ARTS Week 23

week8-Day4

安全学习Week4

0 条评论