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)

Java中对数组升序排列用Arrays.sort( )方法,那降序排列用啥方法?

二分查找之算法

python版冒泡排序

Java数组问题<现在有一组无序字符序列: a、c、u、b、e、p、f、z.按字母顺序进行升序排列。

华为OD机试真题 Java 实现找等值元素2022.11 Q4 新题