zoukankan      html  css  js  c++  java
  • 《剑指offer》第五十三题(数组中数值和下标相等的元素)

    // 面试题53(三):数组中数值和下标相等的元素
    // 题目:假设一个单调递增的数组里的每个元素都是整数并且是唯一的。请编程实
    // 现一个函数找出数组中任意一个数值等于其下标的元素。例如,在数组{-3, -1,
    // 1, 3, 5}中,数字3和它的下标相等。
    
    //思想:因为这里也是递增的,如果中间点的值大于下标,那后面所有值都会大于相应下标,同理中间点小于下标,前面都会小于下标
    #include <iostream>
    
    int GetNumberSameAsIndex(const int* numbers, int length)
    {
        if (numbers == nullptr || length <= 0)
            return -1;
    
        int left = 0;
        int right = length - 1;
        while (left <= right)
        {
            int middle = left + ((right - left) >> 1);
            if (numbers[middle] == middle)//第一种情况,中间点直接中了
                return middle;
    
            if (numbers[middle] > middle)//第二种情况,中间点值大于坐标,向左区间找
                right = middle - 1;
            else//第三种情况,中间点值小于坐标,向右区间找
                left = middle + 1;
        }
    
        return -1;
    }
    
    // ====================测试代码====================
    void Test(const char* testName, int numbers[], int length, int expected)
    {
        if (GetNumberSameAsIndex(numbers, length) == expected)
            printf("%s passed.
    ", testName);
        else
            printf("%s FAILED.
    ", testName);
    }
    
    void Test1()
    {
        int numbers[] = { -3, -1, 1, 3, 5 };
        int expected = 3;
        Test("Test1", numbers, sizeof(numbers) / sizeof(int), expected);
    }
    
    void Test2()
    {
        int numbers[] = { 0, 1, 3, 5, 6 };
        int expected = 0;
        Test("Test2", numbers, sizeof(numbers) / sizeof(int), expected);
    }
    
    void Test3()
    {
        int numbers[] = { -1, 0, 1, 2, 4 };
        int expected = 4;
        Test("Test3", numbers, sizeof(numbers) / sizeof(int), expected);
    }
    
    void Test4()
    {
        int numbers[] = { -1, 0, 1, 2, 5 };
        int expected = -1;
        Test("Test4", numbers, sizeof(numbers) / sizeof(int), expected);
    }
    
    void Test5()
    {
        int numbers[] = { 0 };
        int expected = 0;
        Test("Test5", numbers, sizeof(numbers) / sizeof(int), expected);
    }
    
    void Test6()
    {
        int numbers[] = { 10 };
        int expected = -1;
        Test("Test6", numbers, sizeof(numbers) / sizeof(int), expected);
    }
    
    void Test7()
    {
        Test("Test7", nullptr, 0, -1);
    }
    
    int main(int argc, char* argv[])
    {
        Test1();
        Test2();
        Test3();
        Test4();
        Test5();
        Test6();
        Test7();
        system("pause");
        return 0;
    }
  • 相关阅读:
    jquery选择器(复习向)
    如何使元素/文字 垂直居中?
    mvc与mvvm的区别与联系
    python16_day26【crm 增、改、查】
    python16_day25【crm】
    python16_day24【restful、crm表构、认证】
    python16_day23【cmdb前端】
    django 【认证】
    python16_day22【cmdb注释】
    django【F和Q】
  • 原文地址:https://www.cnblogs.com/CJT-blog/p/10538096.html
Copyright © 2011-2022 走看看