代码随想录算法训练营D1
D1: 为什么报这个群呢,之前一直很难坚持,我觉得还是报个群,然后大家一起写,一起打卡会坚持住。没有自制力,再没有一起写的朋友的话,真的可以躺平了-.-
()704.Binary Search:题目还是很简单的,二分查找,属于是自己写会写,但是会有小细节漏下。重点是左闭右开还是左闭右闭。详细见下
//递归写法 class Solution { public: int search(vector& nums, int target,int low,int high) { if(low>high) return -1; int mid=low+(high-low)/2; if(nums[mid]==target) return mid; if(nums[mid]>target) { high=mid-1; return search(nums, target, low, high); }else{ low=mid+1; return search(nums, target, low, high); } } };
递归写法,先确定确定递归函数,返回值以及参数,然后确定递归终止条件,如果是左闭右开,就要改成
()if(low>=high) return -1;
最后是单层递归的逻辑,也就是target在哪边查哪边。
下面是迭代法:
//迭代法 class Solution { public: int search(vector& nums, int target) { if(nums.empty()) return -1; int low=0; int high=nums.size()-1; while(low int mid=low+(high-low)/2; if(nums[mid]==target) return mid; else if(nums[mid]target){ high=mid-1; }else{ low=mid+1; } } return -1; } };
左闭右闭写法的话,[low,high]是有效的,所以while后面是可以low public: int removeElement(vector int size = nums.size(); for (int i = 0; i
The End