LeetCode 704二分查找
题目链接:704.二分查找
新手还不会,时间也有点紧,所以先潦草编写一下,之后再来修改吧。主要是我考研时学了编程了相似的,所以感觉不是很难。
我自己的代码如下:
int search(int* nums, int numsSize, int target) {
int low=0,high=numsSize-1;//那就是numSize没理解对,要减一
while(low <= high){
int mid=(low + high )/2;
if(nums[mid]==target){
//找到了,且特殊情况:元素不重复,升序
return mid;
}else if (nums[mid]<=target){
low=mid+1;
}else{
high = mid-1;
}
}
return -1;
}
接下来,就是:
LeetCode 704二分查找
题目链接: LeetCode 27.移除元素
我自己的根据之前的知识经验写的代码是这样的:
int removeElement(int* nums, int numsSize, int val) {
int length=numsSize,j=1;//j=1表示指向最后一个元素
for(int i=0;i<length;){
if(nums[i]==val){
length--;
nums[i]=nums[numsSize-j];//将最后的元素往前进行覆盖,不动继续比较
j++;
}else{
i++;
}
}
return length;
}
而大佬们就想到运算更快的方法:使用快慢”指针“
int removeElement(int* nums, int numsSize, int val) {
int index=0;
//从0开始,因为第一个元素也要判断
for(int i=0;i<numsSize;i++)
{
if(nums[i]!=val)
{
nums[index]=nums[i];
index+=1;
}
}
return index;
}