一.题目描述
假设一个单调递增的数组里每个元素都是整数且唯一。
编程实现函数找出数组中任意一个数值等于其下标的元素。例如在数组{-3,-1,1,3,5}中,数字3和下标相等
二.题目解析
1.暴力法遍历
public int find(int[] nums){
/*暴力法,时间复杂度O(n)*/
if(nums == null || nums.length == 0){
return -1;
}
for (int i = 0; i < nums.length; i++) {
if(i == nums[i]){
return nums[i];
}
}
return -1;
}
2.二分法
public int find1(int[] nums){
/*二分法,每次可以把查找范围缩小一半
时间复杂度O(logn)*/
if(nums == null || nums.length == 0){
return -1;
}
int start = 0;
int end = nums.length - 1;
while (start <= end){
int mid = (start + end) >> 1;
//找到一个符合的元素即可返回
if(nums[mid] == mid){
return mid;
}
//由于数组递增则mid和其后元素都不满足
if(nums[mid] > mid){
end = mid - 1;
}else{//由于数组递增则mid和其前元素都不满足
start = mid + 1;
}
}
return -1;
}
该博客介绍了如何在单调递增的整数数组中找到数值等于其下标的元素。提供了两种解决方案:暴力遍历法,时间复杂度为O(n);以及二分查找法,时间复杂度为O(logn)。二分法通过不断缩小查找范围,提高了效率。
2433

被折叠的 条评论
为什么被折叠?



