使用kotlin完成这个题目:35. 搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums = [1,3,5,6], target = 5 输出: 2 示例 2: 输入: nums = [1,3,5,6], target = 2 输出: 1 示例 3: 输入: nums = [1,3,5,6], target = 7 输出: 4 提示: 1 <= nums.length <= 104 -104 <= nums[i] <= 104 nums 为 无重复元素 的 升序 排列数组 -104 <= target <= 104 通过次数1,152,184提交次数2,559,114
时间: 2023-12-23 15:05:13 浏览: 169
可以使用二分查找的思路来解决这个问题,具体的解题步骤如下:
1. 定义左右指针,初始时左指针指向数组的第一个元素,右指针指向数组的最后一个元素。
2. 在循环中,当左指针小于等于右指针时,执行以下操作:
- 计算中间位置 mid = (left + right) / 2
- 比较 nums[mid] 和 target 的大小,如果 nums[mid] < target,则目标值在右半部分,更新左指针为 mid + 1;如果 nums[mid] > target,则目标值在左半部分,更新右指针为 mid - 1;如果 nums[mid] == target,则直接返回 mid。
3. 如果循环结束后仍然没有找到目标值,则返回左指针,表示目标值将被插入到数组的左指针位置。
完整代码如下:
```kotlin
fun searchInsert(nums: IntArray, target: Int): Int {
var left = 0
var right = nums.size - 1
while (left <= right) {
val mid = (left + right) / 2
when {
nums[mid] < target -> left = mid + 1
nums[mid] > target -> right = mid - 1
else -> return mid
}
}
return left
}
```
阅读全文