自定义博客皮肤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

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

原创 LeetCode第 49 题:字母异位词分组(C++)

49. 字母异位词分组 - 力扣(LeetCode)核心问题在于如何(快速)判断字母异位词,很容易想到字符串匹配里面的RK算法,其实就是一种编码方式。最简单的可以将每个单词的每个字母的ascii码加起来,因为字母异位词加起来得到的和必然是相同的,但是单词太多就可能冲突:不是字母异位词加起来也可能相同,既然加不行,可以乘啊,而且不一定非要用一个整数来编码,用字符串也可以,排序就是字符串的思路。排序class Solution {public: vector<vector<stri

2020-12-14 16:39:02 1002 1

原创 LeetCode第 842 题:将数组拆分成斐波那契序列(C++)

842. 将数组拆分成斐波那契序列 - 力扣(LeetCode)标准的枚举题型了,由于存在不能拆分的情况,所以应该使用带返回值的回溯,需要枚举前两个数字,然后根据前两个数字依次检查后面是否存在合法的序列,如果有,则返回true,否则返回false。class Solution {public: vector<int> res; bool dfs(string &s, int idx){//idx表示当前下标 if(idx == s.size())

2020-12-11 20:20:21 537

原创 LeetCode第 861 题:翻转矩阵后的得分(C++)

861. 翻转矩阵后的得分 - 力扣(LeetCode)可以进行的操作是行变换或列变换,最终的目的是要使得最后的数字和最大。行变换只会影响一个数字(该行的数字)。由于矩阵的 0/1 呈现的是二进制格式(数字是按照行计算的),所以位1越靠右数字就会越大。不难得出,第一位不是1的数字(示例中最大为0111 = 7)肯定小于第一位是1的数字(示例中最小为1000 = 8 > 7),所以如果某一行的第一位不是1,那为达目的就需要进行行变换。相反地,如果第一位已经是1了,那就不能进行行变换了。进行完上面

2020-12-08 20:08:04 533

原创 面试题 01.07. 旋转矩阵

面试题 01.07. 旋转矩阵 - 力扣(LeetCode)一样的:LeetCode第 48 题:旋转图像(C++)_zj-CSDN博客class Solution {public: void rotate(vector<vector<int>>& matrix) { int m = matrix.size(); for(int i = 0; i < m; ++i){//转置,沿左上-右下对角线 f

2020-11-25 21:27:17 198

原创 LeetCode第 1370 题:上下升降字符串(C++)

1370. 上升下降字符串 - 力扣(LeetCode)题目有点难读懂,大体意思就是先升序再降序来回走,可以使用桶排序的思路:把不同的字母放在不同的桶里面,相同的字母放在同一个桶里面。假设桶为a--z,先从a桶出发,如果桶里面有元素,就取出一个(追加到res),一直走到z桶,此时又从z桶出发,向a桶的方向走,如此来回反复即可。class Solution {public: int count[26]; string sortString(string s) { for

2020-11-25 21:09:30 250

原创 面试题 01.06. 字符串压缩

面试题 01.06. 字符串压缩 - 力扣(LeetCode)相似题:LeetCode第 443 题:压缩字符串(C++)_zj-CSDN博客class Solution {public: string compressString(string S) { string res; int cnt = 1, n = S.size(); for(int i = 0; i < n; ++i){ if(i == n-1 |

2020-11-24 19:07:23 216

原创 面试题 01.05. 一次编辑

面试题 01.05. 一次编辑 - 力扣(LeetCode)LeetCode第 72 题:编辑距离(C++)_zj-CSDN博客的简单版本,照抄即可:class Solution {public: bool oneEditAway(string first, string second) { int m = first.size(), n = second.size(); if(abs(m-n) > 1) return false;

2020-11-18 22:17:15 210

原创 面试题 01.04. 回文排列

面试题 01.04. 回文排列 - 力扣(LeetCode)如果是某个回文串的排列之一,那么:所有字母个数均为偶数或者仅有一个字母个数为奇数(放在回文序列中间)。class Solution {public: bool canPermutePalindrome(string s) { int count[128] = {0}; for(const auto &c : s){//加1减1,不用累加数量 if(count[c] ==

2020-11-18 21:00:17 209

原创 面试题 01.03. URL化

面试题 01.03. URL化 - 力扣(LeetCode)开一个res,一遍遍历一遍存储结果:class Solution {public: string replaceSpaces(string S, int length) { string res; for(int i = 0; i < length; ++i){ if(isspace(S[i])) res += "%20"; else res

2020-11-18 20:34:02 177

原创 面试题 01.02. 判定是否互为字符重排

面试题 01.02. 判定是否互为字符重排 - 力扣(LeetCode)简单的哈希表思路,遍历计数即可:class Solution {public: bool CheckPermutation(string s1, string s2) { if(s1.size() != s2.size()) return false; int count[26] = {0}; for(int i = 0; i < s1.size(); ++i){

2020-11-18 19:09:30 156

原创 面试题 01.01. 判定字符是否唯一

面试题 01.01. 判定字符是否唯一 - 力扣(LeetCode)使用哈希表就会很简单,时空复杂度都是o(n)class Solution {public: bool isUnique(string astr) { bool flag[128] = {false}; for(const auto &c : astr){ if(!flag[c]) flag[c] = true; else retur

2020-11-18 18:36:51 157

原创 LeetCode第 1030 题:距离顺序排列矩阵单元格(C++)

1030. 距离顺序排列矩阵单元格 - 力扣(LeetCode)其实就是定义一个排序规则的问题使用优先级队列class Solution {public: vector<vector<int>> allCellsDistOrder(int R, int C, int r0, int c0) { vector<vector<int>> res; //https://blog.csdn.net/qq_3252371

2020-11-17 11:21:41 164

原创 LeetCode第 406 题:根据身高重建队列(C++)

406. 根据身高重建队列 - 力扣(LeetCode)看标签是贪心算法的思路,可是为啥贪心就合理呢?虽然是中等难度,可是想好久没想出为啥…首先是先排序,按照第一个元素逆序,第二个元素正序,那么每一个元素之前的元素的个数,就是大于等于它的元素数量。个头高的人会忽略个头比它矮的人,只会在意个头大于等于它的人。样例:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]排序之后:[[7,0], [7,1], [6,1], [5,0], [5,2], [4,4]]

2020-11-16 22:10:30 713

原创 LeetCode第 514 题:自由之路(C++)

514. 自由之路 - 力扣(LeetCode)一开始感觉是要用贪心,后来发现贪心是错的。还是dp吧,详解可以看官方题解:自由之路 - 自由之路 - 力扣(LeetCode),还是比较好理解的。class Solution {public: int dp[110][110];//从前往后拼出key的第i个字符,ring 的第j个字符与12:00方向对齐的最少步数 int findRotateSteps(string ring, string key) { int m

2020-11-13 15:20:08 207

原创 LeetCode第 973 题:最接近原点的 K 个点(C++)

973. 最接近原点的 K 个点 - 力扣(LeetCode)topK问题,优先级队列的典型应用:class Solution {public: struct cmp{ bool operator()(const pair<int, int> &a, const pair<int, int> &b){ return a.first*a.first + a.second*a.second < b.first*

2020-11-09 11:32:56 262

原创 LeetCode第 1356 题:根据数字二进制下 1 的数目排序(C++)

1356. 根据数字二进制下 1 的数目排序 - 力扣(LeetCode)简单题,自己设计一个排序规则就可以了,可以使用bitset简化操作:class Solution {public: struct cmp{ bool operator()(int a, int b){ if(bitset<14>(a).count() == bitset<32>(b).count()) return a < b;//最大10^4

2020-11-06 15:33:16 267

原创 c++ setw(int n)函数

setw - C++ Reference头文件:#include <iomanip>函数原型:setw (int n);用于输出流中进行字段宽度设置,n表示字段宽度。具有以下几个特点:Sets the number of characters to be used as the field width for the next insertion operation.意思就是只对紧挨着的下一次输出有效右对齐:输出字段宽度小于 n 时,字段前面用空格补齐输出字段宽度大于 n

2020-11-05 19:51:38 695

原创 LeetCode第 45 题:跳跃游戏 (C++)

45. 跳跃游戏 II - 力扣(LeetCode)贪心算法的思路:注意数值代表的是可以跳跃的最大长度,也就是说是最多可以跳这么远,但是不跳这么远也行。看示例:[2,3,1,1,4]i= 0,第一次站在数字2的位置,最多可以跳两个,也就是活可以跳到3(下标1)的位置,也可以跳到1(下标2)的位置。那跳到哪个位置好呢?首先肯定会向哪儿的数值越大就跳到哪儿,但是这样不是很对,虽然这儿确实是跳到3的地方好。因为,3的位置相对与1的位置来说,3靠前一个身位,假设我跳到3,后续从3往后跳的时候,还是会经过

2020-11-03 22:10:44 683

原创 LeetCode第 44 题:通配符匹配 (C++)

44. 通配符匹配 - 力扣(LeetCode)相似的题目:LeetCode第 10 题:正则表达式匹配 (C++)_zj-CSDN博客dp思路都是一样的:class Solution {public: bool isMatch(string s, string p) { int m = s.size(), n = p.size(); vector<vector<int>> dp(m+1, vector<int>(n+1,

2020-11-03 20:58:30 285

原创 LeetCode第 941 题:有效的山脉数组(C++)

941. 有效的山脉数组 - 力扣(LeetCode)简单题,就直接遍历就可以了,方法也有很多种class Solution {public: bool validMountainArray(vector<int>& A) { int n = A.size(); if(n < 3) return false; int i = 0; while(i < n-1 && A[i]

2020-11-03 14:52:24 244

原创 LeetCode第 37 题:解数独(C++)

37. 解数独 - 力扣(LeetCode)相当于进阶:LeetCode第 36 题:有效的数独(C++)_zj-CSDN博客dfs枚举:class Solution {public: int row[9][9], col[9][9], block[9][9]; void solveSudoku(vector<vector<char>>& board) { for(int i = 0; i < 9; ++i){

2020-11-02 22:02:32 538

原创 LeetCode第 36 题:有效的数独(C++)

36. 有效的数独 - 力扣(LeetCode)关于行和列,使用哈希表记录就可以了。3x3的方格也是使用哈希表映射,但是怎样映射可以将一个块内的元素都映射到正确的位置呢?需要对横纵坐标进行一下变换。假设使用block[9][9]用来映射块,每一行代表一个3*3的方块,列下标对应数字,那么block[3][4] = true代表第四个方块中已经存在5(4+1)这个数字:上图中每一个方块映射到block数组中,对应的横坐标为:i/3 * 3 + j/3,i是行标,j是列标。行标决定一组block的起始

2020-11-02 16:55:26 370

原创 LeetCode第 29 题:两数相除(C++)

29. 两数相除 - 力扣(LeetCode)要求不使用乘法、除法和 mod 运算符,但是乘法、除法、mod都是可以使用加减进行模拟的,假设输入分别为15、3,res表示结果:15 > 3: res置为1(代表结果至少为1),3 += 3(翻倍)得到615 > 6: 比翻倍之后的数还要大,res置为2(1 += 1),6 += 6得到1215 > 12: res置为4,12 += 12得到2415 < 24,循环终止,此时的res为4,代表15里面至少有4个3,但是还没

2020-11-02 11:29:18 429 1

原创 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 352

原创 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 112

原创 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 176

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

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

2020-10-25 21:15:34 621

原创 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 443

原创 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 349

原创 面试题 05.04. 下一个数

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

2020-10-22 22:30:49 133

原创 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 146

原创 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 145

原创 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 339

转载 malloc 底层实现及原理

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

2020-10-22 11:24:08 1531

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

题目:给定一个整型数组,数组元素随机无序的,要求打印出所有元素右边第一个大于该元素的值。如果不存在,对应值设为-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 921

原创 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 293

原创 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 156

原创 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 247

原创 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 1354

原创 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 407

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关注的人

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