做事情,在没有人的监督下,经常半途而废,虽参加此训练营。希望有所改变
704二分查找
不难,主要是要找出停止条件,主要开闭区间即可,时间: O(logn) ,空间 O(logn) .
class Solution {
public:
int search(vector<int>& nums, int target) {
//默认是升序
int start_index,end_index,mid_index;
int size=nums.size();
if(size<=0){
return -1;
}
start_index=0;
end_index=size-1;
while(start_index<=end_index){
mid_index=(end_index+start_index)>>1;
if(nums[mid_index]==target){
return mid_index;
}
else if(nums[mid_index]>target){
end_index=mid_index-1;
}
else {
start_index=mid_index+1;
}
}
return -1;
}
};
704移除元素
看到题目第一想到排序的方式,因不能新开辟内存,用前->后,后->前填补的方式比较好,相当于相提交了同的移动到数组后面即可
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
//需要原地移除
int left,right;
int size=nums.size();
if(size<=0){
return 0;
}
left=0;
right=size-1;
while(left<=right){
if(nums[left]==val){
if(nums[right]!=val){
nums[left++]=nums[right--];
}
else{
right--;
}
}
else{
left++;
}
}
return right+1;
}
};
提交了4,5遍,OK,分析基础,主要在于还需要对右边数组进行判断上. 视频中所讲快慢指针的方法,更容易理解点。时间: O(n) ,空间 O(1) day1 顺利完成!,