解决哪类问题

:::success 线性数组查找指定元素/元素坐标 :::

代码模板

简单版

  1. int bs(int[] arr, int l, int r, int target) { // 找到最靠近target且>=target的index
  2. while (l < r) {
  3. int mid = (r - l) / 2 + l;
  4. if (arr[mid] < target) {
  5. l = mid + 1;
  6. } else {
  7. r = mid;
  8. }
  9. }
  10. return l;
  11. }

完整版

  1. int findBoundary(int[] nums, int target, int direction) {
  2. int left = 0, right = nums.length - 1;
  3. while (left <= right) {
  4. int mid = left + (right - left) / 2;
  5. if (nums[mid] < target) {
  6. // 更新left
  7. left = mid + 1;
  8. } else if (nums[mid] > target) {
  9. // 更新right
  10. right = mid - 1;
  11. } else if (nums[mid] == target) {
  12. if (direction == 0) {
  13. // 找左边界,收缩右边界
  14. right = mid - 1;
  15. } else {
  16. // 找右边界,收缩左边界
  17. left = mid + 1;
  18. }
  19. }
  20. }
  21. if (direction == 0) {
  22. if (left >= nums.length || nums[left] != target)
  23. return -1;
  24. return left;
  25. } else {
  26. if (right < 0 || nums[right] != target)
  27. return -1;
  28. return right;
  29. }
  30. }

复杂度

O(logn)

运用思想

分治

例题

题目 难度 推荐指数
4. 寻找两个正序数组的中位数 困难 🤩🤩🤩🤩
29. 两数相除 中等 🤩🤩🤩
33. 搜索旋转排序数组 中等 🤩🤩🤩🤩🤩
34. 在排序数组中查找元素的第一个和最后一个位置 中等 🤩🤩🤩🤩🤩
35. 搜索插入位置 简单 🤩🤩🤩🤩🤩
74. 搜索二维矩阵 中等 🤩🤩🤩🤩
81. 搜索旋转排序数组 II 中等 🤩🤩🤩🤩
153. 寻找旋转排序数组中的最小值 中等 🤩🤩🤩
154. 寻找旋转排序数组中的最小值 II 困难 🤩🤩🤩
162. 寻找峰值 中等 🤩🤩🤩🤩🤩
220. 存在重复元素 III 中等 🤩🤩🤩
240. 搜索二维矩阵 II 中等 🤩🤩🤩🤩
274. H 指数 中等 🤩🤩🤩
275. H 指数 II 中等 🤩🤩🤩
278. 第一个错误的版本 简单 🤩🤩🤩🤩
334. 递增的三元子序列 中等 🤩🤩🤩🤩
352. 将数据流变为多个不相交区间 困难 🤩🤩🤩🤩
354. 俄罗斯套娃信封问题 困难 🤩🤩🤩
363. 矩形区域不超过 K 的最大数值和 困难 🤩🤩🤩
367. 有效的完全平方数 简单 🤩🤩🤩🤩🤩
373. 查找和最小的K对数字 中等 🤩🤩🤩🤩🤩
374. 猜数字大小 简单 🤩🤩🤩
441. 排列硬币 简单 🤩🤩🤩
475. 供暖器 中等 🤩🤩🤩🤩
528. 按权重随机选择 中等 🤩🤩🤩🤩
540. 有序数组中的单一元素 中等 🤩🤩🤩🤩
611. 有效三角形的个数 中等 🤩🤩🤩🤩
704. 二分查找 简单 🤩🤩🤩🤩🤩
728. 自除数 简单 🤩🤩🤩
744. 寻找比目标字母大的最小字母 简单 🤩🤩🤩🤩🤩
778. 水位上升的泳池中游泳 困难 🤩🤩🤩
786. 第 K 个最小的素数分数 中等 🤩🤩🤩
852. 山脉数组的峰顶索引 简单 🤩🤩🤩🤩🤩
911. 在线选举 中等 🤩🤩🤩🤩🤩
981. 基于时间的键值存储 中等 🤩🤩🤩🤩
1004. 最大连续1的个数 III 中等 🤩🤩🤩
1011. 在 D 天内送达包裹的能力 中等 🤩🤩🤩🤩
1044. 最长重复子串 困难 🤩🤩🤩🤩
1208. 尽可能使字符串相等 中等 🤩🤩🤩
1337. 矩阵中战斗力最弱的 K 行 简单 🤩🤩🤩
1414. 和为 K 的最少斐波那契数字数目 中等 🤩🤩🤩🤩
1438. 绝对差不超过限制的最长连续子数组 中等 🤩🤩🤩
1482. 制作 m 束花所需的最少天数 中等 🤩🤩🤩
1707. 与数组中元素的最大异或值 困难 🤩🤩🤩
1713. 得到子序列的最少操作次数 困难 🤩🤩🤩
1751. 最多可以参加的会议数目 II 困难 🤩🤩🤩
1818. 绝对差值和 中等 🤩🤩🤩🤩🤩
1838. 最高频元素的频数 中等 🤩🤩🤩
1894. 找到需要补充粉笔的学生编号 中等 🤩🤩🤩🤩
1984. 学生分数的最小差值 简单 🤩🤩🤩🤩🤩
2055. 蜡烛之间的盘子 中等 🤩🤩🤩🤩
剑指 Offer 53 - I. 在排序数组中查找数字 I 简单 🤩🤩🤩🤩🤩
剑指 Offer II 069. 山峰数组的顶部 简单 🤩🤩🤩🤩🤩