每天一遍,快乐再见!LeetCode(11)搜索插入位置

it2024-01-06  80

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。

示例 1: 输入: [1,3,5,6], 5 输出: 2

示例 2: 输入: [1,3,5,6], 2 输出: 1

示例 3: 输入: [1,3,5,6], 7 输出: 4

示例 4: 输入: [1,3,5,6], 0 输出: 0

Related Topics 数组 二分查找 👍 719 👎 0

思路

先判断是否在边界,后循环数组暴力!!!!

public class SearchInsertPosition { public static void main(String[] args) { Solution solution = new SearchInsertPosition().new Solution(); } //leetcode submit region begin(Prohibit modification and deletion) class Solution { public int searchInsert(int[] nums , int target) { if (target < nums[0]) { return 0; } if (target > nums[nums.length - 1]) { return nums.length; } int result = 0; for (result = 0; result < nums.length - 1 ; result++) { if (target == nums[result]) { return result; } if (target > nums[result]) { // 判断时候相等 if (target == nums[result + 1] || target < nums[result + 1]) { return result + 1; } } } return result; } } //leetcode submit region end(Prohibit modification and deletion) }

其他解答是使用二分查找

public class Solution { public int searchInsert(int[] nums, int target) { int len = nums.length; if (len == 0) { return 0; } // 特判 if (nums[len - 1] < target) { return len; } int left = 0; int right = len - 1; while (left < right) { int mid = left + (right - left) / 2; // 严格小于 target 的元素一定不是解 if (nums[mid] < target) { // 下一轮搜索区间是 [mid + 1, right] left = mid + 1; } else { // 下一轮搜索区间是 [left, mid] right = mid; } } return left; } }
最新回复(0)