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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 29 additions & 0 deletions
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

Lines changed: 24 additions & 6 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy