704. 二分查找
二分查找其实可以使用分治思想递归,但是效率有点低,所以这里使用while语句进行简化。
除此之外,在指针移动时要特别区间是否有-1,主要是看末尾是开区间还是闭区间,
以列表[3,4,8,9]为例
- 如果是闭区间的话,其闭区间表示为(0,3],那么right == left是有意义的,所以判断条件应该设置为left<=right,此时middle的左边一位将作为下一轮迭代的右边界,因为是闭区间,所以依据循环不变量原理(也就是保持闭区间的左闭右闭的性质),right是被闭区间选中的,所以right更新为middle-1
- 而开区间则表示为(0,4),此时,right==left在非空列表下不可能发生,所以判断条件可以设置为left<right,当进入第二次迭代时,对于开区间区间而言,根据循环不变量原理,right是不会被选中的,所以right要设置为middle,这样right的左边一位才会被选中,因此right应该更新为middle。
- 循环不变量最贴近实践的一次

1. 使用内置的 sorted() 函数
sorted() 函数可以对任何可迭代对象进行排序,并返回一个新的列表。
sorted_numbers = sorted(numbers, key=None, reverse=False);
sorted_students = sorted(students, key=lambda x: x["age"])
2. 使用列表的 sort() 方法
sort() 方法是列表对象的一个方法,用于对列表本身进行原地排序,不会返回新的列表。numbers.sort();
list.sort(key=None, reverse=False);
students.sort(key=lambda x: (x["age"], x["name"]))
3. 使用 numpy 库的排序功能
如果需要处理数值数据,可以使用 numpy 库中的排序功能。sorted_numbers = np.sort(numbers)
参数说明
- numpy.sort(a, axis=-1, kind=None, order=None)
- a:需要排序的数组。
- axis:指定排序的轴。对于一维数组,默认值为 -1,表示对整个数组排序;对于多维数组,可以指定轴方向。
- kind:指定排序算法,可选值有 'quicksort'(快速排序,默认值)、'mergesort'(归并排序)、'heapsort'(堆排序)等。
- order:用于指定排序的字段顺序,仅在数组是结构化数组时使用。
4. 使用 pandas 库的排序功能
如果需要处理表格数据,可以使用 pandas 库中的排序功能。
DataFrame.sort_values(by=“”, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)
27. 移除元素
快慢指针,用while循环,用fast<=len-1进行条件判断;
也可以用python自带的函数

977.有序数组的平方
1821

被折叠的 条评论
为什么被折叠?



