Java实现升序排列的整形数组A,元素两两不相等找出A[i]=i的数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java实现升序排列的整形数组A,元素两两不相等找出A[i]=i的数据相关的知识,希望对你有一定的参考价值。
import java.util.ArrayList; //升序排列的整形数组A,元素两两不相等。请设计高效的算法找出A[i]=i的数据。 //使用二种方法 public class BinarySearch { public static void main(String[] args) { int[] nums={-1,1,2,3}; ArrayList<Integer> res=find(nums); for(int e:res){ System.out.println(e+" "); } ArrayList<Integer> res2=binarysearch(nums); for(int e:res2){ System.out.println(e+" "); } } //方法一 public static ArrayList<Integer> find(int[] nums){ int n=nums.length; ArrayList<Integer> all=new ArrayList<Integer>(); for(int i=0;i<n;i++){ if(nums[i]==i){ all.add(nums[i]); }else if(nums[i]>i){ break; } } return all; } //方法二 public static ArrayList<Integer> binarysearch(int[] nums){ ArrayList<Integer> all=new ArrayList<Integer>(); int n=nums.length; if(n==0 || nums[0]>0 || nums[n-1]<n-1){ return all; } //至少有一个元素的值等于其下标 int pivot=binaryFind(nums,0,n-1); all.add(pivot); //向左查找所有目标元素 for(int i=pivot-1;i>=0 && i==nums[i];--i){ all.add(i); } //向右查找所有的目标元素 for(int i=pivot+1;i<n && i==nums[i];i++){ all.add(i); } return all; } public static int binaryFind(int[] nums,int i,int j){ //二分搜索方法 int mid=(i+j)/2; if(nums[mid]==mid){ return mid; }else if(nums[mid]>mid){ return binaryFind(nums,i,mid-1); }else{ return binaryFind(nums,mid+1,j); } } }
本文出自 “Apple” 博客,请务必保留此出处http://59465168.blog.51cto.com/5268021/1965755
以上是关于Java实现升序排列的整形数组A,元素两两不相等找出A[i]=i的数据的主要内容,如果未能解决你的问题,请参考以下文章
Java中对数组升序排列用Arrays.sort( )方法,那降序排列用啥方法?