📅  最后修改于: 2023-12-03 15:41:16.223000             🧑  作者: Mango
以下是一个Java程序,可在排序和旋转数组中查找是否存在给定总和的对。
public class FindPairInSortedRotatedArray {
static boolean pairInSortedRotated(int arr[],int n,int x){
//首先找到旋转点的位置
int i;
for(i=0;i<n-1;i++){
if(arr[i]>arr[i+1])
break;
}
int l=(i+1)%n; //左侧指针
int r=i; //右侧指针
while(l!=r){
if(arr[l]+arr[r]==x)
return true;
if(arr[l]+arr[r]<x)
l=(l+1)%n;
else
r=(n+r-1)%n;
}
return false;
}
public static void main(String args[]){
int arr[] = {11, 15, 26, 38, 9, 10};
int sum = 35;
int n = arr.length;
//在数组中查找给定总和的对
if (pairInSortedRotated(arr, n, sum))
System.out.print("Array has two elements with sum "+sum);
else
System.out.print("Array doesn't have two elements with sum "+sum);
}
}
此程序的主要思想是使用二分搜索算法在旋转数组中查找给定总和的对。首先要找到旋转点的位置,然后定义左侧和右侧指针来搜索数组。如果左指针和右指针指向的两个元素之和等于给定的总和,则返回true。如果总和小于当前的和,则将左指针向前移动。如果总和大于当前的和,则将右指针向后移动。如果左指针不等于右指针,则继续搜索数组。
程序输出如下:
Array has two elements with sum 35
因此,该程序成功地在给定的旋转数组中找到了总和为35的元素对。