在有序旋转数组中找到一个数

翻译 2018年04月17日 13:34:19

这里写图片描述

//在有序旋转数组中找到一个数
public class FindNum{

     public static boolean isContains(int[]arr,int num)
     {
          int low=0;
          int high=arr.length-1;
          int mid=0;
          while(low<=high)
          {
              mid=(low+high)/2;
              if(arr[mid]==num)
              {
                  return true;
              }
              if(arr[low]==arr[mid]&&arr[mid]==arr[high])
              {
                    while(low!=mid&&arr[low]==arr[mid])
                    {
                         low++;
                    }
                    if(low==mid)
                    {
                          low=mid+1;
                          continue;
                    }

              }
              if(arr[low]!=arr[mid])
              {
                  if(arr[mid]>arr[low])
                  {
                       if(num>=arr[low]&&num<arr[mid])
                       {
                          high=mid-1;
                       }else{
                           low=mid+1;
                       }
                  }else{
                         if(num>arr[mid]&&num<=arr[high])
                         {
                             low=mid+1;
                         }else{
                             high=mid-1;
                         }
                  }
              }else{

                    if(arr[mid]<arr[high])
                    {
                          if(num>arr[mid]&&num<=arr[high])
                          {
                                low=mid+1;
                          }else{
                                 high=mid-1;
                          }
                    }else{

                           if(num>=arr[low]&&num<arr[mid])
                           {
                             high=mid-1;
                           }else{
                              low=mid+1;
                           }

                    }
              }
          }
          return false;
     }

     public static  void main(String[]args)
     {
        //System.out.println("Hello");
         int arr[]={4,5,6,7,1,2,3};
         int num=3;
         System.out.println(isContains(arr,num));
     }
}

这里写图片描述

小米笔试题(查找旋转数组中的元素)

今天参加小米现场笔试,遇到一个关于查找旋转数组中的元素算法问题,在这里记录一下。...
  • a1181191837
  • a1181191837
  • 2015-10-08 23:25:55
  • 1859

在一个旋转有序数组中,查找最小的数

本题源自leetcode  154 --------------------------------- 思路: 代码: int findMin(vector& nums...
  • i_am_bird
  • i_am_bird
  • 2017-11-30 12:18:49
  • 45

其他题目---在有序旋转数组中找到一个数

【题目】  有序数组arr可能经过一次旋转处理,也可能没有,且arr可能存在重复的数。例如,有序数组[1,2,3,4,5,6,7],可以旋转处理成[4,5,6,7,1,2,3]等。给定一个可能旋转过的...
  • qq_34342154
  • qq_34342154
  • 2017-10-31 09:42:49
  • 118

在有序旋转数组中找到最小值

/** * Created by lxw, liwei4939@126.com on 2017/11/5. * 给定一个可能旋转过的有序数组arr,可能存在重复的值,返回arr中的最小值 */ ...
  • liwei1205
  • liwei1205
  • 2017-11-05 14:25:11
  • 30

有序数组旋转的问题

1、有序数组旋转后寻找数组中的最小值 一般情况下我们的第一反应肯定是遍历此数组,但这肯定不是我们所期望的,因为此数组是有序数组旋转而成,所以我们此时应该想到用二分法来寻找数组中的最小值。假设我们给定递...
  • zw_1510
  • zw_1510
  • 2016-06-16 17:19:08
  • 760

循环有序数组查找一个数

网上看了有些代码有些错误,这里重新更正了下 思想:循环数组有一边是有序的,首先先判断哪一边有序(通过将当前mid点与最左边节点比较),然后查看是否在有序边上 代码如下 #include #includ...
  • cz28274815
  • cz28274815
  • 2014-09-12 18:33:59
  • 1036

剑指offer第六题【旋转数组的最小数字】c++实现

旋转数组的最小数字 参与人数:3258时间限制:1秒空间限制:32768K通过比例:14.10%最佳记录:0 ms|0K(来自  Wocao) 题目描述 把一个数组最开始的若...
  • u011692312
  • u011692312
  • 2015-10-14 11:30:19
  • 494

循环有序数组的查找笔记

一个循环有序数组(如:3,4,5,6,7,8,9,0,1,2),不知道其最小值的位置,要查找任一数值的位置。要求算法时间复杂度为log2(n)。 循环有序数组的性质: 1.将一个循环有序数组...
  • philosophyatmath
  • philosophyatmath
  • 2016-02-22 22:03:21
  • 1636

将一个数插入到有序的数列中,插入后的数列仍然有序

#include #define N 5 void main() {  int a[N+1];    int i,j,t,num;    printf("请输入%d个整数:\n",N); ...
  • sssara
  • sssara
  • 2016-12-08 15:30:10
  • 2174

在一个有序的旋转数组中,查找给定值

思路一: 因为数组有序,经过旋转后,数组保持局部有序。因此可以用二分查找。 bool search(int A[], int n, int target) { int start=0...
  • i_am_bird
  • i_am_bird
  • 2017-10-21 13:52:05
  • 47
收藏助手
不良信息举报
您举报文章:在有序旋转数组中找到一个数
举报原因:
原因补充:

(最多只允许输入30个字)