【每日一题】LeetCode 33. 搜索旋转排序数组 TypeScript 整数数组nums按升序排列数组中的值互不相同。在传递给函数之前nums在预先未知的某个下标k0 k nums.length上进行了向左旋转使数组变为[nums[k], nums[k1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]]下标从 0 开始计数。例如[0,1,2,4,5,6,7]下标3上向左旋转后可能变为[4,5,6,7,0,1,2]。给你旋转后的数组nums和一个整数target如果nums中存在这个目标值target则返回它的下标否则返回-1。你必须设计一个时间复杂度为O(log n)的算法解决此问题。示例 1输入nums [4,5,6,7,0,1,2], target 0输出4示例 2输入nums [4,5,6,7,0,1,2], target 3输出-1示例 3输入nums [1], target 0输出-1提示1 nums.length 5000-104 nums[i] 104nums中的每个值都独一无二题目数据保证nums在预先未知的某个下标上进行了旋转-104 target 104首先来个错误版本时间复杂度O(n)function search(nums: number[], target: number): number { for(let i0;inums.length;i){ if(nums[i]target){ return i } } return -1 };正文来了function search(nums: number[], target: number): number { let left 0 let right nums.length - 1 while(leftright){ const mid Math.floor((left right) / 2) if(nums[mid]target){ return mid } //如果左半部分升序 if(nums[left] nums[mid]){ if(target nums[left] target nums[mid]){ right mid -1 }else{ left mid 1 } }else{ //否则右半部分升序 if(targetnums[mid] target nums[right]){ left mid 1 }else{ right mid - 1 } } } return -1 };共勉