ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
:-: 1.7 搜索插入位置 ***** **题干:** 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例 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 ``` **题目分析:** 首先我们由题可得数组已经由小到大排好序了,我们需要注意三点:1.目标值不在数组中,比数组中任何值都要小,返回值为0;2.目标值在数组中,返回值是目标值在数组中的位置;3.目标值不再数组中,比数组中任何值都要大,此时返回是数组长度值。 **新手有可能遇到的解题思路陷阱:** 忽略数组已排序的事实,重新进行排序,或者是忽略了以上三个要点之中的某个。 **解题思路分析以及代码实现:** 第一种思路:判断目标值和遍历的数组值的大小,小于等于则返回当前位置值,大于则判断当前的位置是不是数组中的最大位置值,是则返回数组长度值,否则继续下一次循环。 第一种思路代码1: ``` public int searchInsert(int[] nums, int target) { for (int i = 0; i < nums.length; i++) { if (target <= nums[i]) { return i; } else { if (i == nums.length - 1) { return nums.length; } } } return 0; } ``` **复杂度分析** 时间复杂度:O(n)。 空间复杂度:O(1)。 第一种思路代码2: ``` public int searchInsert(int[] nums, int target) { for (int i = 0; i < nums.length; i++) if (nums[i] >= target) return i; return nums.length; } ``` **复杂度分析** 时间复杂度:O(n)。 空间复杂度:O(1)。 **若有理解错误的、写错的地方、更好的思路,方法,望各位读者评论或者发邮件指正或指点我,不胜感激。**