给定一个 n
个元素有序的(升序)整型数组
nums
和一个目标值 target
,写一个函数搜索
nums
中的
target
,如果目标值存在返回下标,否则返回
-1
。
示例 1:
示例 2:
提示:
- 你可以假设
nums
中的所有元素是不重复的。
n
将在 [1, 10000]
之间。
nums
的每个元素都将在
[-9999, 9999]
之间。
Code
240301
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n)
的算法。
示例 1:
示例 2:
示例 3:
提示:
1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums
为 无重复元素 的
升序 排列数组
-104 <= target <= 104
Code
240301
给你一个字符数组
letters
,该数组按非递减顺序排序,以及一个字符
target
。letters
里至少有两个不同的字符。
返回 letters
中大于 target
的最小的字符。如果不存在这样的字符,则返回 letters
的第一个字符。
示例 1:
示例 2:
示例 3:
提示:
2 <= letters.length <= 104
letters[i]
是一个小写字母
letters
按非递减顺序排序
letters
最少包含两个不同的字母
target
是一个小写字母
Code
240301
整数数组 nums
按升序排列,数组中的值
互不相同 。
在传递给函数之前,nums
在预先未知的某个下标
k
(0 <= k < nums.length
)上进行了
旋转,使数组变为
[nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]]
(下标
从 0 开始 计数)。例如, [0,1,2,4,5,6,7]
在下标 3
处经旋转后可能变为 [4,5,6,7,0,1,2]
。
给你 旋转后 的数组 nums
和一个整数
target
,如果 nums
中存在这个目标值
target
,则返回它的下标,否则返回 -1
。
你必须设计一个时间复杂度为 O(log n)
的算法解决此问题。
示例 1:
示例 2:
示例 3:
提示:
1 <= nums.length <= 5000
-104 <= nums[i] <= 104
nums
中的每个值都 独一无二
- 题目数据保证
nums
在预先未知的某个下标上进行了旋转
-104 <= target <= 104
Code
240301
已知一个长度为 n
的数组,预先按照升序排列,经由
1
到 n
次 旋转
后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7]
在变化后可能得到:
- 若旋转
4
次,则可以得到
[4,5,6,7,0,1,2]
- 若旋转
7
次,则可以得到
[0,1,2,4,5,6,7]
注意,数组 [a[0], a[1], a[2], ..., a[n-1]]
旋转一次 的结果为数组
[a[n-1], a[0], a[1], a[2], ..., a[n-2]]
。
给你一个元素值 互不相同 的数组 nums
,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的
最小元素 。
你必须设计一个时间复杂度为 O(log n)
的算法解决此问题。
示例 1:
示例 2:
示例 3:
提示:
n == nums.length
1 <= n <= 5000
-5000 <= nums[i] <= 5000
nums
中的所有整数 互不相同
nums
原来是一个升序排序的数组,并进行了 1
至 n
次旋转
Code
240301
已知一个长度为 n
的数组,预先按照升序排列,经由
1
到 n
次 旋转
后,得到输入数组。例如,原数组 nums = [0,1,4,4,5,6,7]
在变化后可能得到:
- 若旋转
4
次,则可以得到
[4,5,6,7,0,1,4]
- 若旋转
7
次,则可以得到
[0,1,4,4,5,6,7]
注意,数组 [a[0], a[1], a[2], ..., a[n-1]]
旋转一次 的结果为数组
[a[n-1], a[0], a[1], a[2], ..., a[n-2]]
。
给你一个可能存在 重复 元素值的数组 nums
,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的
最小元素 。
你必须尽可能减少整个过程的操作步骤。
示例 1:
示例 2:
提示:
n == nums.length
1 <= n <= 5000
-5000 <= nums[i] <= 5000
nums
原来是一个升序排序的数组,并进行了 1
至 n
次旋转
进阶:这道题与 寻找旋转排序数组中的最小值
类似,但 nums
可能包含重复元素。允许重复会影响算法的时间复杂度吗?会如何影响,为什么?
Code1
240301
Code2
240302
给你一个满足下述两条属性的 m x n
整数矩阵:
- 每行中的整数从左到右按非严格递增顺序排列。
- 每行的第一个整数大于前一行的最后一个整数。
给你一个整数 target
,如果 target
在矩阵中,返回 true
;否则,返回 false
。
示例 1:
示例 2:
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 100
-104 <= matrix[i][j], target <= 104
Code
240302
代码
测试用例
测试用例
测试结果
275. H 指数
II
已解答
中等
相关标签
相关企业
提示
给你一个整数数组 citations
,其中
citations[i]
表示研究者的第 i
篇论文被引用的次数,citations
已经按照
升序排列 。计算并返回该研究者的 h 指数。
h
指数的定义:h 代表“高引用次数”(high citations),一名科研人员的
h
指数是指他(她)的 (n
篇论文中)至少 有 h
篇论文分别被引用了至少 h
次。
请你设计并实现对数时间复杂度的算法解决此问题。
示例 1:
示例 2:
提示:
n == citations.length
1 <= n <= 105
0 <= citations[i] <= 1000
citations
按 升序排列
Code
240302
给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。
请你找出并返回只出现一次的那个数。
你设计的解决方案必须满足 O(log n)
时间复杂度和
O(1)
空间复杂度。
示例 1:
示例 2:
提示:
1 <= nums.length <= 105
0 <= nums[i] <= 105
Code
230302
符合下列属性的数组 arr
称为 山脉数组
:
arr.length >= 3
存在
(
)使得:
arr[0] < arr[1] < ... arr[i-1] < arr[i]
arr[i] > arr[i+1] > ... > arr[arr.length - 1]
给你由整数组成的山脉数组 arr
,返回满足
arr[0] < arr[1] < ... arr[i - 1] < arr[i] > arr[i + 1] > ... > arr[arr.length - 1]
的下标 i
。
你必须设计并实现时间复杂度为 O(log(n))
的解决方案。
示例 1:
示例 2:
示例 3:
提示:
3 <= arr.length <= 105
0 <= arr[i] <= 106
- 题目数据保证
arr
是一个山脉数组
Code
240302
给定一个 排序好 的数组 arr
,两个整数
k
和 x
,从数组中找到最靠近
x
(两数之差最小)的 k
个数。返回的结果必须要是按升序排好的。
整数 a
比整数 b
更接近 x
需要满足:
|a - x| < |b - x|
或者
|a - x| == |b - x|
且 a < b
示例 1:
示例 2:
提示:
1 <= k <= arr.length
1 <= arr.length <= 104
arr
按 升序 排列
-104 <= arr[i], x <= 104
Code
230302
给定一个包含非负整数的数组 nums
,返回其中可以组成三角形三条边的三元组个数。
示例 1:
示例 2:
提示:
1 <= nums.length <= 1000
0 <= nums[i] <= 1000
Code
230302
给你两个正整数数组 spells
和 potions
,长度分别为 n
和 m
,其中
spells[i]
表示第 i
个咒语的能量强度,potions[j]
表示第 j
瓶药水的能量强度。
同时给你一个整数 success
。一个咒语和药水的能量强度
相乘 如果 大于等于
success
,那么它们视为一对 成功
的组合。
请你返回一个长度为 n
的整数数组 pairs
,其中
pairs[i]
是能跟第 i
个咒语成功组合的
药水 数目。
示例 1:
示例 2:
提示:
n == spells.length
m == potions.length
1 <= n, m <= 105
1 <= spells[i], potions[i] <= 105
1 <= success <= 1010
Code
240302
已解答
中等
相关标签
相关企业
提示
给你一个整数数组 nums
和一个整数 target
。
请你统计并返回 nums
中能满足其最小元素与最大元素的
和 小于或等于 target
的
非空 子序列的数目。
由于答案可能很大,请将结果对 109 + 7
取余后返回。
示例 1:
示例 2:
示例 3:
提示:
1 <= nums.length <= 105
1 <= nums[i] <= 106
1 <= target <= 106
Code
230303
给你一个按照非递减顺序排列的整数数组 nums
,和一个目标值
target
。请你找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target
,返回
[-1, -1]
。
你必须设计并实现时间复杂度为 O(log n)
的算法解决此问题。
示例 1:
示例 2:
示例 3:
提示:
0 <= nums.length <= 105
-109 <= nums[i] <= 109
nums
是一个非递减数组
-109 <= target <= 109
Code1
240324
传统写法
Code2
240324
用了STL
给你一个非负整数 x
,计算并返回 x
的
算术平方根 。
由于返回类型是整数,结果只保留 整数部分
,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如
pow(x, 0.5)
或者 x ** 0.5
。
示例 1:
示例 2:
提示:
Code
240324
已知存在一个按非降序排列的整数数组 nums
,数组中的值不必互不相同。
在传递给函数之前,nums
在预先未知的某个下标
k
(0 <= k < nums.length
)上进行了
旋转 ,使数组变为
[nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]]
(下标
从 0 开始 计数)。例如,
[0,1,2,4,4,4,5,6,6,7]
在下标 5
处经旋转后可能变为 [4,5,6,6,7,0,1,2,4,4]
。
给你 旋转后 的数组 nums
和一个整数
target
,请你编写一个函数来判断给定的目标值是否存在于数组中。如果
nums
中存在这个目标值 target
,则返回
true
,否则返回 false
。
你必须尽可能减少整个操作步骤。
示例 1:
示例 2:
提示:
1 <= nums.length <= 5000
-104 <= nums[i] <= 104
- 题目数据保证
nums
在预先未知的某个下标上进行了旋转
-104 <= target <= 104
进阶:
- 这是 搜索旋转排序数组
的延伸题目,本题中的
nums
可能包含重复元素。
- 这会影响到程序的时间复杂度吗?会有怎样的影响,为什么?
Code
240324
峰值元素是指其值严格大于左右相邻值的元素。
给你一个整数数组
nums
,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回
任何一个峰值 所在位置即可。
你可以假设 nums[-1] = nums[n] = -∞
。
你必须实现时间复杂度为 O(log n)
的算法来解决此问题。
示例 1:
示例 2:
提示:
1 <= nums.length <= 1000
-231 <= nums[i] <= 231 - 1
- 对于所有有效的
i
都有
nums[i] != nums[i + 1]
Code1
240324
Code2
240324
这个二分的速度居然没有直接遍历快
给你一个下标从 1 开始的整数数组 numbers
,该数组已按 非递减顺序排列
,请你从数组中找出满足相加之和等于目标数 target
的两个数。如果设这两个数分别是 numbers[index1]
和
numbers[index2]
,则
1 <= index1 < index2 <= numbers.length
。
以长度为 2 的整数数组 [index1, index2]
的形式返回这两个整数的下标 index1
和
index2
。
你可以假设每个输入 只对应唯一的答案 ,而且你
不可以 重复使用相同的元素。
你所设计的解决方案必须只使用常量级的额外空间。
示例 1:
示例 2:
示例 3:
提示:
2 <= numbers.length <= 3 * 104
-1000 <= numbers[i] <= 1000
numbers
按 非递减顺序 排列
-1000 <= target <= 1000
- 仅存在一个有效答案
Code
240324
给定一个含有 n
个正整数的数组和一个正整数
target
。
找出该数组中满足其总和大于等于 target
的长度最小的
连续
子数组
[numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回
0
。
示例 1:
示例 2:
示例 3:
提示:
1 <= target <= 109
1 <= nums.length <= 105
1 <= nums[i] <= 105
进阶:
- 如果你已经实现
O(n)
时间复杂度的解法, 请尝试设计一个
O(n log(n))
时间复杂度的解法。
Code
240324
给你一棵 完全二叉树 的根节点 root
,求出该树的节点个数。
完全二叉树
的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第
h
层,则该层包含 1~ 2h
个节点。
示例 1:
示例 2:
示例 3:
提示:
- 树中节点的数目范围是
[0, 5 * 104]
0 <= Node.val <= 5 * 104
- 题目数据保证输入的树是 完全二叉树
进阶:遍历树来统计节点是一种时间复杂度为
O(n)
的简单解决方案。你可以设计一个更快的算法吗?
Code
240325
给你一个按照非递减顺序排列的整数数组 nums
,和一个目标值
target
。请你找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target
,返回
[-1, -1]
。
你必须设计并实现时间复杂度为 O(log n)
的算法解决此问题。
示例 1:
示例 2:
示例 3:
提示:
0 <= nums.length <= 105
-109 <= nums[i] <= 109
nums
是一个非递减数组
-109 <= target <= 109
Code
240716