自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ChasingTheFreeWind

只是个菜鸡罢了

  • 博客(113)
  • 资源 (6)
  • 收藏
  • 关注

原创 LeetCode动态规划系列,最长递增子序列二维版——俄罗斯套娃信封问题!

题目如果了解动态规划经典题目LIS(最长递增子序列)问题,那么读完这个题应该就能知道这个题其实质是让我们找信封长宽数组对的最长递增子序列。不过还有一点不同的是,LIS问题中,子序列是选取一些元素后按其原有的相对序列排列的。而这个问题中,“子序列”在选取部分元素后,并不是按其原来的相对顺序排列的,而是按照大小排列。所以,我们可以先把这个二维数组转化一下,对它排个序,它的宽由小到大排列。那长应该如何排列呢?我们看一下对[(5, 4), (6, 4), (6, 7), (2, 3)]长由大到小排列: (2

2021-09-22 22:10:17 182 1

原创 考研复试冲冲冲之非重点课程复习

考研复试之非重点课程复习信息安全感觉这门课被问到的概率还是挺大的,特别是这门课上学的DES、RSA可以结合计算机网络HTTPS来讲。为了准备复试,大概写下一些重要的知识点吧。最重要的是要了解对称加密和非对称加密。安全攻击的分类Interruption(阻断): 破坏AvailabilityInterception(窃听):破坏ConfidentialityModification(修改):破坏IntegrityFabrication(伪装):破坏Authentication主动攻击:主要有

2021-03-10 20:23:36 1967 2

原创 LeetCode25 K个一组翻转链表

思路似乎是个经典题目思路就是一个递归/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; thi.

2021-02-24 15:50:39 112

原创 LeetCode 经典题 LRU缓存

LRU算法应该对所有计算机\软工的同学都不陌生了。那么要如何实现LRU算法呢?LRU算法需要设计一个数据结构,这个数据结构有两个操作,一个是get(key):获取key对应的value,如果key不存在则返回-1put(key, value): 存入键值对以上两个操作的复杂度都应该为O(1)分析上述操作,总结这个数据结构的必要条件为:查找快、插入块、删除快、有序哈希表查找快,但无序链表有顺序,但查找慢,结合形成哈希链表。可以写下以下代码代码class Node{ Node pr

2021-02-08 21:54:05 142

原创 LeetCode 228场周赛第四题 最接近目标值的子序列和

题目链接dfs枚举所有子序列和一个长度为n的数组的所有子序列和的个数为2^n对于每一个元素,有选/不选两种情况由于问题给的数组长度最大为40,如果直接对整个数组求所有子序列和则最大时间复杂度级别达到2^40,于是可以将问题转换为求左半边和右半边数组的所有子序列和。然后对左半数组从小到大排序,右半数组从大到小排序,最后用双指针技巧解决问题。代码class Solution {public: vector<int> left, right; int cnt1 = 0;

2021-02-07 16:27:00 171

原创 LeetCode动态规划系列 编辑距离 冲冲冲

温故而知新嘛!其实讲道理,这个编辑距离其实蛮简单的啊!class Solution { public int minDistance(String word1, String word2) { int N = word1.length(); int M = word2.length(); if(N==0) return M; if(M==0) return N; in

2021-02-06 19:54:39 88

原创 LeetCode动态规划系列 打家劫舍 冲冲冲!

打家劫舍系列问题打家劫舍一思路显然,对于每家小偷都有打或不打两种情况,用dp[i][j]表示前i家小偷打劫的最大收益,并用j标记是否打劫第i家,于是很容易想到如下递推式:dp[i][0] = max(dp[i-1][0], dp[i-1][1]);dp[i][1] = max(dp[i-1][0], dp[i-2][1]) + nums[i]该式子又可以简化一下:dp[i] = max(dp[i-1], dp[i-2] + nums[i])class Solution { publ

2021-02-04 15:11:39 76

原创 LeetCode动态规划系列 买卖股票 冲冲冲!

递推式6个问题全解决dp[i][j][k]: 第i天 至多k次交易 (0无1有)dp[i][k][0] = max(dp[i-1][k][0], dp[i-1][k][1] + price[i])dp[i][k][1] = max(dp[i-1][k][1], dp[i-1][k-1][0] - price[i]) 买入时认为是一次交易dp[-1][k][0] = 0dp[-1][k][1] = -INF //第-1天不可能有股票dp[i][0][0] = 0;dp[i][0][1

2021-02-03 16:16:06 63

原创 Acwing 每日一题126. 最大的和

原题链接思路题目是要求子矩形的最大和。确定一个左上顶点和一个右下顶点可以确定一个矩形,要枚举这两个点,总的复杂度为N^4为简化,可以选择枚举上边界和下边界,此时可以确定一个矩形区域,然后可以将问题转换为求一维数组的最大连续和。import java.util.*;class Main{ final static int INF = 0x3f3f3f3f; public static void main(String[] args){ Scanner scanner

2021-01-30 16:32:10 90

原创 每日一题 冲冲冲 AcWing 420. 火星人

考研一段时间没写算法题,代码能力、思维能力真的是严重下降现在开始每日一题,坚持博客,恢复下思维能力吧。开始用Java写题目了,多熟悉下java题目链接思路就是全排列嘛题目的要求是要找给定全排列的后M个全排列例如给定全排列 1 2 5 4 3 找后3个全排列从后往前遍历,如果从i到N-1是单调递减的说明固定0~i-1无法找到比该全排列更大的全排列了。如果ar[i-1] < ar[i] 则应找到最后一个比它大的元素来替换i-1,然后将i到N-1逆置import java.util.*;

2021-01-28 17:30:58 86 1

原创 LeetCode 214场周赛(2020/11/01)

1. 能否连接形成数组哈希表其实比赛时第一题还想了好一会儿。其实这题思路很简单,用一个哈希表保存一维数组各个数字的位置。然后遍历二维数组pieces,然后对于pieces的每一个数组,判断该数组的值是否在一维数组中,是否在一维数组的位置是连续的即可。class Solution {public: bool canFormArray(vector<int>& arr, vector<vector<int>>& pieces) {

2020-11-01 21:07:31 212 1

原创 LeetCode第212场周赛(2020/10/25)

前两题略3. 最小体力消耗路径参考链接dijkstra优化#define INF 0x3f3f3f3fstruct Dist{ int x,y,z; Dist(int _x, int _y, int _z):x(_x), y(_y), z(_z){} bool operator < (const Dist& A) const { return z > A.z; } };class Solution {public:

2020-10-25 15:28:53 115

原创 剑指Offer刷题笔记

一、数组剑指Offer 03.数组中重复的数字思路运用了类似桶排序的思想。因为数字在0~n-1内,于是可以将值为x的元素放在下标为x的位置,如果放置时发现数组中下标为x的元素值已经是x了,则就找到了一个重复元素。时间复杂度O(n)空间复杂度O(1)代码class Solution {public: int findRepeatNumber(vector<int>& nums) { int i = 0; int N = nums.s

2020-10-18 12:31:46 657

原创 leetcode链表题目整理

剑指Offer剑指Offer 06.从尾到头打印链表栈/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: vector<int> reversePrint(ListNo

2020-10-11 12:08:19 143

原创 二叉树的最近公共祖先(未完待续)

问题1.二叉搜索树的最近公共祖先剑指 Offer 68 - I. 二叉搜索树的最近公共祖先思路求二叉搜索树中的两个节点p,q的最近公共祖先的思路比较简单:①如果遍历到的节点node的值在p节点的值和q节点的值之间,则说明p,q分别在node的左右子树之中,则node就是p和q的最近公共祖先。②如果node的值大于p和q的值,则p和q应该都在node的左子树中,即此时递归查找node的左子树。③如果node的值小于p和q的值,则p和q应该都在node的右子树中,则此时递归查找node的右子树。

2020-10-04 21:11:33 76

原创 LeetCode第209场周赛(2020/10/04)

1. 特殊数组的特征值思路懒得思考,直接暴力代码class Solution {public: int specialArray(vector<int>& nums) { for(int i=1;i<1010;i++) { int cnt = 0; for(int j=0;j<nums.size();j++) { if(nu

2020-10-04 20:50:38 84

原创 LeetCode第207场周赛(2020/09/27)

1.重新排列单词间的空格代码class Solution {public: string reorderSpaces(string text) { int N = text.length(); int cnt = 0; for(int i=0;i<N;i++) { if(text[i]==' ') cnt++; } istringst

2020-09-27 11:59:03 68

原创 LeetCode第206场周赛(2020/09/13)

1. 二进制矩阵中的特殊位置代码class Solution {public: int numSpecial(vector<vector<int>>& mat) { int N = mat.size(); int M = mat[0].size(); vector<int> sumi(N); vector<int> sumj(M); for(int i=0

2020-09-13 20:49:12 103

原创 LeetCode第205场周赛(2020/09/06)

1. 替换所有的问号代码1class Solution {public: string modifyString(string s) { int N = s.length(); if(s[0]=='?') { for(int p = 'a'; p<='z'; p++) { if(s[1]!=p) {

2020-09-06 23:36:22 79

原创 leetcode 第204场周赛 (2020/08/30)

1.重复至少k次且长度为M的模式class Solution {public: bool containsPattern(vector<int>& arr, int m, int k) { int N = arr.size(); for(int i = 0; i + k * m <= N; i++) { bool flag = true; for(int j = i; j

2020-08-30 21:25:45 79

原创 leetcode 第201场周赛 (2020/08/09)

1. 整理字符串思路代码1暴力class Solution {public: string makeGood(string s) { int N = s.length(); string ans = s; while(1) { N = ans.length(); string tmp = ""; bool flag = false;

2020-08-09 21:20:56 133

原创 leetcode 周赛(2020/08/02)

可以说本次周赛是最近几次最最最简单的了。。。但是依然表现不佳,写的时候甚至感觉手有些生疏了。算法思路都是有的,但是总是没有想得很清晰完善,于是就是“答案错误”。1.统计好三元组暴力代码class Solution {public: int countGoodTriplets(vector<int>& arr, int a, int b, int c) { int N = arr.size(); int ans = 0;

2020-08-02 21:32:14 90

原创 leetcode 周赛 (2020/07/26)

1. 重新排列字符串class Solution {public: string restoreString(string s, vector<int>& indices) { map<int,int> pos; string str; int n = indices.size(); for(int i=0;i<n;i++) { pos[indices[

2020-07-26 12:47:04 87

原创 leetcode 周赛(2020/07/19)

微软专场,较为困难1. 换酒问题class Solution {public: int numWaterBottles(int numBottles, int numExchange) { int remains = numBottles; int ans = remains; while(remains>=numExchange) { //ans += remains; i

2020-07-26 12:34:58 104

原创 二叉树遍历栈实现

中序遍历/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<int> inorderT

2020-07-18 00:26:25 143

原创 leetcode周赛 (2020/07/05)

1. 判断能否形成等差数列class Solution {public: bool canMakeArithmeticProgression(vector<int>& arr) { if(arr.size()<=1) return true; sort(arr.begin(),arr.end()); int diff = arr[1] - arr[0]; for(int i=1;i

2020-07-16 23:52:31 68

原创 leetcode周赛 (2020/07/12)

1. 好数对的数目思路直接暴力代码class Solution {public: int numIdenticalPairs(vector<int>& nums) { int N = nums.size(); if(N<1) return 0; int ans = 0; for(int i=0;i<N;i++) { for(int

2020-07-12 14:21:00 98

原创 leetcode周赛 (2020/06/28)

5448.判断路径是否相交集合查找class Solution {public: bool isPathCrossing(string path) { set<pair<int,int>> s; int curx = 0; int cury = 0; s.insert(make_pair(curx,cury)); for(int i=0;i<path.length();i++)

2020-06-28 15:39:37 112

原创 leetcode周赛 (2020/06/21)

一直忘了更新周赛挺难先更钱两题1. 数组异或操作class Solution {public: int xorOperation(int n, int start) { int ans = 0; for(int i=0;i<n;i++) { ans ^= start+2*i; } return ans; }};2. 保证文件名唯一class Solution {

2020-06-23 16:15:57 117

原创 leetcode周赛 (2020/06/15)

1. 一位数组的动态和class Solution {public: vector<int> runningSum(vector<int>& nums) { vector<int> sum; int N = nums.size(); sum.resize(N); sum[0] = nums[0]; for(int i=1;i<N;i++) {

2020-06-15 01:11:47 136

原创 leetcode每日一题 87.扰乱字符串(递归、动态规划)

题目链接递归自顶向下的思路class Solution {public: bool judge(string s1, string s2) { if(s1==s2) return true; int N = s1.length(); string t1 = s1; string t2 = s2; sort(t1.begin(),t1.end()); sort(t2.

2020-06-10 10:56:33 169 2

原创 leetcode每日一题 面试题46. 把数字翻译成字符串 (动态规划)

很简单的一个动态规划class Solution {public: int translateNum(int num) { stringstream ss; ss<<num; string s = ss.str(); int N = s.length(); vector<int> dp; dp.resize(N+1); dp[0] = 1; d.

2020-06-09 10:21:35 123

原创 leetcode每日一题 990. 等式方程的可满足性(并查集)

class Solution {public: map<int,int> father; int Find(int x) { int r = x; while(father[r]!=r) r = father[r]; int i = x; int j; while(father[i]!=i) { j = father[i];.

2020-06-08 11:21:20 110

原创 PAT30分题目大集合

PAT又延期了。。现在先每天整理几个题,熟悉结题思路树PAT 1014 Waiting in Line (30分)二叉树题目大总结

2020-06-08 10:04:52 143

原创 PAT1004 Counting Leaves (30分)

思路应该是个很简单的题给一棵树,让输出每层叶子节点的个数。用一个结构体Node存储节点的children,然后从根节点开始遍历,遇到叶子节点,该层叶子节点数+1代码#include <iostream>#include <cstdio>#include <cstring>#include <string>using namespace std;#define MAX 110struct Node{ int num; .

2020-06-08 09:33:40 146

原创 leetcode周赛 2020/06/07

这周周赛发挥不佳1. 重新排列数组class Solution {public: vector<int> shuffle(vector<int>& nums, int n) { vector<int> ans; for(int i=0;i<n;i++) { ans.push_back(nums[i]); ans.push_back(nums[i+n]

2020-06-07 13:03:21 115

原创 leetcode每日一题 128.最长连续序列(并查集)

并查集思路并查集,遍历数组,如果该数字+1在数组中则将它们合并。代码class Solution { unordered_map<int,int> father,cnt; int Find(int x) { int r = x; while(r!=father[r]) { r = father[r]; } int i = x; int j; .

2020-06-06 12:18:00 128

原创 leetcode每日一题 面试题29. 顺时针打印矩阵

class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<int> ans; int N = matrix.size(); if(N==0) return ans; int M = matrix[0].size(); int .

2020-06-05 18:12:44 99

原创 PAT 1150 Travelling Salesman Problem (25分)

题目链接#include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <set>#define INF 0x3f3f3f3f#define MAX 210using namespace std;int graph[MAX][MAX];int N,M;int main(){ scanf("%d%d",&N,&am

2020-06-05 17:28:44 83

原创 leetcode周赛 (2020/05/31)

复习期末了,这周周赛水一水1. 数组中两元素的最大乘积代码class Solution {public: int maxProduct(vector<int>& nums) { int N = nums.size(); sort(nums.begin(),nums.end()); return (nums[N-1]-1)*(nums[N-2]-1); }};2. 切割后面积最大的蛋糕代码const in

2020-05-31 13:39:33 159

Stack Overflow小数据集

Stack Overflow小数据集(含问题和标签,训练集10万条,验证集3万条,测试集2万条,tsv格式)。

2019-12-11

Computer Networking A Top-Down Approach 6th 计算机网络——自顶向下方法第六版英文原版

Computer Networking A Top-Down Approach 6th 计算机网络——自顶向下方法第六版英文原版(James F. Kurose University of Massachusetts, Amherst Keith W. Ross Polytechnic Institute of NYU)

2019-03-19

C primer plus第6版部分练习题答案

C语言经典书籍 C Primer plus第6版编程练习题的部分答案。

2018-09-04

万花筒小程序

使用图形库ezWin制作一个万花筒小程序,该程序随机生成不同颜色不同大小的万花筒。

2018-09-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除