这是刷题的第2天
第一反应是java有没有提供相应的方法,网上搜了后,用了binarySearch。他这个方法用的也是二分查找,符合题目的时间复杂度,但我一直在想如果数组元素重复怎么办,这个方法返回的值不唯一,一直在纠结,想了半天,发现提示那里写了输入的nums为无重复的元素,自己没有好好审题。。所以直接用binarySearch秒了。
代码如下:
public int searchInsert(int[] nums, int target){
int index = Arrays.binarySearch(nums,target);
if(index < 0){ return Math.abs(index) - 1; }
else{ return index; }
}
结果如下:
看了题解,基本都是用二分查找。
一开始想的是直接用正则匹配空格,字符串以空格来分成数组。但是提交以后,代码是通过了,但是时间效率很低,用了2ms,击败了百分之八的人,可能是因为用了s.trim().split()的缘故。
代码如下:
public int lengthOfLastWord(String s) {
String[] arr = s.trim().split("\\s+");
return arr[arr.length-1].length();
}
看了题解以后,思路是从后往前遍历,时间复杂度只有O(n),修改了代码,时间击败百分之百,速度提高了很多。
代码如下:
public int lengthOfLastWord2(String s){标签:index,arr,return,58,int,代码,35,java,String From: https://www.cnblogs.com/hesy0530/p/17032957.html
int num = 0;
String arr = s.trim();
for(int i=arr.length()-1; i >= 0; i--){
Character ch = arr.charAt(i);
if(ch.equals(' ')){
break;
}
else{ num += 1; }
}
return num;