前言
- 非计算机专业,只学过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;
}
};
结果
问题
-
class、public忘了详细的定义与作用,看到还是比较慌
复习菜鸟教程上的解释 -
对vector<int>& nums感到困惑
向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。
菜鸟教程上的解释
- 结果中:执行时间符合预期;内存消耗为何最低?
朋友说是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);
}
};
此方法中定义了个递归函数,之前我没接触过,因而很陌生。其实为在函数定义中调用函数自身。不知道它是怎么一步步求解的,后续研究。