- 3
- 0
- 约9.62千字
- 约 34页
- 2026-06-27 发布于河南
- 举报
java笔试常考算法java算法笔试题及答案
1.基础算法模块
1.1搜索旋转排序数组
题目描述:整数数组nums按升序排列,数组中的值互不相同。在传递给函数之前,nums在预先未知的某个下标k(0=knums.length)上进行了旋转,使数组变为[nums[k],nums[k+1],...,nums[n-1],nums[0],nums[1],...,nums[k-1]]。给你旋转后的数组nums和一个整数target,如果nums中存在这个目标值target,则返回它的下标,否则返回-1,要求时间复杂度为O(logn)。
解题思路:旋转后的数组可拆分为两段独立的升序子数组,利用二分查找缩小搜索范围:首先判断mid指针落在左升序段还是右升序段,再判断target是否落在当前段的有序区间内,若存在则缩小范围到当前段,否则跳转至另一段搜索。
Java实现:
```java
publicintsearch(int[]nums,inttarget){
while(left=right){
intmid=left+(right-left)/2;
if(nums[mid]==target)returnmid;
//判断mid是否在左升序段
if(nums[left]=nums[mid]){
//ta
原创力文档

文档评论(0)