在一个排序的数组中,如{1,2,3,4,5,6,7},经过旋转后得到{4,5,6,7,1,2,3},当然也可以得到原数组{1,2,3,4,5,6,7},在该旋转后的数组中查找某个元素。

旋转后的数组可以分成两部分,每一部分都是排序好了的。如果旋转后的特殊情况就是和源数组一样,直接利用二分查找即可。像{4,5,6,7,1,2,3}这样的旋转数组可以分成两部分,每一部分都是排序好了的。在使用二分查找的时候要判断所查找的元素是在左半分还是在右半部分。

#include using namespace std;

int FindData(int data[], int length, int num)

{

if( data == NULL || length <= 0 )

return -1;

int begin = 0;

int end = length - 1;

while( begin <= end )

{

int mid = begin + ( (end - begin)>>1 );

if( data[mid] == num )

return mid;

else if( data[mid] > num )

{

if( num >= data[0] ) //num 在左半部分

{

end = mid - 1;

}

else if(data[mid] >= data[0]) //num在右半部分,data[mid]在左半部分

{

begin = mid + 1;

}

else //num在右半部分, data[mid]也在右半部分

{

end = mid - 1;

}

}

else if( data[mid] < num )

{

begin = mid + 1;

}

}

return -1;

}

int main()

{

int data[] = {4,5,6,7,1,2,3};

int length = sizeof(data)/sizeof(data[0]);

for(int i = 0; i < length; i++ )

{

int index = FindData( data, length, data[i] );

cout<

这里有一个特殊情况没有考虑就是比如{1,1,1,1,0,1,1}这样有很多重复的元素的数组时,当要查找0时,在mid位置的元素为1,不能判断怎么缩小范围,需要O(n)的遍历。

java旋转数组查找某一个值_旋转数组中查找某个元素相关推荐

  1. python从键盘输入一个列表计算输出元素的平均值_python列表查找值_在Python中查找列表平均值的5种方法...

    python列表查找值 Hi Folks! In this article, we will have a look at the various ways to find the average o ...

  2. python删除链表中的某一个值_删除链表中等于给定值val的所有节点(python实现)...

    原博文 2016-03-30 18:00 − Example: Given 1->2->3->4->5->3, val = 3, return the list as 1 ...

  3. 【Java】从键盘中输入一个值,在数组中查找该值的索引并输出

    问题: 从键盘中输入一个值,在数组中查找该值的索引并输出 代码: package learnjava;import java.util.Scanner;public class demo13 {pub ...

  4. sql server一对多怎么查询_Vlookup函数查找最后一个值和一对多查询

    在网上流行一种说法:Vlookup函数是大众情人,这充分说明Vlookup函数的江湖地位.学好vlookup,查找什么都不怕.我们已经学习了vlookup函数的单条件精确查找.模糊查找.逆向查询.多条 ...

  5. code第一部分数组:第二十二题 偶数次中查找单独出现一次的数

    code第一部分数组:第二十二题 偶数次中查找单独出现一次的数 Given an array of integers, every element appears twice except for o ...

  6. Leetcode 给定一个数组,给定一个数字。返回数组中可以相加得到指定数字的两个索引

    问题内容是:给定一个数组,给定一个数字.返回数组中可以相加得到指定数字的两个索引. 比如:给定nums = [2, 7, 11, 15], target = 9 那么要返回 [0, 1],因为2 + ...

  7. java——定义一个功能将ArrayList 集合中的重复元素删除(java集合七)

    定义一个功能将ArrayList 集合中的重复元素删除 ArrayList 集合中是允许储存重复元素的 import java.util.ArrayList; import java.util.Ite ...

  8. qdialog 返回值_PyQt QDialog - 返回一个值并从对话框中关闭

    我正在PyQt的用户界面上工作,我遇到了一些试图使用QDialog的问题.基本上我有一个主小部件和一个子小部件,保存在单独的.py文件中;当我点击主窗口小部件中的某个按钮时,我想要打开子窗口小部件.这 ...

  9. Excel 用D列的值去A列中查找,将A列所对应的B列值填入E列

    Excel 用D列的值去A列中查找,将A列所对应的B列值填入E列 业务场景:某公司员工姓名与编号壹壹对应,现给出一堆杂乱无章的编号,要求找出这些编号所对应的员工姓名 这里要用到函数 =VLOOKUP( ...

最新文章

  1. 解决IDEA报错:Lambda expressions not supported at language level '7'
  2. Kubernetes使用集群联邦实现多集群管理
  3. Android Studio升级后报 method not found: 'runProguard'的错误
  4. 装饰者模式的应用场景
  5. linux禁止切换到root,linux禁止普通用户切换至root用户的实例讲解
  6. 刷新本地的DNS缓存数据
  7. 使用named_mutex实现锁机制
  8. [3.30校内训练赛]
  9. 解决ubuntu中zip解压的中文乱码问题
  10. fckeditor组件使用---fckeditor调用的三种方法1
  11. .Net配置文件中数据库中连接字符串用法总结
  12. 将本地文件push到gitee上面
  13. Linux目录/usr/bin和 /usr/local/bin区别
  14. 【笔记+总结】Andrew Ng-神经网络和深度学习
  15. Python学习 Day 039 - HTML
  16. 2022年PC必备的5款软件,功能强大且免费,你用过几个?
  17. Halcon深度学习-目标检测-Rectangle1
  18. 分享国内外好用的H5页面制作网站
  19. 韦仕敦大学计算机科学,2020年西安大略大学有哪些优势专业
  20. Chrome/edge inspect远程调试移动设备

热门文章

  1. 广发银行 java面试
  2. 分治法基本思想(汉诺塔问题 Tower of Hanoi)
  3. 计算机毕业设计springboot佳选生活超市会员管理系统7pd9i源码+系统+程序+lw文档+部署
  4. Geant4程序 T1program
  5. NLP与推荐系统的比较、联系与未来
  6. dart ?符号 问号符 后置问号 问号后置 flutter
  7. TextCNN-文本情感分析项目实战
  8. 对糗事百科的搞笑段子的抓取
  9. 2021年Android设备唯一ID总结(Android11.0以下)
  10. C语言 extern 经常出错的一处