702.二分查找
题目链接:二分查找
文章讲解:代码随想录.二分查找
视频讲解:手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_哔哩哔哩_bilibili
二分前提:有序数组,数组中无重复元素
方法:结合数组的特征,可以为左闭右闭区间[0, 数组长度-1],或者左闭右开区间[0, 数组长度)。
思考:左开右开区间,左开右闭区间,会怎样?
小细节:
1. 加减运算符优先级高于位移运算符
2. 求两个数的中间值:mid = start + (end - start >> 1)
int search(int* nums, int numsSize, int target){
int mid, start, end = 0;
/*左闭右开区间*/
for(start = 0, end = numsSize - 1; start <= end;)
{
mid = start + (end - start >> 1);
if(target == nums[mid])
{
return mid;
}
else if(target > nums[mid])
{
start = mid + 1;
}
else if(target < nums[mid])
{
end = mid - 1;
}
}
return -1;
}
int search(int* nums, int numsSize, int target){
int mid, start, end = 0;
/*左闭右开区间*/
for(start = 0, end = numsSize; start < end;)
{
mid = start + (end - start >> 1);
if(target == nums[mid])
{
return mid;
}
else if(target > nums[mid])
{
start = mid + 1;
}
else if(target < nums[mid])
{
end = mid;
}
}
return -1;
}
27.移除元素
题目链接:移除元素
文章讲解:代码随想录.快慢指针
视频讲解:数组中移除元素并不容易! | LeetCode:27. 移除元素文章来源:https://www.toymoban.com/news/detail-598788.html
踩坑:快慢指针角色必须如此吗?尝试慢指针判断数值,快指针++未成功,二刷再看看文章来源地址https://www.toymoban.com/news/detail-598788.html
int removeElement(int* nums, int numsSize, int val){
int i, j = 0;
for(i = 0, j = 0; j < numsSize; j++)
{
/*j:快指针,用于获取满足要求的数值*/
if(val != nums[j])
{
/*i:慢指针,用来记录最终的数组下标*/
nums[i++] = nums[j];
}
}
return i;
}
int removeElement(int* nums, int numsSize, int val){
int i, j, cnt = 0;
if(1 == numsSize)
{
if(val == nums[0])
{
return 0;
}
else
{
return 1;
}
}
/*暴力解法*/
for(i = 0; i < numsSize - cnt; )
{
if(val == nums[i])
{
for(j = i; j < numsSize - cnt - 1; j++)
{
nums[j] = nums[j + 1];
}
cnt++;
}
else
{
i++;
}
}
return (numsSize - cnt);
}
到了这里,关于【代码随想录算法第一天| 704.二分查找 27.移除元素】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!