是进训练营之前就断断续续刷过的题了,因为想要找个督促自己刷题进的营。这里补个档,汇总一下前三天的题目:
1. 704.二分查找
int search(int* nums, int numsSize, int target){
int left = 0, right = numsSize;
int middle = 0;
while(left < right)
{
middle = (left + right)/2;
if(nums[middle] > target)
{
right = middle;
}
else if (nums[middle] < target)
{
left = middle + 1;
}
else
return middle;
}
return -1;
}
2. 27.移除元素
这道题目用两种方法都做了一遍,双指针法的思想确实巧妙,自己写出来之后感觉非常棒
int removeElement(int* nums, int numsSize, int val) {
#if 0
int read = 0, write = 0;
for(read = 0; read < numsSize; read++)
{
if(val != nums[read])
{
nums[write++] = nums[read];
}
}
return write;
#else
int left = 0, right = numsSize - 1;
while(left <= right)
{
while(left <= right && nums[left] != val)
{
++left;
}
while(left <= right && nums[right] == val)
{
--right;
}
if(left < right)
{
nums[left++] = nums[right--];
}
}
return left;
#endif
}