赞
踩
假设一个单调递增的数组里的每个元素都是整数并且是唯一的。请编程实现一个函数找出数组中任意一个数值等于其下标的元素。例如,在数组[-3, -1, 1, 3, 5]中,数字3和它的下标相等。
输入:[-3, -1, 1, 3, 5]
输出:3
注意:如果不存在,则返回-1。
首先想到的方法是对数组从头遍历,当遍历到一个元素和其下标相等时直接返回,如果遍历结束仍没有找到则返回-1。这种方法的时间复杂度是O(n)。
第二种方法考虑输入数据的特点:单调递增且唯一,所以使用二分查找。
public int getNumberSameAsIndex(int[] nums) { if(nums==null||nums.length==0) return -1; int low=0,high=nums.length-1; while(low<high) { int mid=low+(high-low)/2; if(mid==nums[mid]) return mid; if(mid<nums[mid]) { if(mid==0) return -1; high=mid-1; }else if(mid>nums[mid]) { if(mid==nums.length-1) return -1; low=mid+1; } } if(low==nums[low]) return low; return -1; }
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。