// 面试题53(三):数组中数值和下标相等的元素
// 题目:假设一个单调递增的数组里的每个元素都是整数并且是唯一的。请编程实
// 现一个函数找出数组中任意一个数值等于其下标的元素。例如,在数组{-3, -1,
// 1, 3, 5}中,数字3和它的下标相等。//思想:因为这里也是递增的,如果中间点的值大于下标,那后面所有值都会大于相应下标,同理中间点小于下标,前面都会小于下标
#include <iostream>int GetNumberSameAsIndex(const int* numbers, int length)
{if (numbers == nullptr || length <= 0)return -1;int left = 0;int right = length - 1;while (left <= right){int middle = left + ((right - left) >> 1);if (numbers[middle] == middle)//第一种情况,中间点直接中了return middle;if (numbers[middle] > middle)//第二种情况,中间点值大于坐标,向左区间找right = middle - 1;else//第三种情况,中间点值小于坐标,向右区间找left = middle + 1;}return -1;
}// ====================测试代码====================
void Test(const char* testName, int numbers[], int length, int expected)
{if (GetNumberSameAsIndex(numbers, length) == expected)printf("%s passed.\n", testName);elseprintf("%s FAILED.\n", testName);
}void Test1()
{int numbers[] = { -3, -1, 1, 3, 5 };int expected = 3;Test("Test1", numbers, sizeof(numbers) / sizeof(int), expected);
}void Test2()
{int numbers[] = { 0, 1, 3, 5, 6 };int expected = 0;Test("Test2", numbers, sizeof(numbers) / sizeof(int), expected);
}void Test3()
{int numbers[] = { -1, 0, 1, 2, 4 };int expected = 4;Test("Test3", numbers, sizeof(numbers) / sizeof(int), expected);
}void Test4()
{int numbers[] = { -1, 0, 1, 2, 5 };int expected = -1;Test("Test4", numbers, sizeof(numbers) / sizeof(int), expected);
}void Test5()
{int numbers[] = { 0 };int expected = 0;Test("Test5", numbers, sizeof(numbers) / sizeof(int), expected);
}void Test6()
{int numbers[] = { 10 };int expected = -1;Test("Test6", numbers, sizeof(numbers) / sizeof(int), expected);
}void Test7()
{Test("Test7", nullptr, 0, -1);
}int main(int argc, char* argv[])
{Test1();Test2();Test3();Test4();Test5();Test6();Test7();system("pause");return 0;
}

转载于:https://www.cnblogs.com/CJT-blog/p/10538096.html

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

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

    本文参考自<剑指offer>一书,代码采用Java语言. 题目 假设一个单调递增的数组里的每个元素都是整数并且是唯一的.请编程实现一个函数找出数组中任意一个数值等于其下标的元素.例如,在数 ...

  2. 【LeetCode】剑指 Offer 53 - I. 在排序数组中查找数字 I

    [LeetCode]剑指 Offer 53 - I. 在排序数组中查找数字 I 文章目录 [LeetCode]剑指 Offer 53 - I. 在排序数组中查找数字 I 一.二分法 总结 一.二分法 ...

  3. 剑指offer——面试题51:数组中重复的数字

    剑指offer--面试题51:数组中重复的数字 Solution1: 20180910更新.利用数组做一次hash映射,时间复杂度为O(n)O(n)O(n),空间复杂度O(n)O(n)O(n). cl ...

  4. 【难题+重点】剑指offer——面试题40:数组中只出现一次的数字

    剑指offer--面试题40:数组中只出现一次的数字 Solution1: 书中展示了很棒的思路: 关于异或的两个性质应该知道: (1) X^X = 0; (2) X^0 = X; class Sol ...

  5. 【重点】剑指offer——面试题36:数组中的逆序对

    剑指offer--面试题36:数组中的逆序对 Solution1: 20180905整理 参考网址:https://www.nowcoder.com/profile/4474567/codeBookD ...

  6. 剑指offer——面试题29:数组中出现次数超过一半的数字

    剑指offer--面试题29:数组中出现次数超过一半的数字 Solution1: 20180902日整理 注意几点: 1.若下一个数字和我们之前保存的数字相同,则次数 +1 2.若下一个数字和我们之前 ...

  7. C++版 - 剑指Offer 面试题36:数组中的逆序对及其变形(Leetcode 315. Count of Smaller Numbers After Self)题解

    剑指Offer 面试题36:数组中的逆序对 题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 例如, 在数组{7,5, ...

  8. c++在数组中添加元素_39. 数组中数值和下标相等的元素

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

  9. 【剑指offer题解】二维数组中的查找

    前言 众所周知,对于面试而言,<剑指offer>是一本"好书". 如果你和我一样是个算法菜鸡,那么最推荐的是先把剑指offer的题目搞明白,其次再去刷LeetCode等 ...

最新文章

  1. 【连载】优秀程序员的 45 个习惯之习惯33
  2. 如何将C#nullable int转换为int
  3. ArcEngine的拓扑分析之ITopologicalOperator
  4. python 计量_距离度量以及python实现(二)
  5. python中xpath定位下拉菜单_Selenium2+Python3.6实战(八):定位下拉菜单出错,如何解决?用select或xpath定位。...
  6. python三方库打包项目中_将Python库打包到项目中
  7. es-03-DSL的简单使用
  8. \r \n \r\n的区别
  9. Atitit uke人才分类 杰出人才 高级人才、专业技术人才、技能人才 杰出人才移民共包含科技丶艺术丶工商丶运动及教育五大领域 杰出人才定义 编辑 联邦移民法规定「杰出能力」是指在科学丶艺
  10. 抖音直播电商带货项目商业运营计划书短视频创业规划方案
  11. 项目管理十大知识领域之项目风险管理
  12. 大牛书单 | C++ 好书推荐
  13. python三级联动菜单_Excel–这才是三级联动下拉菜单的正确做法
  14. Ambari2.7+HDP3.0安装(基于Centos7)
  15. 桌面内存管理器(dwn.exe)占用内存过高时怎么办?
  16. 精选了国内外 6 个接私活的网站,供大家赚钱!
  17. 肾有多好人就有多年青――男女通用
  18. xml中sql的大于号小于号处理
  19. 通向天才之路 : 实时环境映射贴图技术(Real-time Evironmnet Mapping)
  20. 移动互联网时代的四大特征

热门文章

  1. 每个java小应用程序都得继承,JAVA复习题3
  2. 结合反向传播算法使用python实现神经网络的ReLU、Sigmoid、Affine、Softmax-with-Loss层
  3. c++ 访问控制与封装
  4. (BFS)Dungeon Master(poj2251)
  5. python曲面图颜色渐变方向_matplotlib三维曲面的透明度和颜色渐变?
  6. python字符串用法_笔记:python字符串的使用
  7. curaengine linux编译,CuraEngine开源程序解读
  8. python序列类型包括字符串_python序列类型字符串列表元组
  9. python 2048源码_一个python的2048简单实现
  10. linux iso的引导文件,Linux_从硬盘启动Desktop ISO所需的引导文件,一、仅从硬盘启动Destdop ISO 并 - phpStudy...