题目:数组中数值和下标相等的元素
假设一个单调递增的数组里的每个元素都是整数且是唯一的。编写一个程序,找出数组中任意一个数值等于其下标的元素。例如,输入{-3,-1,1,3,5},输出3。
思路:
典型的二分查找例子。
根据以上思路,java参考代码如下:
public class IntegerIdenticalToIndex {
public static int getNumberSameAsIndex(int[] data){
if(data==null ||data.length==0)
return -1;
int left = 0,right = data.length-1;
//可以先做剪枝处理
if(data[left]>0||data[right]<0)
return -1;
while (left<=right){//相等要继续进行一次判断
int mid = left+((right-left)>>1);
if(data[mid]==mid)
return mid;
else if(data[mid]<mid)
left = mid+1;
else
right = mid-1;
}
return -1;
}
public static void main(String[] args){
System.out.println(getNumberSameAsIndex(new int[]{-3,-1,1,3,5})); //3
System.out.println(getNumberSameAsIndex(new int[]{0,1,2,3,4})); //0~4
System.out.println(getNumberSameAsIndex(new int[]{4,5,6,7,8})); //-1
}
}
测试用例:
a.功能测试(数组中包含或者不包含数组和下标相等的元素)。
b.边界值测试(数组中只有一个数字;数字和下标相等的元素位于数组的开头或者结尾)。
c.特殊输入测试(表示数组的指针为nullptr指针)。