在排序和反转的数组中查找最小元素
时间: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