ARTS打卡 - 17
1. Algorithm
26. Remove Duplicates from Sorted Array
这是一道数组去重的题目,给定一个排序数组,去除数组中的重复元素,输出去重后的数组长度。要求空间复杂度为O(1)。题目本身比较简单,解题步骤如下:
- 通过两个值
preValue
与index
分别记录前一个值以及去重后数组的下标 - 遍历数组,比较当前元素与
preValue
的值,如果相等则继续遍历。如果不相等,则交换当前元素与index
的下一个元素。并记录新的preValue
值。 - 遍历完整个数组
代码如下:
1 | // 去除数组中重复元素 |
后来看了一下大神们的解法,发现没有必要单独声明一个preValue
,直接用新的下标就可以表示了,要更加简单一点。
2. Review
Don’t argue with default arguments
Kotlin默认参数的实现原理解析。
例如:
1 | fun main(args: Array<String>) { |
将上述代码Decompile为Java后:
1 |
|
可以看到上述func$default
方法有6个参数,var0
为Class对象,var1 ~var3
分别对应func
函数的三个参数,然后有一个int类型的var4
和一个Object类型的 var5
。var5
这个大多数情况下都为null,默认参数实现的秘密主要是在这个var 4
上, 看看这个方法的调用:
1 | // kotlin |
看到var4
的值为4。是由于原函数是第三个参数为默认参数,即 position = 2
位置的参数,所以 $var4 = 2^2=4$ 。在对比上述编译后的java代码, 可以看出来当var4 & 4 != 0
的时候,var3的值就等于默认参数。可以发现,func$default
函数的int类型的参数就是表示第几个参数的值是默认参数的。这个参数是通过位运算来计算的,例如index=0
和 index=2
的参数为默认参数,则 $var4 = 2^0 + 2^2 = 5$ 。
3. Tip
jenkins SSH执行命令只能调用/usr/bin里面的命令。而不去执行别的命令,所以只能在PATH内配置将别的路径下的命令通过软连接的方式关联起来。