LeetCode刷题:08.03.魔术索引

前言

  • 非计算机专业,只学过C++和数据库,也没用心学,现在睡醒了,想多学点
  • 文章作为日记或心得,记录学习过程
  • 第一天注册,文笔不熟练
  • 本文记录本题(源自LeetCode)遇到的所有问题、疑惑

正文

题目

在这里插入图片描述

第一次解答:暴力解法

class Solution {
public:
    int findMagicIndex(vector<int>& nums) {
//暴力解法,一次遍历
    for(int i = 0; i<nums.size(); i++)
    {
        if(i==nums[i])
        return i;
    }
    return -1;
    }
};

结果

在这里插入图片描述
在这里插入图片描述

问题

  1. class、public忘了详细的定义与作用,看到还是比较慌
    复习菜鸟教程上的解释

  2. vector<int>& nums感到困惑

向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。
菜鸟教程上的解释

  1. 结果中:执行时间符合预期;内存消耗为何最低?
    朋友说是4k对齐问题和动态链接问题

第二种解法:二分剪枝

参考了LeetCode的官方答案

class Solution 
{
public:
    int getAnswer(vector<int>& nums, int left, int right)
    {
        //检验参数是否规范
        if(left > right)
            return -1;
        //找中间值
        int mid = (right - left) / 2 + left;
        //对左边进行递归,以下步骤搞不懂
        int leftAnswer = getAnswer(nums, left, mid - 1);
        if(leftAnswer != -1)
            return leftAnswer;
        else if(nums[mid] == mid)
            return mid;
        return getAnswer(nums, mid+1, right);
        }

    int findMagicIndex(vector<int>& nums) 
    {
        return getAnswer(nums, 0, nums.size()-1);
    }
};

此方法中定义了个递归函数,之前我没接触过,因而很陌生。其实为在函数定义中调用函数自身。不知道它是怎么一步步求解的,后续研究。

猜你喜欢

转载自blog.csdn.net/wwz1751879/article/details/107706165
今日推荐