提交 9e2990cd 编写于 作者: L liu13

20190317

上级 a6ad9155
......@@ -6,7 +6,8 @@ package code;
* 难度:Medium
* 分类:Array, Binary Search
* 思路:二分查找的思路,多了一步判断,判断哪部分有序,是否在这部分中
* Tips:注意边界判断,是否有等号
* Tips:注意边界判断,是否有等号。挺麻烦的,没有输入样本,很难想通边边角角
* lc81
*/
public class lc33 {
public static void main(String[] args) {
......@@ -40,4 +41,26 @@ public class lc33 {
}
return -1;
}
public int search2(int[] nums, int target) {
int begin = 0, end = nums.length-1;
while(begin<=end){
int mid = (begin+end)/2;
if(target==nums[mid]) return mid;
if(nums[begin]<=nums[mid]){ //左边有序,别忘了=,begin==end
if(target>=nums[begin]&&target<nums[mid]){
end = mid-1;
}else{
begin = mid+1;
}
}else{ //右边有序
if(target>nums[mid]&&target<=nums[end]){ //别忘了=
begin = mid+1;
}else{
end = mid-1;
}
}
}
return -1;
}
}
package code;
/*
* 31. Search in Rotated Sorted Array II
* 题意:在翻转有序数组中查找指定数,数组中可能有相等的元素
* 难度:Medium
* 分类:Array, Binary Search
* 思路:多加了一种情况,就是 nums[mid]==nums[begin]==nums[end]
* Tips:注意边界判断,是否有等号
* lc33
*/
public class lc81 {
public boolean search(int[] nums, int target) {
int begin = 0, end = nums.length-1;
while(begin<=end){
int mid = (begin+end)/2;
if(target==nums[mid]) return true;
if(nums[begin]==nums[end]&& nums[end]==nums[mid]) end--;
else if(nums[begin]<=nums[mid]){ //左边有序
if(target>=nums[begin]&&target<nums[mid]){
end = mid-1;
}else{
begin = mid+1;
}
}else if(nums[mid]<nums[end]){ //右边有序
if(target>nums[mid]&&target<=nums[end]){
begin = mid+1;
}else{
end = mid-1;
}
}else{
end--;
}
}
return false;
}
}
......@@ -54,11 +54,13 @@ LeetCode 指南
| 032 [Java](./code/lc32.java)
| 033 [Java](./code/lc33.java)
| 034 [Java](./code/lc34.java)
| 034 [Java](./code/lc35.java)
| 036 [Java](./code/lc36.java)
| 038 [Java](./code/lc38.java)
| 039 [Java](./code/lc39.java)
| 041 [Java](./code/lc41.java)
| 042 [Java](./code/lc42.java)
| 043 [Java](./code/lc43.java)
| 044 [Java](./code/lc44.java)
| 046 [Java](./code/lc46.java)
| 048 [Java](./code/lc48.java)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册