自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zj

  • 博客(80)
  • 资源 (3)
  • 收藏
  • 关注

原创 LeetCode第 463 题:岛屿的周长(C++)

463. 岛屿的周长 - 力扣(LeetCode)很巧妙的思路:存在一个1就会产生四条边一旦相邻边的数量就会减少2:方格A和方格B相邻,方格A,B需要分别减少一条边class Solution {public: int res = 0; int islandPerimeter(vector<vector<int>>& grid) { int n = grid.size(), m = grid[0].size();

2020-10-30 21:06:27 401

原创 LeetCode第 129 题:求根到叶子节点数字之和(C++)

129. 求根到叶子节点数字之和 - 力扣(LeetCode)dfs遍历就可以了:class Solution {public: int res; void dfs(TreeNode* root, int cur){ if(!root->left && !root->right){ res += cur; return; } if(root->left)

2020-10-29 19:10:18 156

原创 LeetCode第 166 题:分数到小数(C++)

166. 分数到小数 - 力扣(LeetCode)参考;C++:模拟题(简单易懂) - 分数到小数 - 力扣(LeetCode)这种题真的很烦class Solution {public: string fractionToDecimal(int numerator, int denominator) { if(denominator == 0) return ""; if(numerator == 0) return "0"; st

2020-10-29 11:27:19 224

原创 翻转栈中的元素(不使用额外数组或者队列)

如果想要反转栈中的元素,可以使用队列作为辅助数据结构的话,就来回倒腾一下就可以了。但是如果不使用队列应该怎么做呢?今天百度面试就被问到了。。。那必然就是使用递归来操作了,关键是怎么去组织递归呢?下来考虑简单的问题,如何将栈底的元素挪动到栈顶?也就是这样:怎么把0挪动到最上面?我们需要获取0,可是使用一个自下而上的递归把最底下的0传递出来(作为递归返回值):int get(stack<int> &s){ int v = s.top(); s.pop();

2020-10-25 21:15:34 813

原创 LeetCode第 836 题:矩形重叠(C++)

836. 矩形重叠 - 力扣(LeetCode)类似:LeetCode第 223 题:矩形面积(C++)_zj-CSDN博客但是class Solution {public: bool isRectangleOverlap(vector<int>& rec1, vector<int>& rec2) { if(rec1[0] >= rec2[2] || rec1[1] >= rec2[3] || rec1[2] <=

2020-10-24 21:53:00 493

原创 LeetCode第 223 题:矩形面积(C++)

223. 矩形面积 - 力扣(LeetCode)参考:简单的考虑 - 矩形面积 - 力扣(LeetCode)那么重叠的时候,重叠区域的边界:上边界,取两个矩形的上边界的最小值下边界,取两个矩形的下边界的最大值左边界,取两个矩形的左边界的最大值右边界,取两个矩形的右边界的最小值那么重叠区域的面积就容易计算了class Solution {public: int computeArea(int A, int B, int C, int D, int E, int

2020-10-24 21:35:31 400

原创 面试题 05.04. 下一个数

面试题 05.04. 下一个数 - 力扣(LeetCode)转化为bitset,然后再转为string,直接使用函数next_permutation()和prev_permutation(),感觉像是投机取巧。。。

2020-10-22 22:30:49 169

原创 LeetCode第 1299 题:将每个元素替换为右侧最大元素(C++)

1299. 将每个元素替换为右侧最大元素 - 力扣(LeetCode)class Solution {public: vector<int> replaceElements(vector<int>& arr) { int n = arr.size(); vector<int> res(n, -1); for(int i = n-2; i >= 0; --i){ if(arr

2020-10-22 21:39:31 184

原创 LeetCode第 228 题:汇总区间(C++)

228. 汇总区间 - 力扣(LeetCode)遍历就完事了,没啥好说的class Solution {public: vector<string> res; vector<string> summaryRanges(vector<int>& nums) { int l = 0, r = l, n = nums.size(); while(r < n){ while(r <

2020-10-22 20:44:50 189

原创 LeetCode第 162 题:寻找峰值(C++)

162. 寻找峰值 - 力扣(LeetCode)二分法:class Solution {public: //相邻的数只有两种情况: // nums[mid] > nums[mid + 1] 或 nums[mid] < nums[mid + 1] int findPeakElement(vector<int>& nums) { int l = 0, r = nums.size()-1; while(l < r

2020-10-22 19:46:26 391

转载 malloc 底层实现及原理

原文:malloc 底层实现及原理 - 爱笑的张飞 - 博客园文章目录结论具体内容内存分配的原理具体分配过程情况一:malloc 小于 128K 的内存,使用 brk 分配情况二:malloc 大于 128K 的内存,使用 mmap 分配(munmap 释放)摘要:偶尔看到面试题会问到 malloc 的底层原理,今天就来记录一下,毕竟学习要“知其所以然”,这样才会胸有成竹。注:下面分析均是基于 linux 环境下的 malloc 实现。步骤是:先总结结论,再逐步展开结论1)当开辟的空间小于 12

2020-10-22 11:24:08 1661

原创 找出数组中每个数右边第一个比它大的元素

题目:给定一个整型数组,数组元素随机无序的,要求打印出所有元素右边第一个大于该元素的值。如果不存在,对应值设为-1即可。如数组A=[1,5,3,6,4,8,9,10] 输出[5, 6, 6, 8, 8, 9, 10, -1]如数组A=[8, 2, 5, 4, 3, 9, 7, 2, 5] 输出[9, 5, 9, 9, 9, -1, -1, 5, -1]首先暴力法就不用说了,两层遍历就可以。不过这种题目是典型的单调栈的思路,可以一次遍历就得出所有结果。用栈来保存未找到右边第一个比它大的元素的索引(很

2020-10-21 21:22:35 991

原创 LeetCode第 414 题:第三大的数(C++)

414. 第三大的数 - 力扣(LeetCode)典型的topk,优先级队列,不过这儿需要处理重复元素,可以使用哈希表自动去重class Solution {public: int thirdMax(vector<int>& nums) { unordered_set<int> s(nums.begin(), nums.end()); int n = s.size(); if(n < 3) return

2020-10-20 23:48:11 352

原创 LeetCode第 445 题:两数相加 II(C++)

445. 两数相加 II - 力扣(LeetCode)这儿的顺序与正常的相加不一样,使用栈倒腾一下就可以了。class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { stack<int> s1, s2; while(l1){ s1.push(l1->val); l1 = l1->next;

2020-10-20 21:25:01 204

原创 LeetCode第 41 题:缺失的第一个正数(C++)

41. 缺失的第一个正数 - 力扣(LeetCode)要找的是第一个正数。使用换座位的思路,把每个正数放在它应该在的位置上去(1放在第一位,2放在第二位。。。)class Solution {public: int firstMissingPositive(vector<int>& nums) { int n = nums.size(); for(int i = 0; i < n; ++i){ while(nu

2020-10-20 20:45:40 350

原创 C++ 的placement new和placement delete

参考:placement new和placement delete_hujing_Liu-CSDN博客《effctive C++》p256通常的C++程序中,new和delete表达式总是成对出现,并且分别调用了全局的operator new和operator delete,这两个全局操作符(或者直接理解为全局的函数)的基本形式如下:void * operator new ( std::size_t) throw ( std::bad_alloc );void operator delete (

2020-10-20 16:08:56 1511

原创 LeetCode第 165 题:比较版本号(C++)

165. 比较版本号 - 力扣(LeetCode)需要按照 .进行分割,c++里面分割最方便的就是使用stringstream了,可以首先将两个字符串的.的数量增加到一致(补0就可以了):class Solution {public: int compareVersion(string version1, string version2) { int cnt1 = count(version1.begin(), version1.end(), '.'); in

2020-10-20 14:52:23 450

原创 LeetCode第 328 题:奇偶链表(C++)

328. 奇偶链表 - 力扣(LeetCode)class Solution {public: ListNode* oddEvenList(ListNode* head) { if(!head || !head->next) return head; auto p1 = head, p2 = head->next, p3 =head->next; while(p1->next && p2->nex

2020-10-20 10:09:57 163

原创 调整数组顺序使奇数位于偶数前面

调整数组顺序使奇数位于偶数前面__牛客网输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。如果不要求常熟空间复杂度的话,实用辅助数组很简单。要求空间复杂度的话,使用插入排序的思路,每当碰到偶数,就寻找这个偶数之后的第一个奇数,将区间内的元素全部右移一位,最后将奇数插入到原偶数的位置。class Solution {public: void reOrderArray(vect

2020-10-20 00:06:23 118

原创 100个人,现在要两两配对成为50只队伍,如何保证公平?

公平的意思应该就是任何两个人被分到一起的概率都是一样的。那这个概率是多少呢?可以看;一千人两两分组,特定两人分到同一组的概率该如何计算? - 知乎概率应该是1/99。糖果分组的思路:提前统计总人数和要分成的组数,准备相应的糖果。糖果的总数和总人数相同,糖果的口味或种类需要和组数相匹配。比如100人要分成5组,则准备100颗糖果,包含5种口味或种类,每种糖果各20个。所以这儿保证公平的话,就是50种糖,每种两颗。那么定义一个数组大小为100,元素为1,1,2,2,3,3…49,49,50,50。

2020-10-19 22:25:55 1272

转载 定时器的设计的几种思路

原文:高效定时器的设计_青萍之末的博客-CSDN博客文章目录一、timerfd二、定时器的概念三、排序链表四、最小堆(优先队列)五、时间轮(环形队列+双向链表)五、红黑树(std::set自动排序)一、timerfd调用timerfd_create()创建一个时间文件描述符即把时间变为文件描述符,定时器超时则文件描述符会变得可读,这样可以和epoll结合起来,统一处理I/O事件和超时事件。可以把timerfd和时间戳一起作为key,避免两个定时器相同的情况。二、定时器的概念网络编程

2020-10-19 20:30:09 2693

转载 C++智能指针简单实现

参考:C++ 引用计数技术及智能指针的简单实现 - melonstreet - 博客园c++ primer 5th 12.1文章目录智能指针是什么普通指针存在的问题什么是引用计数?智能指针实现基础对象类辅助类为基础对象类实现智能指针类智能指针类的使用与测试智能指针类的改进一智能指针改进二智能指针是什么简单来说,智能指针是一个管理内存的类,它对普通指针进行封装,使智能指针类对象具有普通指针类型一样的操作。具体而言,拷贝对象时,副本和原对象都指向同一存储区域,如果通过一个副本改变其所指的值,则通过另一

2020-10-19 19:31:52 1125

原创 c++类型转换

参考:C++类型转换 - kaizen - 博客园C++类型转换 - 好吧,就是菜菜 - 博客园文章目录隐式类型转换内置类型自定义类型其他隐式转换显式转换static_castconst_castdynamic_castreinterpret_cast隐式类型转换指不需要用户干预,编译器默认进行的类型转换行为。隐式类型转换一般分为两种:内置数据类型和自定义数据类型。内置类型例1、不同类型的算术运算int ival = 3.541 + 3;加法的运算对象是double+int,所以首先会将

2020-10-19 15:52:59 277

原创 LeetCode第 227 题:基本计算器 II(C++)

227. 基本计算器 II - 力扣(LeetCode)类似;面试题 16.26. 计算器_zj-CSDN博客class Solution {public: int calculate(string s) { stack<int> stk; int res = 0, cur = 0, n = s.size(); char c = '+';//记录上一次的符号 for(int i = 0; i <= n; ++i

2020-10-18 20:06:34 365

原创 面试题 16.26. 计算器

面试题 16.26. 计算器 - 力扣(LeetCode)类似LeetCode第 224 题:基本计算器(C++)_zj-CSDN博客但是此题没有括号,有乘除法。一般都是使用栈,延迟计算,如果是加减就入栈(减号变为负数),乘除就出栈计算之后再入栈,最后全部只剩下加法,出栈一直累加即可。因为碰到乘除的时候,还需要后面的数字才能进行计算,所以延迟计算才是重点。例如碰到*的时候,乘号的左操作数在栈顶,右操作数是当前cur的值。class Solution {public: int calcul

2020-10-18 20:02:51 330

原创 c++嵌套类和局部类

C++ 中的嵌套类和局部类_Ivan 的专栏-CSDN博客C++嵌套类的使用及对外部类的访问权限_多学多思-CSDN博客C++嵌套类(内部类与外部类) - 永不停息; - 博客园C++嵌套类及对外围类成员变量的访问 - 菜丝inside - 博客园...

2020-10-18 15:47:25 215

原创 LeetCode第 124 题:二叉树中的最大路径和(C++)

124. 二叉树中的最大路径和 - 力扣(LeetCode)注意数字可能为负值,而且不一定经过根节点,只要是相连的一条路径都可以,所以每个节点处都需要进行更新。和这题是类似的:LeetCode第 543 题:二叉树的直径(C++)_zj-CSDN博客对于某个根节点:搭配可以是:根,根+左,根+右,根+左+右。而该根节点返回回溯给上层父节点的值有两种选择:根,根+max(左,右)。class Solution {public: int res = INT_MIN; int maxP

2020-10-17 22:27:24 386

原创 LeetCode第 543 题:二叉树的直径(C++)

543. 二叉树的直径 - 力扣(LeetCode)求的是直径,这个直径的描述还是有点不好明白的:任意两个结点路径长度中的最大值。需要注意:直径不一定会过根节点,所以每个节点都有可能是直径的“支点”,计算的时候就需要不停的更新。class Solution {public: int res = 0; int diameterOfBinaryTree(TreeNode* root) { if(!root) return 0; dfs(root);

2020-10-17 21:52:52 409

原创 LeetCode第 32 题:最长有效括号(C++)

32. 最长有效括号 - 力扣(LeetCode)如果感觉不好理解的话,就用消消乐的思路去思考就知道怎么做了。栈处理栈是括号匹配常用的辅助结构了。维护一个标志位数组,记录不能匹配的括号的下标。一次遍历:如果是左括号:入栈如果是右括号:栈空的话说明该右括号无法匹配,标志位置位;栈非空的话直接出栈即可最后的标志位数组就是一串0/1的数组,只需要遍历记录最长的连续1的个数就可以了。class Solution {public: int flags[20000]; int l

2020-10-17 16:52:01 424

原创 LeetCode第 895 题:最大频率栈(C++)

895. 最大频率栈 - 力扣(LeetCode)需要考虑频率,那么可以把频率相同的数字存储在同一个数组(栈)里面;pop的时候,会优先pop频率最高的数字,那么可以使用哈希表记录每个数字的频率,形成<数字,频率>键值对;还需要一个变量,记录最大频率。push:首先是哈希表里面该数字对应的频率+1,然后该数字的频率变化了之后,需要考虑更新什么东西呢?最大频率更新该数字应当进入另一个栈(频率为之前的频率+1对应的那个栈)问题来了,需要将这个数字从它之前呆的栈里面删除吗?比如之

2020-10-16 22:26:06 442

原创 LeetCode第 718 题:最长重复子数组(C++)

718. 最长重复子数组 - 力扣(LeetCode)简单dp就行了:class Solution {public: int dp[1010][1010]; int findLength(vector<int>& A, vector<int>& B) { int m = A.size(), n = B.size(), res = 0; if(m == 0 || n == 0) return res;

2020-10-16 18:38:36 277

原创 LeetCode第 443 题:压缩字符串(C++)

443. 压缩字符串 - 力扣(LeetCode)从左到右进行读取。当读到最后一个字符,或者下一个下一个字符与当前不同时,则到达连续区块的结尾。当我们到达连续区块的结尾时,就从写入压缩的结果,过程总需要记录字符与个数。class Solution {public: int compress(vector<char>& chars) { int n = chars.size(), len = 0; for(int i = 0, cnt =

2020-10-15 22:00:07 466

原创 LeetCode第 31 题:下一个排列(C++)

31. 下一个排列 - 力扣(LeetCode)下一个排列 - 下一个排列 - 力扣(LeetCode)class Solution {public: void nextPermutation(vector<int>& nums) { int i = nums.size()-1; while(i > 0 && nums[i-1] >= nums[i]) --i;//从右到左寻找不满足大小关系的第一对数字

2020-10-15 21:27:35 368

原创 LeetCode第 47 题:全排列II(C++)

47. 全排列 II - 力扣(LeetCode)类似;LeetCode第 46 题:全排列(C++)_zj-CSDN博客只不过多了一个去重class Solution {public: vector<vector<int>> res; vector<int> flags;//标志位 vector<int> tmp; int n; void dfs(vector<int> &nums){

2020-10-15 21:10:09 214

原创 LeetCode第 46 题:全排列(C++)

46. 全排列 - 力扣(LeetCode)排列是顺序相关的。dfs直接枚举应该就可以了:class Solution {public: vector<vector<int>> res; vector<int> flags;//标志位 vector<int> tmp; int n; void dfs(vector<int> &nums){ if(tmp.size() == n

2020-10-15 21:00:17 330

原创 LeetCode第 516 题:最长回文子序列(C++)

516. 最长回文子序列 - 力扣(LeetCode)不像第五题:LeetCode第 5 题:最长回文子串(C++)_zj-CSDN博客这儿的回文子序列是不需要连续的。这题其实是dp的思路去做,不过这一题的dp有点特殊参考这儿的图;子序列问题通用思路|最长回文子序列 - 最长回文子序列 - 力扣(LeetCode)if (s[i] == s[j]) // 它俩一定在最长回文子序列中 dp[i][j] = dp[i + 1][j - 1] + 2;else // s[

2020-10-15 20:45:15 522

原创 LeetCode 第 82 题:删除排序链表中的重复元素 II(C++)

82. 删除排序链表中的重复元素 II - 力扣(LeetCode)使用哨兵节点简化处理:class Solution {public: ListNode* deleteDuplicates(ListNode* head) { if(!head) return head; auto dummy = new ListNode(-1); dummy->next = head; auto p = dummy, cur = h

2020-10-15 20:00:48 215

原创 LeetCode 第 958 题:二叉树的完全性检验(C++)

958. 二叉树的完全性检验 - 力扣(LeetCode)层次遍历的思路:class Solution {public: bool isCompleteTree(TreeNode* root) { if(!root) return true; queue<TreeNode*> q; q.push(root); while(q.front()){//遇到第一个空节点就停止遍历 auto cu

2020-10-15 19:17:24 235

原创 LeetCode 第 222 题:完全二叉树的节点个数(C++)

222. 完全二叉树的节点个数 - 力扣(LeetCode)层次遍历:class Solution {public: int countNodes(TreeNode* root) { if(!root) return 0; queue<TreeNode*> q; q.push(root); int res = 0, cnt = 1; while(!q.empty()){ i

2020-10-15 18:45:56 260

转载 从4行代码看右值引用(转)

原文:从4行代码看右值引用 - qicosmos(江南) - 博客园从4行代码看右值引用概述右值引用的概念有些读者可能会感到陌生,其实他和C++98/03中的左值引用有些类似,例如,c++98/03中的左值引用是这样的:int i = 0;int& j = i;这里的int&是对左值进行绑定(但是int&却不能绑定右值),相应的,对右值进行绑定的引用就是右值引用,他的语法是这样的A&&,通过双引号来表示绑定类型为A的右值。通过&&我们就

2020-10-15 14:18:49 99

beatMouse.zip

QT编写的一个打地鼠小游戏,注释应该比较齐全,但是也有一点乱,是比者一个b站上面的教程写的,不过现在已经找不到了。。。

2019-08-09

立体匹配图片集(数量不多)

立体匹配图片集共21对,毕业设计(水)或者实验的时候做立体匹配的时候可以用到,希望可以帮到有需要的人。

2018-04-20

(可直接运行)国外的seam carving matlab源码(包含gui)

在matlab里面直接运行seamCarving_GUI.m就行,browse可以输入源图片,运行结果可以直接保存。

2018-04-19

空空如也

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

TA关注的人

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