笔试算法题思路
1. 两数之差的和
题目:定义一种计算f([4,2,0])=8,计算方式为求两两数之差的绝对值再加起来,(4-2)+(4-0)+(2-0)=8。
简单思路:两层循环,计算每两个数间的差值,时间复杂度
O
(
n
2
)
O(n^2)
O(n2)。
进阶思路:长度为n的数组,每个数都要计算n-1次。但这n-1次中作为被减数和减数的次数是不同的,例如,若是数组中最小的数,那会作n-1次减数,第二小的数会作1次被减数和n-2次减数。如此,我们先将数组排序(升序),result+=nums[i]*i,result-=nums[i]*(n-i-1),那nums[i]的n-1次计算已完成。排序时间复杂度
O
(
n
∗
l
o
g
(
n
)
)
O(n*log(n))
O(n∗log(n)),遍历时间复杂度
O
(
n
)
O(n)
O(n),最终时间复杂度
O
(
n
∗
l
o
g
(
n
)
)
O(n*log(n))
O(n∗log(n))。