Learn More →
先用二分搜找最大值座標,再用二分搜找target
class Solution {
public:
int search(vector<int>& nums, int target)
{
int l=0,r=nums.size()-1,mid,tmp;
while(l<=r)
{
mid=(l+r)/2;
if(nums[mid]>=nums[0])
{
l=mid+1;
}
else
{
r=mid-1;
}
}
tmp=l;
l=0;
r=nums.size()-1;
if(nums[0]>target)
{
l=tmp;
}
else
{
r=tmp-1;
}
while(l<=r)
{
mid=(l+r)/2;
if(nums[mid]>=target)
{
r=mid-1;
}
else
{
l=mid+1;
}
}
return (l<nums.size()&&nums[l]==target)?l:-1;
}
};
Learn More →
20分鐘
完全自己解出
先把nums大小為0的解決,
再找到第一個大於等於target的座標,
再判斷是否為target的值,如果不是就是[-1,-1]
再找到第一個大於target的座標。
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
if(nums.size()==0)
{
return vector<int>{-1,-1};
}
int l=0,r=nums.size()-1,mid,tmp;
while(l<=r)
{
mid=(l+r)/2;
if(nums[mid]>=target)
{
r=mid-1;
}
else
{
l=mid+1;
}
}
tmp=l;
if(l<nums.size()&&nums[l]==target)
{
r=nums.size()-1;
while(l<=r)
{
mid=(l+r)/2;
if(nums[mid]>target)
{
r=mid-1;
}
else
{
l=mid+1;
}
}
return vector<int>{tmp,l-1};
}
return vector<int>{-1,-1};
}
};
Learn More →
15分鐘
完全自己解出
分成三種情況二分搜
-1:縮右界
1:縮左界
0:回傳答案
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
if(nums.size()==0)
{
return vector<int>{-1,-1};
}
int l=0,r=nums.size()-1,mid,tmp;
while(l<=r)
{
mid=(l+r)/2;
if(nums[mid]>=target)
{
r=mid-1;
}
else
{
l=mid+1;
}
}
tmp=l;
if(l<nums.size()&&nums[l]==target)
{
r=nums.size()-1;
while(l<=r)
{
mid=(l+r)/2;
if(nums[mid]>target)
{
r=mid-1;
}
else
{
l=mid+1;
}
}
return vector<int>{tmp,l-1};
}
return vector<int>{-1,-1};
}
};
5分鐘
完全自己解出
第一個二分搜:找出第一個大於0的
第二個二分搜:找出第一個大於等於0的
然後就能算了
class Solution {
public:
int maximumCount(vector<int>& nums) {
int l=0,r=nums.size()-1,mid,pos;
while(l<=r)
{
mid=(l+r)/2;
if(nums[mid]>0)
{
r=mid-1;
}
else
{
l=mid+1;
}
}
if(l>=nums.size()||nums[l]<=0)
{
pos=0;
}
else
{
pos=nums.size()-l;
}
l=0;
r=nums.size()-1;
while(l<=r)
{
mid=(l+r)/2;
if(nums[mid]>-1)
{
r=mid-1;
}
else
{
l=mid+1;
}
}
return max(pos,l);
}
};
21分鐘
完全自己解出
已填
該題求最長遞增子序列(Longest Increasing Subsequence)的長度。
Jun 7, 2024完全自己解出
May 30, 2024留言建議修訂請以 prune and search 解 selection problem。在以下 25 個數字中,要找出第 14 小的數。25 個數字依序為:15,18,12,10,12,4,6,14,10,1,3,5,1,5,20,3,4,10,7,5,1,15,2,4,8。分組方式為:第一組為第 1 到 5 個數字,第二組為第 6 到 10 個,依此類推。(A)請問第一回合找到的 p 值為多少?(B)請問第一回合,被刪去幾個數字?刪去的數字為何?
May 27, 2024image
May 20, 2024or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up