Skip to content

Commit 132ec47

Browse files
add a solution for 540
1 parent 91f7d57 commit 132ec47

File tree

3 files changed

+54
-7
lines changed

3 files changed

+54
-7
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -762,7 +762,7 @@ _If you like this project, please leave me a star._ ★
762762
|543|[Diameter of Binary Tree](https://leetcode.com/problems/diameter-of-binary-tree/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_543.java) | | Easy | Tree/DFS/Recursion
763763
|542|[01 Matrix](https://leetcode.com/problems/01-matrix/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_542.java) | |Medium | BFS
764764
|541|[Reverse String II](https://leetcode.com/problems/reverse-string-ii/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_541.java) | |Easy | String
765-
|540|[Single Element in a Sorted Array](https://leetcode.com/problems/single-element-in-a-sorted-array/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_540.java) | |Medium |
765+
|540|[Single Element in a Sorted Array](https://leetcode.com/problems/single-element-in-a-sorted-array/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_540.java) | |Medium |Array, Binary Search
766766
|539|[Minimum Time Difference](https://leetcode.com/problems/minimum-time-difference/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_539.java) | | Medium | String
767767
|538|[Convert BST to Greater Tree](https://leetcode.com/problems/convert-bst-to-greater-tree/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_538.java) | |Easy | Tree
768768
|537|[Complex Number Multiplication](https://leetcode.com/problems/complex-number-multiplication/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_537.java) | |Medium | Math, String

src/main/java/com/fishercoder/solutions/_540.java

+29
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,33 @@ public int singleNonDuplicate(int[] nums) {
3030
return nums[start];
3131
}
3232
}
33+
34+
public static class Solution3 {
35+
public int singleNonDuplicate(int[] nums) {
36+
int left = 0;
37+
int right = nums.length - 1;
38+
while (left < right) {
39+
int mid = left + (right - left) / 2;
40+
if (nums[mid] != nums[mid + 1] && nums[mid] != nums[mid - 1]) {
41+
return nums[mid];
42+
}
43+
if (nums[mid] != nums[mid + 1]) {
44+
if ((right - mid) % 2 == 0) {
45+
if (right != mid) {
46+
right = mid;
47+
} else {
48+
return nums[mid];
49+
}
50+
} else {
51+
left = mid + 1;
52+
}
53+
} else if ((right - mid) % 2 == 0 && right != mid) {
54+
left = mid + 1;
55+
} else {
56+
right = mid - 1;
57+
}
58+
}
59+
return nums[left];
60+
}
61+
}
3362
}

src/test/java/com/fishercoder/_540Test.java

+24-6
Original file line numberDiff line numberDiff line change
@@ -9,32 +9,50 @@
99
public class _540Test {
1010
private static _540.Solution1 solution1;
1111
private static _540.Solution2 solution2;
12+
private static _540.Solution3 solution3;
1213
private static int[] nums;
14+
private static int expected;
1315

1416
@BeforeClass
1517
public static void setup() {
1618
solution1 = new _540.Solution1();
1719
solution2 = new _540.Solution2();
20+
solution3 = new _540.Solution3();
1821
}
1922

2023
@Test
2124
public void test1() {
2225
nums = new int[]{1, 1, 2, 3, 3, 4, 4, 8, 8};
23-
assertEquals(2, solution1.singleNonDuplicate(nums));
24-
assertEquals(2, solution2.singleNonDuplicate(nums));
26+
expected = 2;
27+
assertEquals(expected, solution1.singleNonDuplicate(nums));
28+
assertEquals(expected, solution2.singleNonDuplicate(nums));
29+
assertEquals(expected, solution3.singleNonDuplicate(nums));
2530
}
2631

2732
@Test
2833
public void test2() {
2934
nums = new int[]{3, 3, 7, 7, 10, 11, 11};
30-
assertEquals(10, solution1.singleNonDuplicate(nums));
31-
assertEquals(10, solution2.singleNonDuplicate(nums));
35+
expected = 10;
36+
assertEquals(expected, solution1.singleNonDuplicate(nums));
37+
assertEquals(expected, solution2.singleNonDuplicate(nums));
38+
assertEquals(expected, solution3.singleNonDuplicate(nums));
3239
}
3340

3441
@Test
3542
public void test3() {
3643
nums = new int[]{1, 1, 2};
37-
assertEquals(2, solution1.singleNonDuplicate(nums));
38-
assertEquals(2, solution2.singleNonDuplicate(nums));
44+
expected = 2;
45+
assertEquals(expected, solution1.singleNonDuplicate(nums));
46+
assertEquals(expected, solution2.singleNonDuplicate(nums));
47+
assertEquals(expected, solution3.singleNonDuplicate(nums));
48+
}
49+
50+
@Test
51+
public void test4() {
52+
nums = new int[]{1, 1, 2, 2, 3};
53+
expected = 3;
54+
assertEquals(expected, solution1.singleNonDuplicate(nums));
55+
assertEquals(expected, solution2.singleNonDuplicate(nums));
56+
assertEquals(expected, solution3.singleNonDuplicate(nums));
3957
}
4058
}

0 commit comments

Comments
 (0)