java中数组的下标比较_【Java】 剑指offer(53-3) 数组中数值和下标相等的元素

本文参考自《剑指offer》一书,代码采用Java语言。

题目

假设一个单调递增的数组里的每个元素都是整数并且是唯一的。请编程实现一个函数找出数组中任意一个数值等于其下标的元素。例如,在数组{-3, -1,1, 3, 5}中,数字3和它的下标相等。

思路

同53-1和53-2一样,不再从头到尾遍历,由于是排序数组,我们继续考虑使用二分查找算法:

1)当中间数字等于其下标时,中间数字即为所求数字;

2)当中间数字大于其下标时,在左半部分区域寻找;

2)当中间数字小于其下标时,在右半部分区域寻找;

测试算例

1.功能测试(包含/不包含与下标相等的数字)

2.边界值测试(数字位于数组开头、中间或者结尾;仅一个数字数组)

2.特殊测试(null)

Java代码

//题目:假设一个单调递增的数组里的每个元素都是整数并且是唯一的。请编程实

//现一个函数找出数组中任意一个数值等于其下标的元素。例如,在数组{-3, -1,

//1, 3, 5}中,数字3和它的下标相等。

public class IntegerIdenticalToIndex {

public int getNumberSameAsIndex(int[] arr) {

if(arr==null || arr.length<=0)

return -1; //代表错误

int low=0;

int high=arr.length-1;

while(low<=high) {

int mid= (high+low)>>1;

if(arr[mid]>mid)

high=mid-1;

else if(arr[mid]

low=mid+1;

else

return mid;

}

return -1;

}

}

收获

1.对于在排序数组中查找某些特定的数字,可以对二分法稍加改造,实现所需的功能。

剑指offer-面试题53_3-数组中数值和下标相等的元素-二分查找

/* 题目: 求单调递增数组中,数值与下标相等的任意数字. */ /* 思路: 二分法. */ #include #include #in ...

《剑指offer》旋转数组中的最小数字

本题来自 旋转数组中的最小数字 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例 ...

《剑指offer》第五十三题(数组中数值和下标相等的元素)

// 面试题53(三):数组中数值和下标相等的元素 // 题目:假设一个单调递增的数组里的每个元素都是整数并且是唯一的.请编程实 // 现一个函数找出数组中任意一个数值等于其下标的元素.例如,在数组{ ...

[剑指Offer]53-在排序数组中查找数字(二分查找)

题目一 数字在排序数组中出现的个数 题目描述 统计一个数字在排序数组中出现的次数. 解决思路 写两个二分查找分别找第一个和最后一个该数字,然后可直接出计算有几个该数字.时间复杂度为O(logn). 这 ...

剑指offer——58数组中数值和下标相等的元素

题目三: 数组中数值和下标相等的元素. 假设一个单调递增的数组里的每个元素都是整数并且是唯一的.请编程实现一个函数,找出数组中任意一个数值等于其下标的元素.例如,在数组{-3,-1,1,3,5}中,数 ...

【Offer】[53-3] 【数组中数值和下标相等的元素】

题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 假设一个单调递增的数组里的每个元素都是整数并且是唯一的.请编程实现一个函数,找出数组中任意一个数值等于其下标的元素.例如,在数组{-3, ...

(java)剑指offer二维数组中的查找

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从 上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. pu ...

剑指Offer 二维数组中的查找

题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路法一: * 矩阵是 ...

《剑指offer》-递增数组中找到和为S的(最小)两个元素

题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. 首先 ...

随机推荐

黄聪:css3实现图片划过一束光闪过效果(图片光影掠过效果)

CSS代码 .guangshu { display:block; position: relative; width:800px; height:450px; margin:0 auto;} .gua ...

Visual Studio Professional 2015 key

Visual Studio Professional 2015 Key : HMGNV-WCYXV-X7G9W-YCX63-B98R2 Visual Studio Enterprise 2015 Ke ...

启动Print Spooler服务提示:";错误1068,依存服务或无法启动";

本人windows8操作系统,从网上看到在运行中输入  sc config spooler depend= rpcss 即可,试了下果然有效.具体原因待了解.

Show Users Assigned to a Specific Role

In a previous post I showed you how to know what Roles are assigned to a specific user. But here is ...

hdu4300之KMP&;&;EKMP

Clairewd’s message Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

xml在此生活

小编尾随学习的步伐.今天小编简要概述xml在此生活,xml她的百度百科这一解释:可扩展标记语言 (ExtensibleMarkup Language, XML).用于标记电子文件使其具有结构性的标记语 ...

数组去重Demo引出的思考

package com.pers.Stream; import java.util.*; import java.util.stream.Collectors; import java.util.st ...

腾讯Alloy团队代码规范

概述 我个人很看重代码规范,因为代码是写给别人看的,按规范写别人才更容易理解.之前苦于没有代码规范的资料,现在在github上面看到了腾讯Alloy团队的代码规范,于是学习了一下,并记录下我自己还没怎 ...

【20】策略者模式(Strategy Pattern)

一.引言 本文要介绍的策略模式也就是对策略进行抽象,策略的意思就是方法,所以也就是对方法的抽象,下面具体分享下我对策略模式的理解. 二.策略者模式介绍 2.1 策略模式的定义 在现实生活中,策略模式的 ...

python模块os

一.os模块概述 Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.(一语中的) 二.常用方法 1.os.name 输出字符串指示正在使用的平台 ...

你可能感兴趣的:(java中数组的下标比较)