先找个例子写出来然后再找规律写代码,然后去找测试用例运行,通过例子去找自己逻辑没有考虑全面的地方,但在企业的项目需求中,可能并没有好的示例,所以要自己想好if的条件判断,一定要先理清需求,然后再想好逻辑,最后写代码、、、
class Solution {
public int findMin(int[] nums) {
int length = nums.length;
if(length==1) return nums[0];
// if(length==2) return nums[0]>nums[1]?nums[1]:nums[0];
int i=0,j=length-1,min=nums[0];
while (i<=j){
int mid=(i+j)/2;
if(nums[mid]<min) min=nums[mid];
//左边有序
if(nums[mid]>nums[i]){
if(nums[j]<nums[i]){
i=mid+1;
}else {
j=mid-1;
}
}else {
if(mid==i) return nums[mid]>nums[j]?nums[j]:nums[mid];
if(mid-1>=0 && nums[mid]<nums[mid-1]) return nums[mid];
else {
j=mid-1;
}
}
}
return min;
}
}
或者
class Solution {
public int findMin(int[] nums) {
int left = 0;
int right = nums.length - 1;
while (left < right) {
int mid = left + (right - left) / 2;
if (nums[mid] > nums[right]) {
left = mid + 1;
} else {
right = mid;
}
}
return nums[left];
}
};
作者:armeria
链接:https://leetcode.cn/problems/find-minimum-in-rotated-sorted-array/solutions/126635/er-fen-cha-zhao-wei-shi-yao-zuo-you-bu-dui-cheng-z/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
完蛋,我感觉我的代码能力退化了
class Solution {
public int findMin(int[] nums) {
int i = 0, j = nums.length - 1;
while (i < j) {
int m = (i + j) / 2;
if (nums[m] > nums[j]) i = m + 1;
else if (nums[m] < nums[j]) j = m;
else j--;
}
return nums[i];
}
}
如果是这种需要情况分层列举的时候,如果第二层的代码规律非常的难找或者不好写代码,那么就很可能是第一层的规律找错了,或者是写第一层的时候没有去考虑第二层、、、
第一层先分左边是否有序,然后第二层再去研究大小问题,这样就很好写
革命尚未成功,同志仍需努力呀!
class Solution {
public boolean search(int[] nums, int target) {
if (nums == null || nums.length == 0) {
return false;
}
int start = 0;
int end = nums.length - 1;
int mid;
while (start <= end) {
mid = start + (end - start) / 2;
if (nums[mid] == target) {
return true;
}
if (nums[start] == nums[mid]) {
start++;
continue;
}
//前半部分有序
if (nums[start] < nums[mid]) {
//target在前半部分
if (nums[mid] > target && nums[start] <= target) {
end = mid - 1;
} else { //否则,去后半部分找
start = mid + 1;
}
} else {
//后半部分有序
//target在后半部分
if (nums[mid] < target && nums[end] >= target) {
start = mid + 1;
} else { //否则,去后半部分找
end = mid - 1;
}
}
}
//一直没找到,返回false
return false;
}
}
当三道一起写完的时候,再一起看,为什么最后一道题是分层写的?因为比较的数更多,i,j,mid,target
所以要分层写