由于实习工作的原因,电脑暂时没在身旁,博客滞后一天才发,并且得用手机写,甚是蛋疼😣,第一次居然就要偷点小懒了!
力扣原题:704二分查找
二分查找,其写起来看似简单,但其易错点在于两种不同写法导致的边界问题。一定要想清楚区间的含义是什么!
左闭右开写法:
public class Solution {
public int Search(int[] nums, int target)
{
int left=0;
int right=nums.Length;
int mid=(left+right)/2;
//左闭右开
while(left< right)
{
if(target<nums[mid])
{
right=mid;
mid=(left+right)/2;
}
else if(target>nums[mid])
{
left=mid+1;
mid=(left+right)/2;
}
else
{
return mid;
}
}
return -1;
}
}
左闭右闭写法:
public class Solution {
public int Search(int[] nums, int target)
{
int left=0;
int right=nums.Length-1;
int mid=(left+right)/2;
//左闭右闭
while(left<=right)
{
if(target<nums[mid])
{
right=mid-1;
mid=(left+right)/2;
}
else if(target>nums[mid])
{
left=mid+1;
mid=(left+right)/2;
}
else
{
return mid;
}
}
return -1;
}
}
力扣原题:27移除数组元素
移除数组元素,暴力的解法是通过两层for循环解决,使用快慢指针,就可以通过一个for循环干两个for循环的事情,这也是双指针的特点之一!使用双指针之前一定要弄明白每个指针之间的含义!
在27题当中,慢指针一直维护着更新数组后的下标,而快指针就去寻找要删除的元素!
public class Solution {
public int RemoveElement(int[] nums, int val)
{
int slow=0;
for(int fast=0;fast<nums.Length;fast++ )
{
if(nums[fast]!=val)
{
nums[slow]=nums[fast];
slow++;
}
}
return slow;
}
}