2020M7W2 ARTS

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板块的新尝试:精读。搞清楚文章涉及到的背景知识、读完之后记录一下不认识的单词、归纳总结一下文章大意以及自己的感想,最后尝试自己用英语写一写。

我想读英文文章不仅仅是一周读一篇就完成了,还是要深入读,要达成三个目标:

  1. 练习英语阅读
  2. 学习文章知识
  3. 尝试英语写作

2.1 背景知识:什么是Agile

Agile在韦伯词典中解释是:

  1. marked by ready ability to move with quick easy grace
  2. having a quick resourceful and adaptable character

都有一点改变的迅速并且优雅的意思。

如果看一些有关软件工程或项目管理类的应该文章,Agile一词是经常出现的,中文其实就是敏捷

不知道有多少人和我一样认为敏捷就是Scrum,不过查阅了一些资料之后才明白,原来是Agile是一种思维,而Scrum是一种方法论,也就是说直接指导我们应用敏捷。

2.2 参考资料

https://www.cnblogs.com/JackMa/p/5267553.html

scrum和agile敏捷的区别

SCRUM官方权威指南

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

最近团队开始补足自动化测试,经过调研之后决定从接口测试开始。

这是一篇未写完的小文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值