2020.7.17 力扣每日
Posted -tty
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2020.7.17 力扣每日相关的知识,希望对你有一定的参考价值。
1 class Solution { 2 public int searchInsert(int[] nums, int target) { 3 int length = nums.length; 4 int left = 0, right = length - 1, ans = 0; 5 while (left <= right){ 6 int mid = (left + right) / 2; 7 if (nums[mid] < target){ 8 left = mid + 1; 9 ans = left; 10 } 11 else right = mid - 1; 12 } 13 return ans; 14 } 15 }
解题思路:
对于该题要求,显然可以利用暴力法即顺序查找的方法查找元素插入位置,但这显然不是最优解法。此时很容易想到利用二分查找法,由于该题数组内可能不存在插入的元素,所以需要略微修改下二分查找的算法,搜索到最后一个小于目标的元素,插入到它的后面,或搜索到第一个大于等于目标的元素,插入到它的当前位置。此处使用第一种方法,即nums[mid] < target。
注意点:
对于nums[mid] < target的方法,即搜索最后一个小于目标的元素时,可能整个数组都大于target,所以ans初始值设置为0。
对于nums[mid] >= target的方法,即搜索第一个大于等于目标的元素,可能整个数组都小于target,所以ans初始值设置为length。
时间复杂度:O(logN)
空间复杂度:O(1)
题后总结:
优:熟练的使用二分查找解决题目
差:无
以上是关于2020.7.17 力扣每日的主要内容,如果未能解决你的问题,请参考以下文章