Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 9e2990c

Browse files
committed
20190317
1 parent a6ad915 commit 9e2990c

File tree

3 files changed

+62
-1
lines changed

3 files changed

+62
-1
lines changed

‎code/lc33.java‎

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
* 难度:Medium
77
* 分类:Array, Binary Search
88
* 思路:二分查找的思路,多了一步判断,判断哪部分有序,是否在这部分中
9-
* Tips:注意边界判断,是否有等号
9+
* Tips:注意边界判断,是否有等号。挺麻烦的,没有输入样本,很难想通边边角角
10+
* lc81
1011
*/
1112
public class lc33 {
1213
public static void main(String[] args) {
@@ -40,4 +41,26 @@ public static int search(int[] nums, int target) {
4041
}
4142
return -1;
4243
}
44+
45+
public int search2(int[] nums, int target) {
46+
int begin = 0, end = nums.length-1;
47+
while(begin<=end){
48+
int mid = (begin+end)/2;
49+
if(target==nums[mid]) return mid;
50+
if(nums[begin]<=nums[mid]){ //左边有序,别忘了=,begin==end
51+
if(target>=nums[begin]&&target<nums[mid]){
52+
end = mid-1;
53+
}else{
54+
begin = mid+1;
55+
}
56+
}else{ //右边有序
57+
if(target>nums[mid]&&target<=nums[end]){ //别忘了=
58+
begin = mid+1;
59+
}else{
60+
end = mid-1;
61+
}
62+
}
63+
}
64+
return -1;
65+
}
4366
}

‎code/lc81.java‎

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package code;
2+
/*
3+
* 31. Search in Rotated Sorted Array II
4+
* 题意:在翻转有序数组中查找指定数,数组中可能有相等的元素
5+
* 难度:Medium
6+
* 分类:Array, Binary Search
7+
* 思路:多加了一种情况,就是 nums[mid]==nums[begin]==nums[end]
8+
* Tips:注意边界判断,是否有等号
9+
* lc33
10+
*/
11+
public class lc81 {
12+
public boolean search(int[] nums, int target) {
13+
int begin = 0, end = nums.length-1;
14+
while(begin<=end){
15+
int mid = (begin+end)/2;
16+
if(target==nums[mid]) return true;
17+
if(nums[begin]==nums[end]&& nums[end]==nums[mid]) end--;
18+
else if(nums[begin]<=nums[mid]){ //左边有序
19+
if(target>=nums[begin]&&target<nums[mid]){
20+
end = mid-1;
21+
}else{
22+
begin = mid+1;
23+
}
24+
}else if(nums[mid]<nums[end]){ //右边有序
25+
if(target>nums[mid]&&target<=nums[end]){
26+
begin = mid+1;
27+
}else{
28+
end = mid-1;
29+
}
30+
}else{
31+
end--;
32+
}
33+
}
34+
return false;
35+
}
36+
}

‎readme.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,13 @@ LeetCode 指南
5454
| 032 [Java](./code/lc32.java)
5555
| 033 [Java](./code/lc33.java)
5656
| 034 [Java](./code/lc34.java)
57+
| 034 [Java](./code/lc35.java)
5758
| 036 [Java](./code/lc36.java)
5859
| 038 [Java](./code/lc38.java)
5960
| 039 [Java](./code/lc39.java)
6061
| 041 [Java](./code/lc41.java)
6162
| 042 [Java](./code/lc42.java)
63+
| 043 [Java](./code/lc43.java)
6264
| 044 [Java](./code/lc44.java)
6365
| 046 [Java](./code/lc46.java)
6466
| 048 [Java](./code/lc48.java)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /