☘前言☘
今天是九日集训第三天,我会记录一下学习内容和题解,争当课代表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.顺序存储
顺序存储结构,是指利用一段连续的存储单元来存储元素。如下图,每一块都对应了一个数组元素。
🚕2.定义和初始化
一个数组的定义为:
int a[10];
对应于字符串或者浮点数就是char str[10];、double db[10];
一维数字的初始化为
int a[5] = { 1, 2, 3, 4, 5,};
如果只需要初始化部分的数据我们可以不去计算有几个元素。如下:
int a[] = {1, 2, 3, 4, 5};
如果我们只需要初始化一部分值就可以如下声明初始化:
int a[10] = {1, 2, 3, 4, 5};
🚌3.长度和容量
数组的长度是当前一共有多少元素。
数组的容量是指声明的数组的长度。
比如上面的只初始化一部分的容量就如图
🚓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; }