一、二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
写二分查找时注意区间是左闭右开还是左闭右闭
int search(int* nums, int numsSize, int target){
int left = 0;
int right = numsSize-1;
int mid = 0;
while(left<=right)
{
mid = (left+right)/2;
if(nums[mid]<target)
{
left = mid+1;
}
else if(nums[mid]>target)
{
right = mid-1;
}
else if(nums[mid]==target)
{
return mid;
}
}
return -1;
}
二、移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
(1)暴力解法
通过两个for循环的嵌套 第一个循环找val值 第二个循环在找到val值后进行值的覆盖
int removeElement(int* nums, int numsSize, int val){
int i = 0;
int j = 0;
for (i = 0; i < numsSize; i++)
{
if (nums[i] == val)
{
for (j = i + 1; j < numsSize; j++)
{
nums[j-1] = nums[j];
}
i--;
numsSize--;
}
}
return numsSize;
}
(2)二指针法
通过一个fast指针寻找需要放入新数组中的元素也就是非val元素,一个slow指针来确定放入的位置
int removeElement(int* nums, int numsSize, int val){
int fast = 0;
int slow = 0;
for(fast=0;fast<numsSize;fast++)
{
if(nums[fast]!=val)
{
nums[slow]=nums[fast];
slow++;
}
}
return slow;
}