
leetcode
问号byr
这个作者很懒,什么都没留下…
展开
-
1024.视频拼接
1024.视频拼接贪心算法动态规划贪心算法暴力遍历每一个起点,每次找区间能到达的最远点,下一次的起始点小于等于这次的终点,下一次的终点继续尽可能远,当下一次的终点大于等于T时退出循环,如果最后终点也没有大于等于T,则返回-1.class Solution {public: int videoStitching(vector<vector<int>>& clips, int T) { int res = 1; int slow =原创 2020-10-24 17:24:13 · 30711 阅读 · 0 评论 -
99.恢复二叉搜索树
99.恢复二叉搜索树二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树1.dfs分情况讨论左子树最大值与右子树最小值交换左子树最大值与根节点交换右子树最小值与根节点交换左子树两个节点互换右子树两个节点互换class Solution {public: void maxNode(TreeNode* root,TreeNode* &big) { if(!root)return; if(root->val&原创 2020-09-29 10:41:16 · 89 阅读 · 0 评论 -
动态规划练习1
动态规划96. 不同的二叉搜索树给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?F(i,n)=G(i−1)⋅G(n−i)动态规划思想将n拆分class Solution {public: int numTrees(int n) { vector<int>G(n+1,0); G[0] = 1; G[1] = 1; for(int i=2;i<=n;i++) {原创 2020-09-28 10:36:59 · 95 阅读 · 0 评论 -
10.正则表达式匹配
正则表达式匹配给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘’ 的正则表达式匹配‘.’ 匹配任意单个字符'’ 匹配零个或多个前面的那一个元素1.递归思路class Solution {public: bool isMatch(string s, string p) { if(p.empty())return s.empty(); bool first_match = !s.empty() && (s[0]==原创 2020-09-25 00:11:00 · 251 阅读 · 0 评论 -
322.零钱兑换
322.零钱兑换给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。1.背包问题动态规划解决背包问题:dp[j] = min[dp[j],1+dp[j-coins[i]]]class Solution {public: int coinChange(vector<int>& coins, int amount) { const int INF原创 2020-09-24 15:36:28 · 95 阅读 · 0 评论 -
1122.数组的相对排序
1122.数组的相对排序给你两个数组,arr1 和 arr2,arr2 中的元素各不相同arr2 中的每个元素都出现在 arr1 中对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。1.暴力法暴力遍历两个数组,若相等代表为arr2中元素出现在arr1,与前面元素交换,最后再对剩余元素排序class Solution {public: vector<int> rela原创 2020-09-20 19:26:33 · 226 阅读 · 1 评论 -
1333. 餐厅过滤器
1333. 餐厅过滤器中规中矩的过滤筛选加排序class Solution {public: vector<int> filterRestaurants(vector<vector<int>>& restaurants, int veganFriendly, int maxPrice, int maxDistance) { vector<int> res; vector<vector<int&g原创 2020-09-20 18:00:11 · 115 阅读 · 0 评论 -
1452. 收藏清单
1452. 收藏清单给你一个数组 favoriteCompanies ,其中 favoriteCompanies[i] 是第 i 名用户收藏的公司清单(下标从 0 开始)。请找出不是其他任何人收藏的公司清单的子集的收藏清单,并返回该清单下标。下标需要按升序排列。1.调用stl库中的inludes函数,比较两个集合是否包含先对数组进行排序,再调用stl库中的inludes函数,比较两个集合是否包含class Solution {public: vector<int> peo原创 2020-09-20 11:47:50 · 161 阅读 · 0 评论 -
922. 按奇偶排序数组 II
922. 按奇偶排序数组 II给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。你可以返回任何满足上述条件的数组作为答案。1.暴力法,遍历比较并在新开辟的数组中添加class Solution {public: vector<int> sortArrayByParityII(vector<int>& A) { vector&原创 2020-09-20 11:13:32 · 165 阅读 · 0 评论 -
767. 重构字符串
767. 重构字符串给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。若可行,输出任意可行的结果。若不可行,返回空字符串。拆解字符串+重构字符串先用一个26位vector存储每一个字母出现次数,出现次数大于字符串长度一半时无法重构,其他情况都可以重构。按出现次数由大到小排序vector,保证先插入出现次数多的元素。重构时按奇数偶数位置插入元素。class Solution {public: string reorganizeString(string S) {原创 2020-09-17 11:11:38 · 100 阅读 · 0 评论 -
220. 存在重复元素 III
220. 存在重复元素 III在整数数组 nums 中,是否存在两个下标 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值小于等于 t ,且满足 i 和 j 的差的绝对值也小于等于 ķ 。如果存在则返回 true,不存在返回 false。暴力法class Solution {public: bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {原创 2020-09-17 09:56:59 · 77 阅读 · 0 评论 -
1471. 数组中的 k 个最强值
1471. 数组中的 k 个最强值给你一个整数数组 arr 和一个整数 k 。设 m 为数组的中位数,只要满足下述两个前提之一,就可以判定 arr[i] 的值比 arr[j] 的值更强:|arr[i] - m| > |arr[j] - m||arr[i] - m| == |arr[j] - m|,且 arr[i] > arr[j]请返回由数组中最强的 k 个值组成的列表。答案可以以 任意顺序 返回。中位数 是一个有序整数列表中处于中间位置的值。形式上,如果列表的长度为 n ,那么中原创 2020-09-15 09:00:18 · 115 阅读 · 0 评论 -
1498. 满足条件的子序列数目
给你一个整数数组 nums 和一个整数 target 。请你统计并返回 nums 中能满足其最小元素与最大元素的 和 小于或等于 target 的 非空 子序列的数目。由于答案可能很大,请将结果对 10^9 + 7 取余后返回。1.枚举法vmin<=vmax<=target-vminvmin2<=target枚举vmin,固定vmin,vmax为vmin到【target-vmin】,对剩余元素做二分查找,找到vmax个数,由于vmin2<=target,每个vmin贡.原创 2020-09-15 00:19:10 · 214 阅读 · 0 评论 -
面试题 16.16. 部分排序
给定一个整数数组,编写一个函数,找出索引m和n,只要将索引区间[m,n]的元素排好序,整个数组就是有序的。注意:n-m尽量最小,也就是说,找出符合条件的最短序列。函数返回值为[m,n],若不存在这样的m和n(例如整个数组是有序的),请返回[-1,-1]。正向遍历找极小值,反向遍历找极大值,然后分别找到极小值和极大值本应所在的位置即可,时间复杂度O(n)。class Solution {public: vector<int> subSort(vector<int>&a.原创 2020-09-03 09:48:40 · 218 阅读 · 0 评论 -
Leetcode524
Leetcode524给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。双指针判断是否为候选答案sort排序进一步筛选答案class Solution {public: string findLongestWord(string s, vector<string>& d) { string res ="";原创 2020-09-01 21:45:19 · 131 阅读 · 0 评论 -
Leetcode148链表排序
Leetcode148链表排序在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。快速排序:采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。该方法的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。class Solution {public: ListNode* quickSort(Li原创 2020-09-01 19:09:50 · 139 阅读 · 0 评论 -
Leetcode147.链表插入排序
Leetcode147.链表插入排序插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。class Solution {public: ListNode* insertionSortList(ListNode* head) { if(head==NULL || head->next==NULL)re原创 2020-09-01 00:21:50 · 66 阅读 · 0 评论 -
排序75.颜色分类
75.颜色分类给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]计数排序class Solution {public: void sortColors(vector<int>& nums) {原创 2020-08-31 23:57:42 · 166 阅读 · 0 评论 -
排序57.插入区间
Leetcode57.插入区间给出一个无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。示例:输入:intervals = [[1,3],[6,9]], newInterval = [2,5]输出:[[1,5],[6,9]]顺序比较,插入class Solution {public: vector<vector<int>> insert(vector<vect原创 2020-08-31 23:17:52 · 110 阅读 · 0 评论 -
排序56.合并区间
Leetcode排序56.合并区间给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: intervals = [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].双指针法:class Solution {public: vector<vector<int>> merge(vector<vector<i原创 2020-08-31 00:23:26 · 78 阅读 · 0 评论