leetcode704,这是leetcode提交四次后通过的结果:
class Solution {
public int search(int[] nums, int target) { if(nums.length==1&&nums[0]==target) return 0; if(nums.length==2) if(nums[0]==target) return 0; else if(nums[1]==target) return 1;int left= 0; int right = nums.length-1; int middle = (int)Math.floor((right-left+1)/2); while(left<right&&middle>left&&middle<right){ if(nums[left]==target)return left; if(nums[right]==target)return right; if(nums[middle]>target){ right = middle; middle = left + (int)Math.floor((right-left+1)/2); }else if(nums[middle]<target){ left = middle; middle = left + (int)Math.floor((right-left+1)/2); }else{ return middle; } } return -1; } } 没错,主打一个复杂又啰嗦。第一次没通过是没判断数组长度为1的情况;第二次没通过没判断数组长度为2的情况;第三次没通过是没判断左右边界是否就是要找的target值,所以把这三种情况都写进去就通过了,leetcode要是有新的测试用例,记得通知我。还有个易出错的地方,计算middle的时候,要加上left这个基地址。 上面是写的虽然过了力扣的测试用例,但是看了视频,有不少改进的地方: 1:middle=(right+left)>>>1 2,<>target后,right、left的边界不是直接用middle替换,要±1,多想一下,middle并不等于,所以范围不是从middle开始(while种的left、right不是由此)。 leetcode27移除元素 除了暴力解法,参考随想录的双指针方法。 class Solution { public int removeElement(int[] nums, int val) { int slow=0,fast=0; for(fast=0;fast<nums.length;fast++){ if(nums[fast]!=val){ nums[slow++]=nums[fast]; } } return slow; } } 标签:27,nums,int,随想录,fast,middle,right,移除,left From: https://www.cnblogs.com/twinkle/p/18311743