Q: 这里的时间复杂度是 n 还是 n^2
func moveZeroes(nums []int) {
j:=0
for i:=0; i<len(nums); i++{
if nums[j] == 0 {
// nums = append(nums[:j], append(nums[j+1:], nums[j])...)
nums = append(nums[:j], nums[j+1:]...)
nums = append(nums, 0)
j--
}
j++
}
}
A: 这里值得注意的是 nums = append(nums[:j], nums[j+1:]...) 这条语句, 它的作用不是 添加而是删除 下标为 j 的元素,在数组中,插入和删除元素的时间复杂度是 O(n), 由于外层 for 循环 的关系,这里的整体时间复杂度是 O(n^2)
Q: 检测环的时候使用快慢指针,走2步和走多步哪个效率高,怎么证明?
https://code-examples.net/zh-CN/q/4e4806
Q: 网上说链表和数组的插入性能都是o(n) ,这块是什么情况?
A: 数组的插入 O(n) 的复杂度毫无疑问,但是链表的插入为 O(n) 是有问题的,在这里,链表在某个点插入新的结点的时间复杂度是 O(1), 但是在找到这个位置的过程时间复杂度是 O(n), 注意把握概念。
A: 这里值得注意的是
nums = append(nums[:j], nums[j+1:]...)这条语句, 它的作用不是 添加而是删除 下标为 j 的元素,在数组中,插入和删除元素的时间复杂度是 O(n), 由于外层 for 循环 的关系,这里的整体时间复杂度是 O(n^2)https://code-examples.net/zh-CN/q/4e4806
A: 数组的插入 O(n) 的复杂度毫无疑问,但是链表的插入为 O(n) 是有问题的,在这里,链表在某个点插入新的结点的时间复杂度是 O(1), 但是在找到这个位置的过程时间复杂度是 O(n), 注意把握概念。