断更很久,也说明了我很久没做题。本来就生疏,结果久更加生疏了,没事,新学期的开始,也意味着要继续努力啦,加油加油。
题意解析:给出一个排好序的数组和target值,在数组中找到这个target值,并返回下标,如果找不到,就返回这个target在这个排好序的数组的应在的位置
思路:使用二分法。二分法的意思是,将一段空间分成两段,用中间点与target比较,如果target小于中间点,那么确定target在左边这一块,则可以舍弃右边的这一块,接着左边的1/2在继续分下去,直到找到target或者target适合插入的下标为止。比起直接遍历,少掉很多步骤,空间复杂度也不会很多。但是有俩点需要注意是的:1,当target的值比右边的末端还大时,那么就要返回末端的下标+1;2,当target的值比左边的还小时,那么就要返回左边的下标0。
Java代码如下:
public class Solution{
public class searchInsert(int[] nums,int target){
if(nums.length==0)
return 0;
int left=0;
int right=nums.length-1;
while(left<right){
int mid=left+(right-left)/2;
if(nums[mid]<target) left=mid;
else if(nums[mid]>target) right=mid;
else return mid;
}
if(target>nums[right]) return right+1;
if(target<=nums[left]) return left;
else return right;
关于python的代码如下:
def searchInsert(self,nums,target)
if target>nums[len(nums)-1]:
return len(nums)
for i in range(len(nums)):
if nums[i]>=target:
return i
关于python的代码里量和Java的代码量,在某些很简单的题目的,python的代码量是明显比Java的少的,但是在复杂的题目中,明显Java的代码量是比较少的。这个是没有确定谁一定比谁少的。