zoukankan      html  css  js  c++  java
  • LeetCode数组类的题目提交记录 【2】

    /***********************************************************************
    33. Search in Rotated Sorted Array

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

    (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

    You are given a target value to search. If found in the array return its index, otherwise return -1.

    You may assume no duplicate exists in the array.


    eg: 

    0 1 2 3 4//右边有序情况
    4 0 1 2 3//右边有序情况
    3 4 0 1 2//右边有序情况

    2 3 4 0 1//左边有序情况
    1 2 3 4 0//左边有序情况
    **************************************************************/

    //代码提交1
    //循环法--查找
    
    int search(int* nums, int numsSize, int target) {
        int Left = 0;
        int Right = numsSize - 1;
        int Middle;
        while (Left <= Right)
        {
            Middle = (Left + Right) / 2;
    
            if (*(nums + Left) == target)
                return Left;
            if (*(nums + Right) == target)
                return Right;
            if (*(nums + Middle) == target)
                return Middle;
    
            if (*(nums + Left) < *(nums + Middle))
            {
                if (*(nums + Left) <= target && target < *(nums + Middle))
                    Right = Middle-1;
                else
                    Left = Middle + 1;
                continue;
            }
            else
            {
                if (*(nums + Middle) < target && target <= *(nums + Right))
                    Left = Middle + 1;
                else
                    Right = Middle-1;
                continue;
            }
    
        }
        return -1;
    }

      

    //代码提交2
    //递归法---查找
    int searchFun(int* nums, int nLeft,int nRight,int ntargrt) {
        int Left = nLeft;
        int Right = nRight;
        int Middle = (Left + Right) / 2;
    
        if (Left <= Right)
        {
            if (*(nums + Middle) == ntargrt) {
                return Middle;
            }
    
            if (*(nums + Middle) < *(nums + Right))
            {
                if (*(nums + Middle) < ntargrt && ntargrt <= *(nums + Right)) 
                {
                    Left = Middle + 1;
                    return searchFun(nums,Left,Right,ntargrt);
                }
                else            
                {
                    Right = Middle - 1;
                    return searchFun(nums, Left, Right, ntargrt);
                }
            }
    
            if (*(nums + Middle) > *(nums + Right)) 
            {
                if (*(nums + Middle) > ntargrt && ntargrt > *(nums + Right))
                {
                    Right = Middle - 1;
                    return searchFun(nums, Left, Right, ntargrt);
                }
                else 
                {
                    Left = Middle + 1;
                    return searchFun(nums, Left, Right, ntargrt);
                }
            }
    
            return -1;
        }
    
        return -1;
    }
    int search(int* nums, int numsSize, int target) {
        int Left = 0;
        int Right = numsSize - 1;
    
        int resultNum = searchFun(nums,Left,Right,target);
        return resultNum;
    }

    /***********************************************************************
    81. Search in Rotated Sorted Array II

    Follow up for "Search in Rotated Sorted Array":
    What if duplicates are allowed?

    Would this affect the run-time complexity? How and why?

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

    (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

    Write a function to determine if a given target is in the array.

    The array may contain duplicates.

    **************************************************************/

    bool search(int* nums, int numsSize, int target) {
        int Left = 0;
        int Right = numsSize - 1;
        int Middle;
        while (Left <= Right)
        {
            Middle = (Left + Right) / 2;
    
            if (*(nums + Left) == target)
                return true;
            if (*(nums + Right) == target)
                return true;
            if (*(nums + Middle) == target)
                return true;
    
            if (*(nums + Left) < *(nums + Middle))
            {
                if (*(nums + Left) <= target && target < *(nums + Middle))
                    Right = Middle - 1;
                else
                    Left = Middle + 1;
                continue;
            }
            else if (*(nums + Left) > *(nums + Middle))
            {
                if (*(nums + Middle) < target && target <= *(nums + Right))
                    Left = Middle + 1;
                else
                    Right = Middle - 1;
                continue;
            }
            else {//*(nums + Left) == *(nums + Middle)则跳过当前位置上的重复
                Left++;
            }
    
        }
        return false;
    }

      

  • 相关阅读:
    电商第一季函数笔记(1)
    沈逸老师PHP魔鬼特训笔记(2)
    PHP读书笔记(3)-常量
    2015/8/9 到家了,学完了CodeCademy的Python
    2015/8/4 告别飞思卡尔,抛下包袱上路
    2015/6/23 浪潮过去,我才来
    方维团购系统二次开发,项目经验
    方维团购系统整合云短信网短信平台,方维系统整合短信平台
    方维团购系统,下订单保存多个收货地址
    PHP木马查杀文件,木马查杀插件
  • 原文地址:https://www.cnblogs.com/iamcdx-2017/p/8124372.html
Copyright © 2011-2022 走看看