- 返回数组中第K个最大的元素。比如nums = [3,2,1,6,5,4],k = 2,就返回5
【思路】首先注意一个问题,比如nums有重复值,比如[1,4,4,4,4,4],那么第二大的元素是4还是1?肯定是4,所以完全不需要对nums进行set去重,直接sort排序,对排序后且去重的nums取[-k]就是数组中第K个最大的元素。
以数据intervals表示若干个区间的集合,其中单个区间是intervals[i] = [start,end],请用python合并所有重叠区间,返回一个不重叠的区间数组。该数组需恰好覆盖输入数组中的所有区间。比如intervals=[[1,3],[2,6],[8,29],[30,99]],返回[[1,6],[8,29,][30,99]]。
【思路】这个我开始的想法是将intervals每个数组展开到一个新的list1里,然后for循环比较,如果相邻的左边比右边大,就删除两者。最后因为索引会溢出,强制加上最后一个,最后在恢复成两两一对的数组。但是这个做法是有问题的,首先不建议对list进行remove或者pop,因为会打乱索引,搞得局面很难收拾。其次如果因为索引超出,强制写死最后一个,如果最后一个又不是整个intervals最大值就很尴尬。所以这个最好的办法就是“排序 + 合并”。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21def merge(intervals):
if not intervals:
return []
# 按 start 排序
intervals.sort(key=lambda x: x[0])
merged = [intervals[0]] # 初始化合并后的列表
for current in intervals[1:]:
last = merged[-1]
# 如果当前区间的 start <= 上一个区间的 end → 重叠,合并
if current[0] <= last[1]:
merged[-1][1] = max(last[1], current[1])
else:
merged.append(current)
return merged
# 示例
intervals = [[1,3],[2,6],[8,29],[30,99]]
print(merge(intervals)) # 输出 [[1, 6], [8, 29], [30, 99]]mysql用唯一索引来去重,这个是什么原因?
唯一索引具备唯一性约束,即当在某个字段(或字段组合)上创建唯一索引后,MySQL 会自动检查插入或更新的数据是否违反唯一性约束。
a. 如果插入的数据与现有数据重复,MySQL 会抛出 Duplicate entry 错误(错误码 1062)。
b. 如果更新的数据导致唯一性冲突,也会报错。
比较常见的场景就是“防止用户重复提交表单(如投票、优惠券领取)”,由数据库层强制保证数据唯一性,无需应用层校验,但是可能增加写操作的延迟。这也是一种“防呆机制”的体现。