但是,在通过移动数组的上升周期中找到指定元素

该阵列是按升序排列,通过循环数组后动。肯定是有左半或半或升序的一部分。

代码:

public class SearchRotateArray {
	public static int search(int a[], int l, int u, int x) {
		while(l<=u){
			int m = (l+u)/2;
			if(x==a[m]){
				return m;
			}else if(a[l]<=a[m]){ //左半部分升序排列
				if(x>a[m]){
					l=m+1;
				}else if(x>=a[l]){
					u=m-1;
				}else{// x<a[l]
					l=m+1;
				}
			}else if(a[l]>a[m]){ //右半部分升序
				if(x>a[u]){
					u=m-1;
				}else if(x>=a[m]){
					l=m+1;
				}else{ //x<a[m]
					u=m-1;
				}
			}
		}
		return -1;
	}

	public static void main(String[] args){
		int a[] = {15,16 ,19, 20, 25, 1, 3, 4, 5, 7, 10, 14};
		System.out.println(search(a, 0, a.length - 1, 5));
	}
}

结果:

8

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-10-31 23:34:14

但是,在通过移动数组的上升周期中找到指定元素的相关文章

在一个升序的但是经过循环移动的数组中查找指定元素

数组是升序的,数组经过循环移动之后,肯定是有左半部分或者有半部分还是升序的. 代码: public class SearchRotateArray { public static int search(int a[], int l, int u, int x) { while(l<=u){ int m = (l+u)/2; if(x==a[m]){ return m; }else if(a[l]<=a[m]){ //左半部分升序排列 if(x>a[m]){ l=m+1; }else if

旋转数组中查找指定元素

如题,在旋转数组中查找指定元素,考虑到多种情况,网上的方法大部分没有考虑,当low,high,mid三个值相等时的情况. 代码如下: int findAll(int A[],int low,int high,int value)//当三个相等时,查找全部元素的函数. { for(int i = low;i < high;i++) { if(A[i]==value) return i; } return -1; } int find(int A[],int n,int value)//查找旋转数组

学underscore在数组中查找指定元素

前言 在开发中,我们经常会遇到在数组中查找指定元素的需求,可能大家觉得这个需求过于简单,然而如何优雅的去实现一个 findIndex 和 findLastIndex.indexOf 和 lastIndexOf 方法却是很少人去思考的.本文就带着大家一起参考着 underscore 去实现这些方法. 在实现前,先看看 ES6 的 findIndex 方法,让大家了解 findIndex 的使用方法. findIndex ES6 对数组新增了 findIndex 方法,它会返回数组中满足提供的函数的

ES6数组中删除指定元素

知识点: ES6从数组中删除指定元素 findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引.否则返回-1. arr.splice(arr.findIndex(item => item.id === data.id), 1) http://louiszhai.github.io/2017/04/28/array/ 1:js中的splice方法 splice(index,len,[item]) 注释:该方法会改变原始数组. splice有3个参数,它也可以用来替换/删除/添加数组

在JSP使用EL中判断指定元素是否存在于指定集合中

在JSP使用EL中判断指定元素是否存在于指定集合中 1.问题描述 在JSP页面中使用EL表达式判断一个指定元素是否存在于指定集合中? 2.问题解决 eg:指定集合:collection:{1,2,3,4,45,6,7,},指定元素:4 <!-- set集合,存储测试值存在于集合否? --> <c:set var="iscontain" value="false" /> <!-- 原始集合:items,集合元素 :var--> &l

javascript 从一组数据中找到指定的单条数据的方法 by FungLeo

从一组数据中找到指定的单条数据的方法 在一般情况下,我们会要求后端在列表的时候输出一堆列表的JSON数据给我们,然后我们把这堆数据循环,就能在前端上显示列表了. 而我们在内容页的时候,则要求输出一个内容页的JSON数据给我们,我们就可以做内容页了. 但是,有时候,数据并不是特别复杂,我们可能需要从列表的数据中指定其中的单条数据.怎么做呢? 标准答案,find方法 var json = [{"id":1,"name":"张三"},{"id

剔除数组或List中重复的元素

import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; public class NonDuplicatesList { public static void main(String[] args) { String[] colors = { "red", "white",

PHP 从数组中删除指定元素

<?php $arr1 = array(1,3, 5,7,8); $key = array_search(3, $arr1); if ($key !== false){ array_splice($arr1, $key, 1); } var_dump($arr1); // array(4) { [0]=> int(1) [1]=> int(5) [2]=> int(7) [3]=> int(8) } ?> <?php $arr2 = array(1,3, 5,7,

数据结构之 线性表---单链表操作A (删除链表中的指定元素)

数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除.分别输出建立的初始单链表和完成删除后的单链表. 输入 第一行输入数据个数n: 第二行依次输入n个整数: 第三行输入欲删除数据m. 输出 第一行输出原始单链表的长度: 第二行依次输出原始单链表的数据: 第三行输出完成删除后的单链表长度: 第四行依次输出完成删除后的