今天的两个题是数组的基本操作,二分查找和移除元素。
二分查找: 可以直接用1个for循环来实现,时间复杂度是O(n)。 如果用二分查找,时间复杂度是O(logn),但是要注意二分查找的前提,有序数组。 另外,二分查找的while边界和right赋值很容易出错,要理解并记忆。
移除元素: 如果直接用两个for循环完成,时间复杂度是O(n^2)。 如果用双指针,可以做一个for循环内完成,有快慢指针和相向指针两种算法。 其中快慢指针的快指针,作为for循环的index,如果快指针的值不等于val,就赋值给慢指针,慢指针跟着走一步;如果等于了,快指针走,慢指针不走,也不赋值。 这个解法可以保证顺序不变,但是全部元素都要移位。因此,还可以用while实现相向指针,减少元素的赋值,但是不能保证元素顺序。 while看到了三种写法,后续补充。
语法错误 list索引和取值