9.11排序与查找(三)——给定一个排序后的数组,包括n个整数,但这个数组已被旋转过多次,找出数组中的某个元素
/**
* 思路:数组被旋转过了,则寻找拐点。
* @param a
* @param left
* @param right
* @param x:要搜索的元素
* @return
*/
public static int search(int[] a,int left,int right,int x){
int mid=(left+right)/2;
if(x==a[mid])//找到元素
return mid;
if(left>right)
return -1; if(a[left]<a[mid]){//左半边为正常顺序
if(x>=a[left]&&x<=a[mid]){
return search(a,left,mid-1,x);//搜索左半边
}else{
return search(a, mid+1, right, x);//搜索右半边
}
}else if(a[mid]<a[right]){//右半边为正常顺序
if(x>=a[left]&&x<=a[mid]){
return search(a,left,mid-1,x);//搜索左半边
}else{
return search(a, mid+1, right, x);//搜索右半边
}
}else if(a[left]==a[mid]){//左半边是反复元素
if(a[mid]!=a[right]){//若右边元素不同,则搜索右边
return search(a, mid+1, right, x);//搜索右半边
}else{//否则两边都搜索
int result=search(a, left, mid=1, x);
if(result==-1){
return search(a, mid+1, right, x);
}else
return result;
}
}
return -1;
}
9.11排序与查找(三)——给定一个排序后的数组,包括n个整数,但这个数组已被旋转过多次,找出数组中的某个元素的更多相关文章
- 通过代码审计找出网站中的XSS漏洞实战(三)
一.背景 笔者此前录制了一套XSS的视频教程,在漏洞案例一节中讲解手工挖掘.工具挖掘.代码审计三部分内容,准备将内容用文章的形式再次写一此,前两篇已经写完,内容有一些关联性,其中手工XSS挖掘篇地址为 ...
- 找出数组中出现次数超过一半的数,现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数
找出数组中出现次数超过一半的数,现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数 #include<iostream>using namespace s ...
- 长度为n的数组,有一个数重复出现了n/2+1次,找出(三种方法)
问题: 长度为n的数组,有一个数重复出现了n/2+1次,找出这个数: 解决: 比较直接的思路是遍历每个元素,让其与剩下其他元素比较,相等一次计数器sum++,直到sum=n/2+1为止: #inc ...
- 《剑指offer》第三_一题(找出数组中重复的数字,可改变数组)
// 面试题3(一):找出数组中重复的数字 // 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了, // 也不知道每个数字重复了几次.请 ...
- 找出二叉查找树中指定结点的”下一个"结点(也即中序后继)
设计一个算法.找出二叉查找树中指定结点的"下一个"结点(也即中序后继).能够假定每一个结点都含有指向父结点的连接. watermark/2/text/aHR0cDovL2Jsb2c ...
- 函数内this指向+排序+找出数组大小项+Math类
解决函数内this指向: 1,可以在函数外提前声明变量 _this/that = this 2,通过apply()和call()来修改函数内的this指向 二者区别: 用法是一样的,参数形式不一样 f ...
- 【剑指offer】找出数组中任意一个重复的数字,C++实现
原创博文,转载请注明出处! # 题目 # 思路 对于长度为n的数组,范围为0~n-1的数字而言,如果不粗在重复数字,则排序后数组元素和数组角标相同.如果存在重复数字,则在排序的过程中会出现不同下标对应 ...
- 最接近的三数之和(给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数, 使得它们的和与 target 最接近。返回这三个数的和)
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2). 思路:首先对数组进行排序 ...
- 剑指offer1: 组类型——二维数组中的查找(给定一个数字,查找是否在该数组中)
1. 思路: 缩小范围 2. 方法: (1)要查找的数字等于数组中的数字,结束查找过程: (2)要查找的数字小于数组中的数字,去除该数字右边的数字,在剩下的数字里查找: (3)要查找的数字大于数组中的 ...
随机推荐
- oracle创建用户赋予权限,删除权限
--删除用户及及用户下的所有数据 drop user xxx cascade; --创建用户赋予密码 ; --赋予权限 grant dba to xxx; --删除权限 revoke dba from ...
- docker从零开始网络(六)Macvlan
使用Macvlan网络 某些应用程序,尤其是遗留应用程序或监视网络流量的应用程序,希望直接连接到物理网络.在这种情况下,您可以使用macvlan网络驱动程序为每个容器的虚拟网络接口分配MAC地址,使其 ...
- docker从零开始(四)集群初体验,docker-machine swarm
介绍 在第三节中,选择了第二节中编写的应用程序,并通过将其转换为服务来定义它应如何在生产中运行,并生成五个应用实例 在本节中,将此应用程序部署到群集上,在多台计算机上运行它.多容器,多机应用程序通过连 ...
- android studio 设置
1.设置启动不打开最近项目 2.设置字体 3.安装逍游模拟器,并与android studio 进行链接 adb connect 127.0.0.1:21503 4.添加第三方包 文件jar.Modu ...
- 肖申克的救赎 -Hope
典狱长诺顿高高在上,平时道貌岸然,对圣经倒背如流,实际上攫取利益时不择手段,残酷.阴险而贪婪.狱警长海利和其他警员,凶狠残暴,充当诺顿的打手,草菅囚犯的人命.他们是不是象极了我们现实中的掌权阶层?我称 ...
- Codeforces Round 254 (Div. 2)
layout: post title: Codeforces Round 254 (Div. 2) author: "luowentaoaa" catalog: true tags ...
- 线段树+扫描线【HDU1542】Atlantis
Description 给定一些二维空间上的矩形,求它们的面积并. 一道线段树+扫描线的板子题 然而即使我会打了,也不能灵活运用这种算法.QAQ 遇到题还是不太会. 但是这种板子题还是随随便便切的. ...
- 改变jenkins主目录
jenkins主目录默认是运行在当前用户的家目录下,如: /home/heboan/.jenkins 因为随着jenkins项目的情况,这个目录会变得越来越大,当我的家目录空间不够大的时候就要考虑把主 ...
- Windows 环境下 Redis 安装
1.redis官方下载地址:https://redis.io/download,redis 64位下载地址:https://github.com/MicrosoftArchive/redis/rele ...
- (转)python之并行任务的技巧
Python的并发处理能力臭名昭著.先撇开线程以及GIL方面的问题不说,我觉得多线程问题的根源不在技术上而在于理念.大部分关于Pyhon线程和多进程的资料虽然都很不错,但却过于细节.这些资料讲的都是虎 ...