ARTS 打卡week03
每周完成一个 ARTS:
Algrithm: 每周至少做一个 LeetCode 的算法题
Review: 阅读并点评至少一篇英文技术文章
Tips: 学习至少一个技术技巧
Share: 分享一篇有观点和思考的技术文章
Algrithm
3. 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例
# 示例1
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
# 示例2
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
解析
unRepSubString.go
package leetCode
/*
** 解析:
** 判断一个字符串中最长无重复字符子串,可以通过滑动窗口实现
** 1.初始化窗口[]长度为1
** 2.窗口右边界向右移动,若该字符(假设a)在窗口中不存在,则窗口大小+1,左边界不动
** 3.若该字符在窗口中存在,分以下两种情况处理:
** a.若a在左边界右边(包括左边界),则左边界移动到a后面一个字符位置
** 4.若a在左边界的左边,则左边界不动,计算左右边界差值是否大于maxLen,是则替换
** 重复2 - 4
*/
func LengthOfLongestSubstring(s string) int {
maxSubStr := make(map[uint8]int, 1)
i, maxLen := 0, 0
// 空字符串,特殊处理
if s == "" {
return 0
}
for index := range s {
if n, ok := maxSubStr[s[index]] ; !ok {
if maxLen < index - i + 1 {
maxLen = index - i + 1
}
} else {
if n >= i {
i = maxSubStr[s[index]] + 1
} else {
if index - i + 1 > maxLen {
maxLen = index - i + 1
}
}
}
maxSubStr[s[index]] = index
}
return maxLen
}
unRepSubString_test.go
package leetCode
import "testing"
func TestLengthOfLongestSubstring(t *testing.T) {
s1, s2, s3, s4 := "", "abba", "abcabcbb", "tmmzuxt"
t.Logf("the max len of sub string is [%d]", LengthOfLongestSubstring(s1))
t.Logf("the max len of sub string is [%d]", LengthOfLongestSubstring(s2))
t.Logf("the max len of sub string is [%d]", LengthOfLongestSubstring(s3))
t.Logf("the max len of sub string is [%d]", LengthOfLongestSubstring(s4))
}
面试题64. 求1+2+…+n
求 1+2+...+n
,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例
# 示例1
输入: n = 3
输出: 6
# 示例2
输入: n = 9
输出: 45
解析
// 由题意可知可以通过递归实现
func sumNums(n int) int {
if n == 1 {
return 1
}
return sumNums(n-1) + n
}
Review
《If You Want To Be Rich, Stop Focusing On Your Salary (Do This Instead)》
说说我自己的经历吧,学习理财和时间也差不多有两年了。当初只是简单希望自己幸苦赚的钱不要贬值,以前余额宝的年化收益还有百分之三的样子,一万块钱一天大概有一块钱收益。现在已经丧心病狂地跌到一点五几了,每年CPI都差不多在二点几个百分比。也就是说你年初放在余额宝里面的一万,到年底实际价值已经没有一万了。如果把钱放在银行里面钱就更不值钱了。
为此自己学习了一些基金方面的理财知识,慢慢的从开始一个月100-200的收益,现在差不多一个月的收益平均在1600左右,虽然钱不是很多。也差不多把自己房租给抵消了。
今年因为疫情,目前处于离职在家待业的状态,正在安心复习准备面试。看网上很多人为此非常焦虑,我想多少是因为经济来源只有单一的工作导致的吧,所以我建议大家如果手上有==闲钱==,不要让他躺着,适当的投资或许会给你在某些特殊时刻带来一些助力。
基金相关的书我只看过一本《解读基金》,这里推荐给大家。
Tips
- golang for range 支持数组、切片、map、字符串和channel。
- 数组、切片、字符串返回索引和值;
- map 返回键和值;
- 通道(channel)只返回通道内的值;
- value, bool := map[key] map可以判断某个键值是否存在