算法思想一:顺序遍历
解题思路:
对数组nums进行顺序遍历,因为数组是有序的,所以当遍历的元素与目标target相同时,即为第一个出现的target,返回该元素的索引即可
代码展示:
Python版本
class Solution:
def search(self , nums , target ):
# write code here
# 顺序遍历
for i in range(len(nums)):
# 找到目标值返回目标值索引
if nums[i] == target:
return i
# 没有找到返回
return -1 复杂度分析
时间复杂度:
表示数组的长度,最差情况下遍历数组时间为
空间复杂度:不需要额外空间
算法思想二:二分搜索
解题思路:
主要采用二分搜索法找到最小目标值索引
算法流程:
1、初始化low、high、mid三个初始变量,,
,
2、循环,循环停止条件 :
1、当 :所搜区间
2、当 :所搜区间
3、当 ;需要向左遍历找到第一个出现的target
1、循环条件:
2、
4、跳出内层循环,返回 mid
图解:
代码展示:
JAVA版本
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 如果目标值存在返回下标,否则返回 -1
* @param nums int整型一维数组
* @param target int整型
* @return int整型
*/
public int search (int[] nums, int target) {
// write code here
// 初始化
int low = 0;
int high = nums.length-1;
int mid = 0;
// 循环跳出条件
while(low <= high){
mid = low+ (high- low) / 2;
// 找到目标值
if(nums[mid] == target){
// 从当前索引向左遍历,找到最小索引的目标值
while(mid != 0 &&(nums[mid-1] == nums[mid])){
mid--;
}
return mid;
}
// 二分缩小查找区间
else if(nums[mid] > target){
high = mid - 1;
}
else {
low = mid + 1;
}
}
return -1;
}
} 复杂度分析
时间复杂度:
表示数组的长度,二分查找时间为
空间复杂度:仅使用常数级变量空间



京公网安备 11010502036488号