Skip to content

Commit c5d360c

Browse files
committedOct 23, 2021
refactor 153
1 parent 19492cb commit c5d360c

File tree

2 files changed

+79
-81
lines changed

2 files changed

+79
-81
lines changed
 
Lines changed: 22 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,28 @@
11
package com.fishercoder.solutions;
22

3-
/**
4-
* 153. Find Minimum in Rotated Sorted Array
5-
6-
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
7-
8-
(i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]).
9-
10-
Find the minimum element.
11-
12-
You may assume no duplicate exists in the array.
13-
14-
Example 1:
15-
Input: [3,4,5,1,2]
16-
Output: 1
17-
18-
Example 2:
19-
Input: [4,5,6,7,0,1,2]
20-
Output: 0
21-
22-
*/
233
public class _153 {
24-
public static class Solution1 {
25-
public int findMin(int[] nums) {
26-
int left = 0;
27-
int right = nums.length - 1;
28-
if (nums[left] < nums[right]) {
29-
return nums[left];
30-
}
31-
int min = nums[0];
32-
while (left + 1 < right) {
33-
int mid = left + (right - left) / 2;
34-
min = Math.min(min, nums[mid]);
35-
if (nums[mid] > nums[left]) {
36-
min = Math.min(nums[left], min);
37-
left = mid + 1;
38-
} else if (nums[mid] < nums[left]) {
39-
right = mid - 1;
4+
public static class Solution1 {
5+
/**
6+
* My completely original solution on 10/23/2021.
7+
*/
8+
public int findMin(int[] nums) {
9+
int left = 0;
10+
int right = nums.length - 1;
11+
while (left < right) {
12+
int mid = left + (right - left) / 2;
13+
if (mid == left || mid == right) {
14+
//this is to avoid infinite loop
15+
break;
16+
}
17+
if (nums[mid] > nums[left] && nums[mid] > nums[right]) {
18+
left = mid + 1;
19+
} else if (nums[mid] < nums[right] && nums[mid] > nums[left]) {
20+
right = mid - 1;
21+
} else if (nums[mid] < nums[left] && nums[mid] < nums[right]) {
22+
right = mid;
23+
}
24+
}
25+
return right >= 0 ? (nums[left] < nums[right] ? nums[left] : nums[right]) : nums[left];
4026
}
41-
}
42-
min = Math.min(min, Math.min(nums[left], nums[right]));
43-
return min;
4427
}
45-
}
4628
}

‎src/test/java/com/fishercoder/_153Test.java

Lines changed: 57 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -7,45 +7,61 @@
77
import static org.junit.Assert.assertEquals;
88

99
public class _153Test {
10-
private static _153.Solution1 solution1;
11-
private static int expected;
12-
private static int actual;
13-
private static int[] nums;
14-
15-
@BeforeClass
16-
public static void setup() {
17-
solution1 = new _153.Solution1();
18-
}
19-
20-
@Test
21-
public void test1() {
22-
nums = new int[] {4, 5, 6, 7, 0, 1, 2};
23-
expected = 0;
24-
actual = solution1.findMin(nums);
25-
assertEquals(expected, actual);
26-
}
27-
28-
@Test
29-
public void test2() {
30-
nums = new int[] {1};
31-
expected = 1;
32-
actual = solution1.findMin(nums);
33-
assertEquals(expected, actual);
34-
}
35-
36-
@Test
37-
public void test3() {
38-
nums = new int[] {2, 1};
39-
expected = 1;
40-
actual = solution1.findMin(nums);
41-
assertEquals(expected, actual);
42-
}
43-
44-
@Test
45-
public void test4() {
46-
nums = new int[] {2, 3, 4, 5, 1};
47-
expected = 1;
48-
actual = solution1.findMin(nums);
49-
assertEquals(expected, actual);
50-
}
10+
private static _153.Solution1 solution1;
11+
private static int expected;
12+
private static int[] nums;
13+
14+
@BeforeClass
15+
public static void setup() {
16+
solution1 = new _153.Solution1();
17+
}
18+
19+
@Test
20+
public void test1() {
21+
nums = new int[]{4, 5, 6, 7, 0, 1, 2};
22+
expected = 0;
23+
assertEquals(expected, solution1.findMin(nums));
24+
}
25+
26+
@Test
27+
public void test2() {
28+
nums = new int[]{1};
29+
expected = 1;
30+
assertEquals(expected, solution1.findMin(nums));
31+
}
32+
33+
@Test
34+
public void test3() {
35+
nums = new int[]{2, 1};
36+
expected = 1;
37+
assertEquals(expected, solution1.findMin(nums));
38+
}
39+
40+
@Test
41+
public void test4() {
42+
nums = new int[]{2, 3, 4, 5, 1};
43+
expected = 1;
44+
assertEquals(expected, solution1.findMin(nums));
45+
}
46+
47+
@Test
48+
public void test5() {
49+
nums = new int[]{3, 1, 2};
50+
expected = 1;
51+
assertEquals(expected, solution1.findMin(nums));
52+
}
53+
54+
@Test
55+
public void test6() {
56+
nums = new int[]{3, 4, 5, 1, 2};
57+
expected = 1;
58+
assertEquals(expected, solution1.findMin(nums));
59+
}
60+
61+
@Test
62+
public void test7() {
63+
nums = new int[]{5, 1, 2, 3, 4};
64+
expected = 1;
65+
assertEquals(expected, solution1.findMin(nums));
66+
}
5167
}

0 commit comments

Comments
 (0)