Quellcode durchsuchen

#feat:leetcode p34题题解

yangyi vor 2 Wochen
Ursprung
Commit
631e57aa4a
2 geänderte Dateien mit 87 neuen und 0 gelöschten Zeilen
  1. 40 0
      src/leetcode/p34/Solution.java
  2. 47 0
      src/leetcode/p34/SolutionTest.java

+ 40 - 0
src/leetcode/p34/Solution.java

@@ -0,0 +1,40 @@
+package leetcode.p34;
+
+/**
+ * @ProjectName: LeetCode
+ * @FileName: Solution
+ * @Author: 杨逸
+ * @Data:2026/3/9 18:25
+ * @Description: https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/
+ * 34. 在排序数组中查找元素的第一个和最后一个位置
+ */
+public class Solution {
+    public int[] searchRange(int[] nums, int target) {
+        if (nums.length == 0) return new int[]{-1,-1};
+        /**
+         * 先二分找到目标值
+         * 再向两边找边界
+         */
+        int left = 0, right = nums.length - 1;
+        int mid;
+        while(left < right){
+            mid = (left + right) / 2;
+            if (target == nums[mid]) {
+                left = mid;
+                right = mid;
+            }
+            if (target > nums[mid]) {
+                //target在右边
+                left = mid + 1;
+            }
+            if (target < nums[mid]) {
+                //target在左边
+                right = mid - 1;
+            }
+        }
+        if (target != nums[left]) return new int[]{-1,-1};
+        while (left > 0 && nums[left-1] == target)left--;
+        while (right < nums.length - 1 && nums[right+1] == target)right++;
+        return new int[]{left, right};
+    }
+}

+ 47 - 0
src/leetcode/p34/SolutionTest.java

@@ -0,0 +1,47 @@
+package leetcode.p34;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import static org.junit.Assert.assertArrayEquals;
+
+/**
+ * @ProjectName: LeetCode
+ * @FileName: SolutionTest
+ * @Author: 杨逸
+ * @Data:2026/3/9 18:30
+ * @Description:
+ */
+@RunWith(Parameterized.class)
+public class SolutionTest {
+    public static final Solution solution = new Solution();
+    private int[] nums;
+    private int target;
+    private int[] expected;
+
+    public SolutionTest(int[] nums, int target, int[] expected) {
+        this.nums = nums;
+        this.target = target;
+        this.expected = expected;
+    }
+    @Parameterized.Parameters
+    public static Collection<Object[]> data(){
+        return Arrays.asList(new Object[][]{
+                {new int[]{5,7,7,8,8,10},8,new int[]{3,4}},
+                {new int[]{5,7,7,8,8,10},6,new int[]{-1,-1}},
+                {new int[]{},0,new int[]{-1,-1}},
+                {new int[]{1},1,new int[]{0,0}},
+                {new int[]{1,1,2},1,new int[]{0,1}},
+        });
+    }
+
+    @Test
+    public void searchRange() {
+        int[] result = solution.searchRange(nums, target);
+        assertArrayEquals(expected, result);
+    }
+}