ARTS-for-week4-20181109

2024-08-27 01:48
文章标签 arts week4 20181109

本文主要是介绍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 先不要急着去解决问题,先计划你的解决方案。 让你的大脑有时间分析问题并处理信息。 为了得到一个好的计划,你可以先自己回答一个问题:“给定输入X,返回输出Y所需的步骤是什么?

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命令常用选项如下:

-A:所有报告的总和

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

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

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

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

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

-a:文件读写情况

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

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

-y:终端设备活动情况

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

Share

压缩算法的解释(英文)

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

欢迎关注我的公众号 加贝木苇的理想国


                  

这篇关于ARTS-for-week4-20181109的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1110288

相关文章

ARTS-for-week9-20181214

阅读文本大概需要 10 分钟。 每周完成一个ARTS: Algorithm 来源 LeetCode 5.Longest Palindromic Substring Review 阅读了 Medium 上的一篇关于学习的文章 Tip 总结自己在台式机安装中标麒麟 V5 操作系统以及配置 Qt 环境的一些注意事项 Share 分享一篇关于 ZIP 压缩算法详细分析及解压实例解释 ps:由于公

ARTS-for-week8-20181207

阅读文本大概需要 17 分钟。 每周完成一个ARTS:本周的 Algorithm 来源 LeetCode 3. Longest Substring Without Repeating Characters 本次 Review 阅读了 Medium 上的一篇关于面向对象编程的文章 Tip 自己折腾的 Ubuntu14.04 更新原装系统的 Python2.7 版本到 Python3.6 Sha

ARTS-for-week7-20181130

阅读文本大概需要 8 分钟。 每周完成一个ARTS:每周至少做一个 leetcode 的算法题、阅读并点评至少一篇英文技术文章、学习至少一个技术技巧、分享一篇有观点和思考的技术文章。(也就是 Algorithm、Review、Tip、Share 简称ARTS) ps:由于公众号不支持添加外链,所以大家遇到有链接的地方滑到文章最下面点击阅读原文就可以访问了哈,如果觉得文章不错,欢迎分享给周

ARTS-for-week6-20181124

阅读文本大概需要 12 分钟。 每周完成一个ARTS:每周至少做一个 leetcode 的算法题、阅读并点评至少一篇英文技术文章、学习至少一个技术技巧、分享一篇有观点和思考的技术文章。(也就是 Algorithm、Review、Tip、Share 简称ARTS) ps:由于公众号不支持添加外链,所以大家遇到有链接的地方滑到文章最下面点击阅读原文就可以访问了哈,如果觉得文章不错,欢迎分享给

ARTS Tip5 数据结构基本概念

数据结构的研究内容: 研究数据元素之间的逻辑结构研究数据在计算机内部的存储结构研究如何在数据的逻辑结构和存储结构中实施有效的操作和处理 数据结构中数据之间的关系分为: 线性关系非线性关系(非线性关系又分为:树关系和图关系) 数据之间的结构分为: 逻辑结构:体现数据元素之间的逻辑关系 存储结构(物理结构):数据在计算机内的表示,包含数据元素的表示和关系的表示。 存储结构又可以分为:

ARTS Review6 IPv4和IPv6地址解剖

原文链接:https://medium.com/@josephcardillo/a-beginners-guide-to-ipv4-and-ipv6-anatomy-fcc9444b0d4d 这篇文章,作者主要剖析了IPv4和IPv6地址的区别: IPv在IPv4和IPv6中代表什么? 代表网络协议版本。 为什么不存在IPv1, IPv2, IPv3 and IPv5? 因为IPv4是第

ARTS Review7 编写可测试代码

原文链接:https://medium.com/feedzaitech/writing-testable-code-b3201d4538eb 这篇文章,作者主要讲了如何编写可测试的代码,一般人不愿意测试,是因为代码之间的耦合度太高,所以我们可以学习编写低耦合的代码,来方便我们开发项目。 编写可测试的代码需要遵循下面的一些原则和指导路线: SOLID design principles Si

ARTS leetcode7 Merge Two Sorted Lists

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.Example:Input: 1->2->4, 1->3->4Output: 1->1->2->3->4->4

ARTS Share5 Java数组

数组: 在Java中,数组是用来存储一组数据类型相同的变量的值,这些变量共用一个变量名。Java中的数组可以是一维数组也可以是多维数组,其中一维数组使用的频率比较高。 一维数组: 一维数组的声明: type array-name[] = new type[size];或者type[] array-name = new type[size]; type :表示数组的数据类型 array-n

ARTS Share4 mysql中autocommit

MySQL中的事务(自动提交,显示和隐式),在MySQL中事务控制数据操作语句以确保它们是原子的。什么叫做原子的,也就是说这个事务要么成功,要么失败。 什么时候算事务成功或者失败? 当向数据库事务发送commit命令的时候,说明事务提交成功;相反,如果向数据库事务发送rollback命令,那么就说明此次的事务提交失败,所有执行过的SQL,数据会进行回滚到最初的状态。 当对数据库数据进行修改的