提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
二分查找模板、左值二分模板、右值二分模板
作者:naruto-gyb
链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/solution/zuo-zhi-by-naruto-gyb-l152/
来源:力扣(LeetCode)34.在排序数组中查找元素的第一个和最后一个位置
class Solution {
public int[] searchRange(int[] nums, int target) {
int left = searchLeft(nums,target);
int right = searchRight(nums,target);
return new int[]{left,right};
}
/**
* 左值二分模板
*/
public int searchLeft (int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while (left <= right) {
// 防止溢出
int middle = (right - left) / 2 + left;
if (nums[middle] >= target) {
// 继续往左边找
right = middle - 1;
}else {
// 继续往右边找
left = middle + 1;
}
}
// 考虑目标值不在数组中的两种情况
if (left == nums.length || nums[left] != target) left = -1;
return left;
}
/**
* 右值二分模板
*/
public int searchRight (int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while (left <= right) {
// 防止溢出
int middle = (right - left) / 2 + left;
if (nums[middle] <= target) {
// 继续往右边找
left = middle + 1;
}else {
// 继续往左边找
right = middle - 1;
}
}
// 考虑目标值不在数组中的两种情况
if (right == -1 || nums[right] != target) right = -1;
return right;
}
}
数据结构
栈
Java中Deque与Stack
https://blog.csdn.net/suncunwei201503517/article/details/120173267
堆
利用优先队列实现小顶堆,取第k大元素
class KthLargest {
private int k;
private PriorityQueue<Integer> heap;
// 初始化,将所有的元素都插入堆中
public KthLargest(int k, int[] nums) {
this.k = k;
heap = new PriorityQueue<>(k);
for (int num : nums)
heap.add(num);
}
public int add(int val) {
// 将元素插入堆中
heap.add(val);
// 如果堆的大小超过 k,则将其多的元素删除
while (heap.size()>k){
heap.poll();
}
return heap.peek();
}
}