美文网首页
【leetcode C语言实现】剑指 Offer 11.旋转数组

【leetcode C语言实现】剑指 Offer 11.旋转数组

作者: sunshine_hanxx | 来源:发表于2020-07-08 23:21 被阅读0次

    题目描述

    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。

    示例 1:

    输入:[3,4,5,1,2]
    输出:1
    示例 2:

    输入:[2,2,2,0,1]
    输出:0

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof

    解题思路

    旋转后的数组可以看成两个有序数组,左边是一个升序排列的数组,右边也是一个升序排列的数组,因此,最左边的数是左边有序数组的最小值,最右边数是右边有序数组的最大值,通过二分法比较中间值与左右数组两边的值可以很快定位到最小值。

    代码

    int minArray(int* numbers, int numbersSize){
    
        int start = 0, end = numbersSize - 1;
        int mid_index = 0;
    
        if(numbers == NULL || numbersSize == 0)
        {
            return 0;
        }
    
        while(start < end)
        {
            mid_index = (start + end) / 2;
            if(numbers[mid_index] < numbers[end])
                end = mid_index;
            else if(numbers[mid_index] == numbers[end])
                end--;
            else
                start = mid_index + 1;
        }
    
        return numbers[start];
    }
    

    测试代码及结果

    #include<stdio.h>
    #include<stddef.h>
    
    int minArray(int *numbers, int numbersSize);
    
    int main(void)
    {
        int res1, res2, res3, res4;
        int nums1[] = {3, 4, 5, 1, 2};
        int nums2[] = {3, 4, 4, 5, 5, 1, 2};
        int nums3[] = {3};
        void *nums4 = NULL;
        // 功能测试
        res1 = minArray(nums1, sizeof(nums1) / sizeof(int));
        printf("%d\n", res1);
    
        res2 = minArray(nums2, sizeof(nums2) / sizeof(int));
        printf("%d\n", res2);
    
        // 边界值测试
        res3 = minArray(nums3, sizeof(nums3) / sizeof(int));
        printf("%d\n", res3);
    
        // 特殊输入测试
        res4 = minArray(nums4, sizeof(nums4) / sizeof(int));
        printf("%d\n", res4);
    }
    

    执行结果

    时间复杂度:O(logn),空间复杂度: O(1)。


    相关文章

      网友评论

          本文标题:【leetcode C语言实现】剑指 Offer 11.旋转数组

          本文链接:https://www.haomeiwen.com/subject/lwekcktx.html