滚动数组 本文主要介绍一个十分实用的小技巧——滚动数组。它常被用来完成常数优化和减少代码量,且滚动数组思想是一种常见的动态规划优化方法。 假设有如下状态转移方程: dp[i][j] = max(dp[i-1][j+1], dp[i-1][j-1]); 按照该状态转移 2020-07-06 数据结构与算法 总结
41.缺失的第一个正数 题目描述给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。 提示:你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间。 前言若不考虑时空复杂度,可以使用辅助空间记录出现的数字的方式实现,亦或者从1开始暴力比较每一个数组元素来实现。而按照题目中的要求,则需要尝试利用题目所给出的数组空间来协助完成。 2020-06-27 数据结构与算法 LeetCode C++ 哈希 数组
5441.保证文件名唯一 题目描述给你一个长度为n的字符串数组names。你将会在文件系统中创建n个文件夹:在第i分钟,新建名为names[i]的文件夹。 由于两个文件不能共享相同的文件名,因此如果新建文件夹使用的文件名已经被占用,系统会以(k)的形式为新文件夹的文件名添加后缀,其中k是能保证文件名唯一的最小正整数。 返回长度为n的字符串数组,其中ans[i]是创建第i个文件夹时系统分配给该文件夹的实际名称。 2020-06-21 数据结构与算法 LeetCode C++ 哈希
1014.最佳观光组合 题目描述给定正整数数组A,A[i]表示第i个观光景点的评分,并且两个景点i和j之间的距离为j-i。 一对景点(i < j)组成的观光组合的得分为(A[i] + A[j] + i - j):景点的评分之和减去它们两者之间的距离。 返回一对观光景点能取得的最高分。 2020-06-17 数据结构与算法 LeetCode C++ 动态规划
1477.找两个和为目标值且不重叠的子数组 题目描述给你一个整数数组arr和一个整数值target。 请你在arr中找两个互不重叠的子数组且它们的和都等于target。可能会有多种方案,请你返回满足要求的两个子数组长度和的最小值。 请返回满足要求的最小长度和,如多无法找到这样的两个子数组,请返回**-1**。 2020-06-15 数据结构与算法 LeetCode C++ 哈希 动态规划 贪心算法
5437.不同整数的最少数目 题目描述给你一个整数数组arr和一个整数k。现需要从数组中恰好移除k个元素,请找出移除后数组中不同整数的最少数目。 思路与算法 首先根据题意,最终要得到不同整数的最少数目,说明我们所删除的k个元素要尽可能的互不相同,也就是说优先删除出现次数最少的元素。 根据上述思路,这里我们选择使用map来完成<数据, 出现次数>的存储。然后通过按照出现 2020-06-14 数据结构与算法 LeetCode C++