diff --git a/src/main/java/com/leetcode/arrays/binarysearch/SearchInsertPosition.java b/src/main/java/com/leetcode/arrays/binarysearch/SearchInsertPosition.java index 2f13214a..fb1f6c17 100644 --- a/src/main/java/com/leetcode/arrays/binarysearch/SearchInsertPosition.java +++ b/src/main/java/com/leetcode/arrays/binarysearch/SearchInsertPosition.java @@ -1,3 +1,4 @@ + package com.leetcode.arrays.binarysearch; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -42,10 +43,14 @@ public class SearchInsertPosition { * @return */ public static int searchInsert(int[] nums, int target) { + if (nums == null) { + throw new IllegalArgumentException("nums must not be null"); + } + int low = 0; int high = nums.length - 1; while (low <= high) { - int mid = low + (high - low) / 2; + int mid = low + ((high - low) >>> 1); if (nums[mid] == target) { return mid; } else if (nums[mid] < target) { diff --git a/src/test/java/com/leetcode/arrays/binarysearch/SearchInsertPositionTest.java b/src/test/java/com/leetcode/arrays/binarysearch/SearchInsertPositionTest.java new file mode 100644 index 00000000..142a2944 --- /dev/null +++ b/src/test/java/com/leetcode/arrays/binarysearch/SearchInsertPositionTest.java @@ -0,0 +1,48 @@ +package com.leetcode.arrays.binarysearch; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import com.leetcode.arrays.binarysearch.SearchInsertPosition; + +/** + * Unit tests for SearchInsertPosition. + */ +class SearchInsertPositionTest { + + @Test + void test_targetFound() { + int[] nums = {1, 3, 5, 6}; + assertEquals(2, SearchInsertPosition.searchInsert(nums, 5)); + } + + @Test + void test_targetSmallerThanAll() { + int[] nums = {10, 20, 30, 40}; + assertEquals(0, SearchInsertPosition.searchInsert(nums, 5)); + } + + @Test + void test_targetGreaterThanAll() { + int[] nums = {10, 20, 30, 40}; + assertEquals(4, SearchInsertPosition.searchInsert(nums, 50)); + } + + @Test + void test_targetBetweenTwoElements() { + int[] nums = {1, 3, 5, 6}; + assertEquals(1, SearchInsertPosition.searchInsert(nums, 2)); + } + + @Test + void test_emptyArray() { + int[] nums = {}; + assertEquals(0, SearchInsertPosition.searchInsert(nums, 7)); + } + + @Test + void test_nullArray_throwsException() { + int[] nums = null; + assertThrows(IllegalArgumentException.class, + () -> SearchInsertPosition.searchInsert(nums, 1)); + } +}