LeetCode
页页读
这个作者很懒,什么都没留下…
展开
-
LRU 缓存结构 (c++ 哈希双链表实现)
LRU 缓存结构link题目描述:设计LRU缓存结构,该结构在构造时确定大小,假设大小为K,并有如下两个功能set(key, value):将记录(key, value)插入该结构get(key):返回key对应的value值[要求]set和get方法的时间复杂度为O(1)某个key的set或get操作一旦发生,认为这个key的记录成了最常使用的。当缓存的大小超过K时,移除最不经常使用的记录,即set或get最久远的。若opt=1,接下来两个整数x, y,表示set(x, y)原创 2020-09-10 21:27:14 · 843 阅读 · 0 评论 -
合并k个已排序的链表(分治+递归 c++实现)
合并k个已排序的链表link题目描述合并\ k k 个已排序的链表并将其作为一个已排序的链表返回。分析并描述其复杂度。题解:分治+递归每次将链表数组分为两个等长的数组分别递归,将各自结果再用mergeTwo归并返回;/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(N原创 2020-09-07 12:31:19 · 446 阅读 · 0 评论 -
寻找第K大 总结 c++
找第K大nowcoder link题目描述有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。测试样例:[1,3,5,2,2],5,3返回:2题解:思路:快排+二分法像快排一样,但是每次排完需要与k进行比较,具体比较看代码。1.由于一般排序是从小到大排的;所以注意这里比较的时候是 n-i 与 k进行比较;2.或者从大到小排,则比较 i+1 与 k的大小;代码:1. 从小到原创 2020-09-05 12:31:41 · 373 阅读 · 0 评论 -
链表中的节点每k个一组翻转(c++实现)
LRU c++ 哈希双链表法实现leetcode link牛客 link以牛客这个题目表述写的:设计LRU缓存结构,该结构在构造时确定大小,假设大小为K,并有如下两个功能set(key, value):将记录(key, value)插入该结构get(key):返回key对应的value值[要求]set和get方法的时间复杂度为O(1)某个key的set或get操作一旦发生,认为这个key的记录成了最常使用的。当缓存的大小超过K时,移除最不经常使用的记录,即set或get最久远的。原创 2020-09-05 09:42:13 · 1095 阅读 · 0 评论 -
LeetCode 416. 分割等和子集
LeetCode 416. 分割等和子集link题目给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例 2:输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等的子集.题解解法一:动态规划背包问题,先迭代原创 2020-08-21 22:11:07 · 166 阅读 · 0 评论 -
c++实现7种常见排序算法并测试
c++实现7种常用排序算法快速排序;选择排序;冒泡排序;插入排序;希尔排序;归并排序;堆排序;#include <iostream>#include <vector>#include <limits.h>#include <algorithm>using namespace std;// 1.快速排序void quick_sort(vector<int>& nums, int left, int righ原创 2020-08-20 23:19:26 · 437 阅读 · 0 评论 -
LeetCode 115. 不同的子序列
题目link给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数。一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,“ACE” 是 “ABCDE” 的一个子序列,而 “AEC” 不是)题目数据保证答案符合 32 位带符号整数范围。示例 1:输入:S = “rabbbit”, T = “rabbit”输出:3解释:如下图所示, 有 3 种可以从 S 中得到 “rabbit” 的方案。(上箭头符号 ^ 表示原创 2020-08-17 20:17:50 · 80 阅读 · 0 评论 -
字符串匹配的KMP算法
字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。这种算法不太容易理解,网上有很多解释,但读起来都很费劲。直到读到Jake Boxer的文章,我才真正理解这种算法。下面,我用自己的语言,试图写一篇比较好懂的KMP算法解释。转载 2020-08-13 12:08:04 · 87 阅读 · 0 评论 -
LeetCode 46、47 全排列 (c++实现)
46. 全排列(一)link题目:给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]解法一:这个方法的思路就是每次选一个出来往后排,例如,[1,2,3]第一个位置分别可拿 1、2、3,放到第一位。1,,2,,3,,第二个位置分别可拿 剩下的其中一个,例如,对于1,, ,则下一个只能拿2,或者3过来排队。往下依次递归,知原创 2020-07-29 22:18:35 · 290 阅读 · 0 评论 -
LeetCode 39、40组合总和 (c++实现)
题39 组合总和link考察点:回溯,去重给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。解答:回溯就不说了,关键是去重,就要保证先排序,然后每次往下查找保证查找的范围比当前值大,就可以去重了。灵魂是sort,和增加一个搜索开始的位置s,保证下次搜索从原创 2020-07-29 17:23:44 · 241 阅读 · 0 评论 -
LeetCode 32. 最长有效括号(c++动态规划)
LeetCode 32. 最长有效括号link题目:给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: “(()”输出: 2解释: 最长有效括号子串为 “()”示例 2:输入: “)()())”输出: 4解释: 最长有效括号子串为 “()()”解答:根据题解自己写的c++解答:class Solution {public: int longestValidParentheses(string s) {原创 2020-07-24 00:05:45 · 273 阅读 · 0 评论 -
LeetCode 31. 下一个排列(c++易懂版)
LeetCode 31. 下一个排列(c++易懂版)(medium)link题目:实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1解答:这里5右边比5大的最靠右的那个数即为比5大的数中最小的一个。替换5和6原创 2020-07-23 22:39:18 · 222 阅读 · 1 评论 -
LeetCode 65. 有效数字(记录一下c++实现)
LeetCode 65. 有效数字(记录一下)link题目描述:验证给定的字符串是否可以解释为十进制数字。例如:"0" => true" 0.1 " => true"abc" => false"1 a" => false"2e10" => true" -90e3 " => true" 1e" => false"e3" => false" 6e-1" => true" 99e2.5 " => false"53.5e9原创 2020-07-23 12:24:20 · 215 阅读 · 0 评论 -
312.戳气球(LeetCode)总结
312.戳气球(LeetCode)总结题目描述:有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。如果你戳破气球 i ,就可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代表和 i 相邻的两个气球的序号。注意当你戳破了气球 i 后,气球 left 和气球 right 就变成了相邻的气球。求所能获得硬币的最大数量。说明:你可以假设 nums[-1]原创 2020-07-17 22:20:57 · 201 阅读 · 0 评论 -
leetcode 354. 俄罗斯套娃信封问题总结(c++实现)
题目描述:给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。说明:不允许旋转信封。示例:输入: envelopes = [[5,4],[6,4],[6,7],[2,3]]输出: 3解释: 最多信封的个数为 3, 组合为: [2,3] => [5,4] => [6原创 2020-07-16 23:54:57 · 1018 阅读 · 0 评论 -
二分法写法总结(c++实现)
以LeetCode上这个题为例:34. 在排序数组中查找元素的第一个和最后一个位置参考自这个解析.主要是方便以后自己好复习#include <iostream>#include <vector>#include "unistd.h"using namespace std;class Solution {public: vector<int> searchRange(vector<int>& nums, int target原创 2020-07-16 17:39:50 · 906 阅读 · 0 评论 -
去掉一个二进制数的最末尾的那个1
黑科技一:n & (n-1)例子:剑指offer15题,二进制中1的个数class Solution {public: int hammingWeight(uint32_t n) { int count = 0; while(n){ n = n & (n-1); ++count; } return count; }};黑科技二:把最右边那个1的左原创 2020-07-06 15:44:13 · 1224 阅读 · 1 评论 -
LeetCode1326.灌溉花园最少水龙头数目 (hard)总结
1326.灌溉花园最少水龙头数目问题描述:在 x 轴上有一个一维的花园。花园长度为 n,从点 0 开始,到点 n 结束。花园里总共有 n + 1 个水龙头,分别位于 [0, 1, …, n] 。给你一个整数 n 和一个长度为 n + 1 的整数数组 ranges ,其中 ranges[i] (下标从 0 开始)表示:如果打开点 i 处的水龙头,可以灌溉原创 2020-05-11 15:21:15 · 617 阅读 · 0 评论