第一次用csdn发布文章,有点茫然,也有点小紧张。
今天打卡的是二分法查找
学习的二分法查找内容:链接:【算法】二分查找_Wang_Xin_Ling的博客-CSDN博客
先上题目:
第一题:链接:力扣
思路:只需简单的二分法即可
代码:
int search(int* nums, int numsSize, int target)
{
for(int left=0,right=numsSize-1;left<=right;)
{
int mid=(left+right)/2;
if(target==nums[mid]) return(mid);
if(target<nums[mid]) right=mid-1;
if(target>nums[mid]) left=mid+1;
}
return -1;
}
需要注意一下,哪些数是具体数值意义的数,哪些数是用于表示位置的数。
第三题:
题目: 力扣
思路:运用二分法,对left和right所在的位置的值的和与目标数比较,此时left与right的和就相当于常规二分法的mid。
代码:
int* twoSum(int* arr, int len, int t, int* returnSize){
int i=0, j=len-1;
while(i<j){
if(arr[i]+arr[j] > t)
j--;
else if(arr[i]+arr[j] < t)
i++;
else
break;
}
int *ret = (int *)malloc(sizeof(int) * 2);
ret[0] = i+1;
ret[1] = j+1;
*returnSize = 2;
return ret;
}
不过一开始做此题时,没有理解此部分的含义。待日后询问老师同学解决
int *ret = (int *)malloc(sizeof(int) * 2);
ret[0] = i+1;
ret[1] = j+1;
*returnSize = 2;
return ret;