您将获得一个排序和旋转的数组,如下所示:
int arr[]={16,19,21,25,3,5,8,10};
如果您注意到数组已排序和旋转。您需要以 o(log n) 时间复杂度搜索上述数组中的元素。
您可以使用线性搜索在上述数组中搜索元素,但这需要 o(n)。
您可以使用二进制搜索算法的变体来解决上述问题。您可以使用可以将数组划分为两个排序的子数组({16,19,21,25},{3,5,8,10} )的属性,尽管您不需要找到枢轴点(元素开始减少)。
算法:
让我们借助示例来理解这一点。
在上述数组中搜索 5 涉及的步骤:
用于在已排序和旋转的数组中搜索元素的 Java 程序:
创建一个名为的类
SearchElementSortedAndRotatedArrayMain.java。
package org.arpit.java2blog;
public class SearchElementSortedAndRotatedArrayMain {
public static void main(String[] args) {
int arr[]={16,19,21,25,3,5,8,10};
System.out.println("Index of element 5 : "+findElementRotatedSortedArray(arr,0,arr.length-1,5));
}
public static int findElementRotatedSortedArray(int[] arr,int low,int high,int number)
{
int mid;
while(low<=high)
{
mid=low + ((high - low) / 2);;
if(arr[mid]==number)
{
return mid;
}
if(arr[mid]<=arr[high])
{
// Right part is sorted
if(number > arr[mid] && number <=arr[high])
{
low=mid+1;
}
else
{
high=mid-1;
}
}
else
{
// Left part is sorted
if(arr[low]<=number && number < arr[mid])
{
high=mid-1;
}
else
{
low=mid+1;
}
}
}
return -1;
}
}
当你运行上面的程序时,你会得到以下输出:
Index of element 5 : 5
最初的问题是这样的: 假设排序后的数组在某个事先未知的轴上旋转。 (即0 1 2 4 5 6 7可能4 5 6 7 0 1 2)。 给您一个要搜索的目标值。如果在数组中找到,返回其索引,否则返回-1。 您可以假设数组中不存在重复项。链接在这里https://oj.leetcode.com/problems/search-in-rotated-sorted-array/ 我不知道这里的‘目标值’是什
我真的被困在这件事上了,我很想得到你的帮助 我正在尝试编写一个带有签名的方法: 该方法以循环排序的二维数组和搜索num的值作为参数获取。如果值num在mat数组中,则该方法返回true。如果num值不在mat数组中,则该方法返回false。 如果第1季度的所有值都比第2季度的值小,第2季度的值比第3季度的值小,第3季度的值比第4季度的值小,那么该数组就是圆形的。 例如,以下数组是循环排序的: 如果
本文涉及 4 道「搜索旋转排序数组」题: LeetCode 33 题:搜索旋转排序数组 LeetCode 81 题:搜索旋转排序数组-ii LeetCode 153 题:寻找旋转排序数组中的最小值 LeetCode 154 题:寻找旋转排序数组中的最小值-ii 可以分为 3 类: 33、81 题:搜索特定值 153、154 题:搜索最小值 81、154 题:包含重复元素 33. 搜索旋转排序数组
本文向大家介绍编写Golang程序以搜索排序数组中的元素,包括了编写Golang程序以搜索排序数组中的元素的使用技巧和注意事项,需要的朋友参考一下 解决这个问题的方法 步骤1:将数组从第0个索引迭代到n-1,其中n是给定数组的大小。 步骤2:声明low = 0th索引和high = n-1。启动一个for循环,直到低电平小于高电平为止。 步骤3:找到mid =(low + high)/ 2,如果中
问题内容: 我想知道旋转JavaScript数组的最有效方法是什么。 我想出了这个解决方案,其中一个正数将数组向右旋转,而一个负数向左(): 然后可以使用这种方式: 在下面的评论中指出的那样,我上面的原始版本有一个缺陷,那就是正确的版本(附加返回值允许链接): 是否有可能在JavaScript框架中更紧凑和/或更快速的解决方案?(以下任何一种建议的版本都不会更紧凑或更快速) 有没有内置数组旋转的J
问题内容: 假设我有以下数组: 我怎么在那里我有值序列发生指数:?因此,在这种情况下的预期输出为:。 编辑: 1)请注意,这只是一个序列。可能是或或,仅此而已。 2)如果将我的数组修改为:,则具有相同序列的预期结果将是。 我正在寻找一些NumPy快捷方式。 问题答案: 嗯,这基本上是图像处理中经常出现的问题。这篇文章中列出了两种方法:基于纯NumPy和基于OpenCV(cv2)。 方法1: 使用N