LeetCode-34-Search for a Range(C语言实现)
2018-01-02 20:59
921 查看
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int bsearchLeft(int array[],int low,int high,int target)
{
while(low<=high)
{
int mid=(low+high)/2;
if(array[mid]>target || array[mid]==target && array[mid-1]==target)
high=mid-1;
else if(array[mid]<target)
low=mid+1;
else
return mid;
}
return-1;
}
int bsearchRight(int array[],int low,int high,int target)
{
while(low<=high)
{
int mid=(low+high)/2;
if(array[mid]>target)
high=mid-1;
else if(array[mid]<target || array[mid]==target && array[mid+1]==target)
low=mid+1;
else
return mid;
}
return-1;
}
int* searchRange(int* nums, int numsSize, int target, int* returnSize) {
int l, r, i;
int *res = (int*)malloc(sizeof(int) * numsSize);
*returnSize = 2;
if(numsSize == 0 || nums[0] > target || nums[numsSize-1] < target){
res[0] = -1;
res[1] = -1;
return res;
}
if(nums[0] == target){
l = 0;
r = bsearchRight(nums,0,numsSize-1,target);
}
else if(nums[numsSize-1] == target){
l = bsearchLeft(nums,0,numsSize-1,target);
r = numsSize - 1;
}
else{
l = bsearchLeft(nums,0,numsSize-1,target);
r = bsearchRight(nums,0,numsSize-1,target);
}
res[0] = l;
res[1] = r;
return res;
}
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int bsearchLeft(int array[],int low,int high,int target)
{
while(low<=high)
{
int mid=(low+high)/2;
if(array[mid]>target || array[mid]==target && array[mid-1]==target)
high=mid-1;
else if(array[mid]<target)
low=mid+1;
else
return mid;
}
return-1;
}
int bsearchRight(int array[],int low,int high,int target)
{
while(low<=high)
{
int mid=(low+high)/2;
if(array[mid]>target)
high=mid-1;
else if(array[mid]<target || array[mid]==target && array[mid+1]==target)
low=mid+1;
else
return mid;
}
return-1;
}
int* searchRange(int* nums, int numsSize, int target, int* returnSize) {
int l, r, i;
int *res = (int*)malloc(sizeof(int) * numsSize);
*returnSize = 2;
if(numsSize == 0 || nums[0] > target || nums[numsSize-1] < target){
res[0] = -1;
res[1] = -1;
return res;
}
if(nums[0] == target){
l = 0;
r = bsearchRight(nums,0,numsSize-1,target);
}
else if(nums[numsSize-1] == target){
l = bsearchLeft(nums,0,numsSize-1,target);
r = numsSize - 1;
}
else{
l = bsearchLeft(nums,0,numsSize-1,target);
r = bsearchRight(nums,0,numsSize-1,target);
}
res[0] = l;
res[1] = r;
return res;
}
相关文章推荐
- LeetCode-34-Search for a Range Python实现lower_bound
- python实现 LeetCode34——Search for a Range
- leetcode 34. Search for a Range | Java最短代码实现
- leetcode 34. Search for a Range(C语言,查询范围)46
- [leetcode]34. Search for a Range(Java实现)
- [C语言][LeetCode][34]Search for a Range
- [leetcode 34] search for a range
- [leetcode] 34. Search for a Range
- LeetCode-34-Search for a Range(二分法)-Medium
- leetcode 34. Search for a Range
- python写算法题:leetcode: Add to List 34. Search for a Range
- LeetCode 34. Search for a Range
- [leetcode]34. Search for a Range
- LeetCode 34. Search for a Range
- LeetCode34 Search for a Range
- Leetcode--34--Search for a Range
- leetcode——34search-for-a-range
- [leetcode 34] Search for a Range
- LeetCode 34. Search for a Range
- Leetcode 34 Search for a Range