leetcode

简介: 在排序数组中查找元素的第一个和最后一个位置
classSolution {
public:
vector<int>searchRange(vector<int>&nums, inttarget) {
if(nums.empty()) return {-1,-1};
intl=0, r=nums.size() -1; //二分范围while( l<r)                   //查找元素的开始位置        {
intmid= (l+r )/2;
if(nums[mid] >=target) r=mid;
elsel=mid+1;
        }
if( nums[r] !=target) return {-1,-1};  //查找失败intL=r;
l=0, r=nums.size() -1;     //二分范围while( l<r)                   //查找元素的结束位置        {
intmid= (l+r+1)/2;
if(nums[mid] <=target ) l=mid;
elser=mid-1;
        }
return {L,r};
    }
};
相关文章
|
7月前
leetcode-472. 连接词
leetcode-472. 连接词
53 0
|
7月前
|
C++ Python
leetcode-283:移动零
leetcode-283:移动零
30 0
|
7月前
leetcode-827:最大人工岛
leetcode-827:最大人工岛
66 0
|
7月前
|
消息中间件 Kubernetes NoSQL
LeetCode 1359、1360
LeetCode 1359、1360
|
算法 Python
LeetCode 386. Lexicographical Numbers
给定一个整数 n, 返回从 1 到 n 的字典顺序。
91 0
LeetCode 386. Lexicographical Numbers
|
人工智能 算法
leetcode第41题
对于这种要求空间复杂度的,我们可以先考虑如果有一个等大的空间,我们可以怎么做。然后再考虑如果直接用原数组怎么做,主要是要保证数组的信息不要丢失。目前遇到的,主要有两种方法就是交换和取相反数。
leetcode第41题
leetcode第46题
这是自己开始想到的一个方法,考虑的思路是,先考虑小问题怎么解决,然后再利用小问题去解决大问题。没错,就是递归的思路。比如说, 如果只有 1 个数字 [ 1 ],那么很简单,直接返回 [ [ 1 ] ] 就 OK 了。 如果加了 1 个数字 2, [ 1 2 ] 该怎么办呢?我们只需要在上边的情况里,在 1 的空隙,也就是左边右边插入 2 就够了。变成 [ [ 2 1 ], [ 1 2 ] ]。
leetcode第46题
leetcode第39题
对回溯法又有了更深的了解,一般的架构就是一个大的 for 循环,然后先 add,接着利用递归进行向前遍历,然后再 remove ,继续循环。而解法二的动态规划就是一定要找到递进的规则,开始的时候就想偏了,导致迟迟想不出来。
leetcode第39题
|
存储
leetcode第56题
常规的思想,将大问题化解成小问题去解决。 假设给了一个大小为 n 的列表,然后我们假设 n - 1 个元素的列表已经完成了全部合并,我们现在要解决的就是剩下的 1 个,怎么加到已经合并完的 n -1 个元素中。 这样的话分下边几种情况, 我们把每个范围叫做一个节点,节点包括左端点和右端点。 1. 如下图,新加入的节点左端点和右端点,分别在两个节点之间。这样,我们只要删除
108 0
leetcode第56题
|
存储 算法 Java
leetcode第29题
这道题看起来简单,却藏了不少坑。首先,我们用一次一次减造成了超时,然后我们用递归实现了加倍加倍的减,接着由于 int 表示的数的范围不是对称的,最小的负数并不能转换为对应的相反数,所以我们将之前的算法思路完全逆过来,正数边负数,大于变小于,还是蛮有意思的。
101 0
leetcode第29题