1. Algorithm
1.1 169. 多数元素
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:输入: [3,2,3] 输出: 3
示例 2:
输入: [2,2,1,1,1,2,2] 输出: 2
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/majority-element
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
这一题算是非常简单的了,看到题干我甚至有点泪流满面:这真是我浏览到现在LeetCode上最简单的一题了。
解法一:利用哈希
最简单的思路,利用哈希存储元素 --> 出现的次数
,然后找出出现次数大于 n/2
的元素,而且根据题干,这题有且仅有一个答案。
class Solution:
def majorityElement(self, nums: List[int]) -> int:
# 存储 元素 --> 出现的次数
element_dict = {}
for element in nums:
# 为字典设置计数器
count = element_dict.get(element)
if count:
element_dict[element] += 1
else:
element_dict[element] = 1
half_size = len(nums) / 2
for k, v in element_dict.items():
# 遍历计数器,找出大于n/2的元素
if v > half_size:
return k
此种解法基本上都能想到,而且提交的表现也不佳。
解法二:排序
接下来我去看了下题解,发现原来排序也可以解出此题,因为要找出出现次数大于n/2
的元素,那么排序之后n/2
处的元素比如是答案。
此处偷懒直接使用python的默认排序方法:
class Solution:
def majorityElement(self, nums: List[int]) -> int:
nums.sort()
return nums[len(nums) // 2]
2. Review: Agile Initiative Planning with Roadmaps
这是一篇长文,我决定花两到三周的时间去读完,也作为Review板块的新尝试:精读。搞清楚文章涉及到的背景知识、读完之后记录一下不认识的单词、归纳总结一下文章大意以及自己的感想,最后尝试自己用英语写一写。
我想读英文文章不仅仅是一周读一篇就完成了,还是要深入读,要达成三个目标:
- 练习英语阅读
- 学习文章知识
- 尝试英语写作
2.1 背景知识:什么是Agile
Agile在韦伯词典中解释是:
- marked by ready ability to move with quick easy grace
- having a quick resourceful and adaptable character
都有一点改变的迅速并且优雅的意思。
如果看一些有关软件工程或项目管理类的应该文章,Agile一词是经常出现的,中文其实就是敏捷。
不知道有多少人和我一样认为敏捷就是Scrum,不过查阅了一些资料之后才明白,原来是Agile是一种思维,而Scrum是一种方法论,也就是说直接指导我们应用敏捷。
2.2 参考资料
https://www.cnblogs.com/JackMa/p/5267553.html
3. Tip
3.1 遍历Lua中的table
我在项目中应用到redis的情况非常多,而且很多时候考虑到原子性等问题,也常常会写一点Lua脚本。之前都是写到哪查到哪,这次我稍稍做一点总结。
在Lua中字典与数组都是通过table实现的。其实也还算好理解,相比较于字典,数组可以理解为key为索引的字典。
遍历table有三种方式
1. ipairs
list = {}
for index, v in ipairs(dic) do
print(index, ". ", value)
end
从方法的表述中可以看到,ipairs
更多的是用来迭代数组类型的table,并且它是有序的,停止条件为第一个为nil
的值。也就是说如果有索引中断的情况,后面的值不会被遍历到。
2. pairs
dic = {}
for k, v in pairs() do
-- do something
end
可以看出,用pairs
遍历table时更加符合将table当成字典用的场景,而且其遍历时也不保证顺序。
3. for i 遍历
从前开始遍历:
for i = 1, #numeric_table do
print(i, ". ", numeric_table[i])
end
从后开始遍历:
for i = #numeric_table, 1, -1 do
print(i, ". ", numeric_table[i])
end
用lua来操作redis的话常需要迭代查询到的结果,不过其形式可能是:
['value1', 'key1', 'value2', 'key2']
,需要我们一次迭代两个元素。
观察第二种遍历方式其实可以发现其终极形态是:for i=初始值, 最终值, 每次递增多少
。
因此1, 3, 5, 7 这样遍历可以写成如下形式:
for i = 1, #numeric_table, 2 do
print(i, ". ", numeric_table[i], ".", numeric_table[i + 1])
end
参考资料
https://lua.programmingpedia.net/en/tutorial/676/tables
4. Share
最近团队开始补足自动化测试,经过调研之后决定从接口测试开始。
这是一篇未写完的小文