数据结构与算法01-数组
数组
aolaf
这个作者很懒,什么都没留下…
展开
-
06 螺旋矩阵II(leecode 59)
1 问题给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例:输入: 3输出:[[ 1, 2, 3 ],[ 8, 9, 4 ],[ 7, 6, 5 ]]2 解法模拟顺时针画矩阵的过程:填充上行从左到右填充右列从上到下填充下行从右到左填充左列从下到上由外向内一圈一圈这么画下去。为了控制循环时的边界问题,采用循环不变量原则,始终坚持左闭右开原则(或左开右闭)。这里每一种颜色,代表一条边,我们遍历的长度,可以看出每一个拐角处的原创 2021-01-23 10:28:56 · 128 阅读 · 0 评论 -
05 长度最小的子数组(leecode 209)
1 问题给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。示例:输入:s = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。2 解法滑动窗口:通过不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果。i从数组的起始位置出发,j则依次向后移动,直至i与j之间窗口构成的子序列和大于等于s,此时将子序列的和减去i原创 2021-01-22 11:28:16 · 157 阅读 · 0 评论 -
04 删除有序数组中的重复项(leecode 26)
1 问题给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝int len = removeDuplicate原创 2021-03-23 21:31:32 · 153 阅读 · 0 评论 -
03 移动零(leecode 283)
1 问题给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。2 解法先利用快慢指针移除数组中的0,再在末尾补0class Solution {public: void moveZeroes(vector<int>& nums) { int slow = 0;原创 2021-03-23 22:26:03 · 83 阅读 · 0 评论 -
02 移除数组元素(leecode 27)
1 问题给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。示例 2:给定 nums = [0,1,2,2,3,0,4,2], val = 2,函数应该返回新原创 2021-01-18 17:56:50 · 129 阅读 · 0 评论 -
01 搜索插入位置(leecode 35)
1 题目给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。2 分析有序数组,考虑使用二分搜索。2.1 二分搜索class Solution {public: int searchInsert(vector<int>& nums, int target) { // 设定循环不变式为[left, right] int left = 0;原创 2021-01-18 16:00:46 · 143 阅读 · 0 评论 -
00 数组基础知识
1 数组的存储方式数组是存放在连续内存空间上的相同类型数据的集合。数组可以方便的通过下表索引的方式获取到下表下对应的数据。注意:数组的下标都是从0开始的。数组内存空间的地址是连续的。数组中存放的数据类型相同。正是因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。时间复杂度为O(n),所以数组不适合做频繁的增删操作 。2 二维数组的存储方式二维数组其实就是一个矩阵,那么二维数组在内存的空间地址是连续的么?二维数组的存储方式其实是一个线性原创 2021-01-17 16:17:48 · 224 阅读 · 1 评论