【解题报告】《LeetCode零基础指南》(第四讲) 一维数组(1)

简介: 【解题报告】《LeetCode零基础指南》(第四讲) 一维数组(1)

☘前言☘

今天是九日集训第三天,我会记录一下学习内容和题解,争当课代表0.0.

注意!!!!题解的解法1是今天要掌握的解法,解法2是学有余力再研究,涉及到后面知识点0.0

链接:《LeetCode零基础指南》(第四讲) 一维数组


🧑🏻作者简介:一个从工业设计改行学嵌入式的年轻人

✨联系方式:2201891280(QQ)

⏳全文大约阅读时间: 20min


全文目录

 ☘前言☘

 🎁主要知识点梳理

           📝数组相关定义

                      🚗1.顺序存储

                      🚕2.定义和初始化

                      🚌3.长度和容量

                      🚓4.数组元素调用

                      🚑5.数组的参数传递

 🍗课后习题

            33. 搜索旋转排序数组

            81. 搜索旋转排序数组 II

            153. 寻找旋转排序数组中的最小值

            70. 爬楼梯

            509. 斐波那契数

            1137. 第 N 个泰波那契数

            2006. 差的绝对值为 K 的数对数目

            LCP 01. 猜数字

            LCP 06. 拿硬币

 📑写在最后

🎁主要知识点梳理

📝数组相关定义

🚗1.顺序存储

顺序存储结构,是指利用一段连续的存储单元来存储元素。如下图,每一块都对应了一个数组元素。

9f2fa8a6d145f99c19b008a9f8c0f1e.png


🚕2.定义和初始化

一个数组的定义为:


int a[10];


对应于字符串或者浮点数就是char str[10];、double db[10];


一维数字的初始化为


int a[5] = { 1, 2, 3, 4, 5,};

6e99bcedff08a059f171569d0da0024.png


如果只需要初始化部分的数据我们可以不去计算有几个元素。如下:


int a[] = {1, 2, 3, 4, 5};


如果我们只需要初始化一部分值就可以如下声明初始化:


int a[10] = {1, 2, 3, 4, 5};


🚌3.长度和容量

数组的长度是当前一共有多少元素。

数组的容量是指声明的数组的长度。

比如上面的只初始化一部分的容量就如图

0b3f1db9562310b260224b14a8d3a38.png


🚓4.数组元素调用

我们可以用[]运算符来索引对应的元素

int a[10] = {1, 2, 3, 4, 5};
int a = a[4];
int b = a[8];
int c = a[10];//errot


一定要注意我的图上数组是从0号开始的,所以int a[10]后绝对没有a[10]元素,访问越界。


🚑5.数组的参数传递

一般只传递数组的首地址,也就是下面这种形式。


int add(int *nums, int numsSize) {
   // ...
}


其中的int *nums和int nums[]是等价写法,同时,a[5]和*(a+5)也是等价写法!

🍗课后习题

33. 搜索旋转排序数组

33. 搜索旋转排序数组

题目描述


整数数组nums按升序排列,数组中的值 互不相同 。

在传递给函数之前,nums 在预先未知的某个下标k(0 <= k < nums.length)上进行了 旋转,使数组变为[nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如,[0,1,2,4,5,6,7]在下标 3 处经旋转后可能变为[4,5,6,7,0,1,2]。

给你 旋转后 的数组 nums 和一个整数target ,如果 nums 中存在这个目标值target,则返回它的下标,否则返回 -1。


思路


从前到后搜,搜的到就是有,搜不到就是没有!


int search(int* nums, int numsSize, int target){
    for(int i = 0; i < numsSize; ++i)
        if(target == nums[i]) return i;
    return -1;
}


81. 搜索旋转排序数组 II

81. 搜索旋转排序数组 II

题目描述


整数数组nums按升序排列,数组中的值 互不相同 。

在传递给函数之前,nums 在预先未知的某个下标k(0 <= k < nums.length)上进行了 旋转,使数组变为[nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如,[0,1,2,4,5,6,7]在下标 3 处经旋转后可能变为[4,5,6,7,0,1,2]。

给你 旋转后 的数组 nums 和一个整数target ,如果 nums 中存在这个目标值target,则返回它的下标,否则返回 -1。


思路


和上面那道题是一样的。


int search(int* nums, int numsSize, int target){
    for(int i = 0; i < numsSize; ++i)
        if(target == nums[i]) return i;
    return -1;
}

153. 寻找旋转排序数组中的最小值

153. 寻找旋转排序数组中的最小值

题目描述


已知一个长度为n的数组,预先按照升序排列,经由1到n次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7]在变化后可能得到:


若旋转 4次,则可以得到[4,5,6,7,0,1,2]

若旋转7次,则可以得到[0,1,2,4,5,6,7]

注意,数组 [a[0], a[1], a[2], ..., a[n-1]]旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], ..., a[n-2]]。

给你一个元素值 互不相同 的数组 nums ,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的最小元素。


思路


哦,上次找元素,这次找最小值,那就一个一个比较呗?


int findMin(int* nums, int numsSize){
    int ans = 50000;//定义到最大值
    for(int i = 0;i < numsSize;i++)
        if(ans >nums[i]) ans = nums[i];
    return ans;
}


相关文章
|
1月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
38 0
|
3月前
|
算法
LeetCode第53题最大子数组和
LeetCode第53题"最大子数组和"的解题方法,利用动态规划思想,通过一次遍历数组,维护到当前元素为止的最大子数组和,有效避免了复杂度更高的暴力解法。
LeetCode第53题最大子数组和
|
3月前
|
存储 Java API
LeetCode------合并两个有序数组(4)【数组】
这篇文章介绍了LeetCode上的"合并两个有序数组"问题,并提供了三种解法:第一种是使用Java的Arrays.sort()方法直接对合并后的数组进行排序;第二种是使用辅助数组和双指针技术进行合并;第三种则是从后向前的双指针方法,避免了使用额外的辅助数组。
LeetCode------合并两个有序数组(4)【数组】
|
3月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
113 2
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 03. 数组中重复的数字
解决剑指Offer题目 "数组中重复的数字" 的Python实现方法,通过使用字典来记录数组中每个数字的出现次数,快速找出重复的数字。
37 1
LeetCode------找到所有数组中消失的数字(6)【数组】
这篇文章介绍了LeetCode上的"找到所有数组中消失的数字"问题,提供了一种解法,通过两次遍历来找出所有未在数组中出现的数字:第一次遍历将数组中的每个数字对应位置的值增加数组长度,第二次遍历找出所有未被增加的数字,即缺失的数字。
|
3月前
|
前端开发
LeetCode------移动零(5)【数组】
这篇文章介绍了LeetCode上的"移动零"问题,提出了一种使用双指针的原地操作解法,该方法首先将非零元素移动到数组前端并保持相对顺序,然后填充后续位置为零,以达到题目要求。
|
1月前
【LeetCode-每日一题】 删除排序数组中的重复项
【LeetCode-每日一题】 删除排序数组中的重复项
19 4
|
1月前
|
索引
Leetcode第三十三题(搜索旋转排序数组)
这篇文章介绍了解决LeetCode第33题“搜索旋转排序数组”的方法,该问题要求在旋转过的升序数组中找到给定目标值的索引,如果存在则返回索引,否则返回-1,文章提供了一个时间复杂度为O(logn)的二分搜索算法实现。
18 0
Leetcode第三十三题(搜索旋转排序数组)
|
1月前
|
算法 C++
Leetcode第53题(最大子数组和)
这篇文章介绍了LeetCode第53题“最大子数组和”的动态规划解法,提供了详细的状态转移方程和C++代码实现,并讨论了其他算法如贪心、分治、改进动态规划和分块累计法。
57 0