# 线性表:86,16,27,732
# 86. 分隔链表
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
# 题解 模拟
使用两个链表small,lager,然后对原有列表进行遍历,大于或者等于x,则放入lager,小于x则放入 small,遍历结束之后,small 和 lager 进行合并。
# 16. 最接近的三数之和
给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。
返回这三个数的和。
假定每组输入只存在恰好一个解。
# 题解 暴力求解
三重循环求出,所有的三元数组,然后求出其中的target的差值。
对三元数组的求法进行优化
- 对数组进行升序排列
- 枚举第一个元素a, 剩余的b c两个元素
- 因为数组为升序,则
- b c 可枚举的范围为 [i+1,n)
- 对此枚举过程再次优化
- 因数组为升序,可以双指针进行二分查找
- 存储此时最小的绝对值
# 27. 移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
# 题解
双指针,对数组进行遍历操作,首尾遍历,
- 如果此时 left 小标元素等于val,则将right下标元素复制给此时left,right下标 - 1
- 遍历到 right 结束
# 732. 我的日程安排表 III
当 k 个日程安排有一些时间上的交叉时(例如 k 个日程安排都在同一时间内),就会产生 k 次预订。
给你一些日程安排 [start, end) ,请你在每个日程安排添加后,返回一个整数 k ,表示所有先前日程安排会产生的最大 k 次预订。
实现一个 MyCalendarThree 类来存放你的日程安排,你可以一直添加新的日程安排。
- MyCalendarThree() 初始化对象。
- int book(int start, int end) 返回一个整数 k ,表示日历中存在的 k 次预订的最大值。