前言:
眼前咱们对“二分法实现数组排序”都比较关心,各位老铁们都需要剖析一些“二分法实现数组排序”的相关文章。那么小编同时在网上收集了一些关于“二分法实现数组排序””的相关文章,希望各位老铁们能喜欢,姐妹们快快来了解一下吧!题目地址
解题思路和具体代码
注意,这道题要求时间复杂度为`O(log(n))`,那肯定要用到二分查找法。但是常规的二分查找需要数组是有序排列的,现在题目里的数组并没有完全有序排列。
思路:
查找中间位置。`n = nums.length,start = 0, end = n`,初始中间位置值为`middle = Math.floor((end - start) / 2)`;通过`middle`将数组分为两部分,左边数组为`left = nums.slice(start, middle)`,右边数组为`right = nums.slice(middle)`;左右两边一定有一个是有序排列的;判断target在哪个数组里,缩小范围。
下面是具体代码实现。
function search(nums: number[], target: number): number { let start = 0; let end = nums.length - 1; while (start <= end) { const middle = Math.floor((end + start) / 2); if (nums[middle] === target) { return middle; } if (nums[start] <= nums[middle]) { // 左边是有序的 if (target >= nums[start] && target < nums[middle]) { end = middle - 1; } else { start = middle + 1; } } else { // 右边是有序的 if (target > nums[middle] && target <= nums[end]) { start = middle + 1; } else { end = middle - 1; } } } return -1;}
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #二分法实现数组排序