在排序和反转的数组中查找最小元素

时间:2020-02-23 14:34:12  来源:igfitidea点击:

在本教程中,我们将看到如何在排序和旋转数组中找到最小元素。

问题:

我们提供了如下排序和反转的数组:

int arr[]={16,19,21,25,3,5,8,10};

如果我们注意到阵列被排序和反转。
我们需要在O(log n)时间复杂度中找到上面的数组中的最小元素。
我们可以假设数组中不允许重复项。

解决方案:

我们可以使用二进制搜索算法的变体来解决上述问题。

我们可以使用一个属性,如果将数组划分为两个排序的子阵列({16,19,21,25},{3,5,8,10}),则将排序,另一个将具有最小元素

算法:

  • 计算中期:低+高/2.
  • 检查[中间...高]是排序的
  • 最小位于左侧部分,因此低至+ 1;
  • 别的
  • 最小部分位于右侧部分,如此高=中期

Java程序在排序和旋转数组中找到最小元素:

创建一个名为的类

minipueelementsortedandrotatedarraymain.java。

package org.igi.theitroad;
public class MinimumElementSortedAndRotatedArrayMain {
 
 public static void main(String[] args) {
 int arr[]={16,19,21,25,3,5,8,10};
 System.out.println("Minimum element in the array : "+findMinimumElementRotatedSortedArray(arr,0,arr.length-1,5));
 }
 public static int findMinimumElementRotatedSortedArray(int[] arr,int low,int high,int number)
 {
 int mid;
 while(low<high)
 {
 mid=low + ((high - low)/2);
 
 if(arr[mid] > arr[high])
 {
 low=mid+1;
 }
 else 
 {
 high=mid;
 }
 }
 return arr[low];
 }
}

运行上面的程序时,我们将得到以下输出:

Minimum element in the array : 3