自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 刷题笔记-字典树相关

字典树的题目实际上也是有章可循的。字典树是一种多叉树,用字典树记录单词比用哈希表节省空间,并且避免了字典集过大造成的哈希冲突。建立字典树的主要思想是建立多叉树的节点,每个节点代表单词的一个字母。每一个节点内应该存放一个数组,表示下一个可能字母的地址(也就是各个子树根节点的地址)和一个标志是否到达单词尾部的bool值。这个数组大小一般为26,下标为 i 的元素即表示下一个字母 'a'+i 存放的位置。

2020-08-28 17:04:11 171

原创 刷题笔记-拓扑排序

文章目录1. 课程表2. 课程表II3. 项目管理1. 课程表你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]。给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?分析:如果用有向无环图表示课程的先修关系,可以将课程 0 指向课程 1,意为完成课程 0 的前提是完成课程 1。使用 dfs 解题。首先将课程的先修关系整理好,即

2020-08-06 23:35:23 353

原创 刷题笔记-2020.08.05

1. 孩子们的游戏(圆圈中剩下的数)每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!)。请

2020-08-06 15:55:59 196

原创 刷题笔记-2020.08.06

1. 字符流中第一个不重复的字符请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。如果当前字符流没有存在出现一次的字符,返回#字符。分析:使用unordered_map(底层实现是hash,查找效率 O(1))和队列(之前已经进入队列的字符就不必再进入队列了)。class Solution{public: //Insert one c

2020-08-06 15:51:15 101

原创 刷题笔记-位运算相关

文章目录1.不用加减乘除做加法1.不用加减乘除做加法写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。分析:两个整数分别为 num1 和 num2。用num1^num2可以和对应位的结果 res,但这个结果没包括进位 carry,用num1&num2可以得到进位,进位对应的数值为(num1&num2)<<1。将进位与结果相加,直到进位不为 0。附带牛客上的经典讲解https://blog.nowcoder.net/n/07f2bd03162d

2020-07-08 22:37:53 141

原创 刷题笔记-翻转单词顺序列

题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?解题思路要求把句子的单词反转,可以用栈先进后出的特性存放单词和空格。具体操作在代码中解释。同理还可以用实现class Soluti

2020-07-07 15:00:15 155

原创 刷题笔记-合并K个排序链表

题目描述https://leetcode-cn.com/problems/merge-k-sorted-lists/解题思路类似于外部排序。外部排序主要针对于内存大小小于数据量的情况,整体采用归并排序,在内存中采用堆排序增加每个数据链的长度,从而减少归并排序次数。利用这个思想,我们依次读入排序链表的首结点,利用他们构成一个小顶堆。然后取出最小的数,放入结果链表的尾部,再从最小数的源链表中取出下一个值加入小顶堆中。小顶堆在 stl 中用优先队列实现功能,优先队列的底层数据结构默认是 vector。基本

2020-06-17 23:15:59 139

原创 刷题笔记-2020.06.09

1. 二叉树的深度输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。分析:递归判断。也可以用队列实现,开始遍历树的第 n 层时,队列中应该只有第 n 层各结点的指针,依次取出这些结点,再把他们的子节点放进去,直到队列为空(也就是第 m 层没有一个结点有子节点)。class Solution {public: int TreeDepth(TreeNode* pRoot) { if(!pRoot) re

2020-06-09 12:45:01 109

原创 刷题笔记-2020.06.08

1. 两个链表的第一个公共结点输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)分析:借鉴牛客官方解法的思路,将每个链表接在对方链表的前面,利用双指针在两个链表上同步移动。如果两链表本身长度不相等,两指针就需要跨越空指针 nullptr 才能同时指向公共结点。需要注意的是,如果两链表本身相等,两指针就一定不会遍历到空指针处。class Solution {public: ListNode* FindFirstCo

2020-06-08 23:52:06 114

原创 刷题笔记-2020.06.06

1. 把数组排成最小的数输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。  分析:之前做过这道题,这次做的第一个想法和之前一样,首先要将数字转成字符串,然后比较字符串的大小,而且比较的结果应该是“321”<“32” && "32"<"3",或许我们可以这样考虑“32”==“322” && "3"=="33"。所以需要这样判断,当比较

2020-06-06 21:30:37 143

原创 刷题笔记-2020.06.05

1. 数组中出现次数超过一半的数字数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。分析:第一个想法是先对数组排序,如果某数字出现次数超过一半,那么排序后数组第 size/2 位置的数一定是它;但如果不存在出现次数超过一半的数,那么第 size/2 位置的数就不应该被输出。因此我们再次遍历数组计数该数字出现的次数,以排除符合条件的数并不存在的情况

2020-06-05 22:39:36 116

原创 刷题笔记-字符串的排列

题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。字符串长度不超过9(可能有字符重复),字符只包括大小写字母。解题思路很典型的 DFS+回溯 问题。可以用 map 记录各个字符出现的次数,每次递归从 map 中取出一个未被用尽的字符构建新字符串。注意回溯时要恢复 map 中字符的个数和字符串状态。牛客官方解法提供了另外一种思路,它不断调换给定字符串的字符顺序,采用 swa

2020-06-05 11:54:54 120

原创 刷题笔记-栈相关

1. 包含min函数的栈定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。class Solution {public: stack<int> sta, minvalue; void push(int value) { sta.push(value); if(minvalue.empty()) minv

2020-06-03 22:11:54 98

原创 刷题笔记-顺时针打印矩阵

题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如,如果输入如下4 X 4矩阵:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16,则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。解题思路好像没什么巧妙的办法,一圈圈打印就好了。另外,注意边界,如果左边界与右边界一致了,那么打印完最后一列就可以退出循环了。设上下左右 4 个边界为 tw、bw、lw、rw。实现class Solution {public

2020-06-03 18:52:30 103

原创 刷题笔记-树相关

1. 树的子结构输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)。分析:这道题最麻烦的地方在于,空树不是任何树的子结构,但非空树的子树为空不影响该树成为其他树的子结构。因此在写代码时必须分别处理这两种情况。class Solution {public: bool HasSubtreeHelper(TreeNode* pRoot1, TreeNode* pRoot2) { if(!pRoot2) return true;//树B

2020-06-03 18:26:20 181

原创 刷题笔记-链表相关

1. 反转链表输入一个链表,反转链表后,输出新链表的表头。  分析:初始时,将 preN 指向 nullptr,curN 指向链表首部,提前记录好链表的下一个节点。为了反转链表,要将 curN 的 next 指针指向 preN。class Solution {public: ListNode* ReverseList(ListNode* pHead) { ListNode* preN = nullptr, *curN = nullptr; while(pHea

2020-06-03 00:05:32 120

原创 刷题笔记-调整数组顺序使奇数位于偶数之前(剑指offer.13)

题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解题思路快速排序算法可以用来交换奇数和偶数的位置,但它不能保证相对位置不变,因此快速排序方案是不可行的。第一种思路是使用临时 vector 分别记录奇数和偶数,最后把两个临时 vector 聚合成一个,最后交换聚合的 vector 和原 vector。第二种思路是借助双指针,第一个指针指向当前 vector 的第一个偶数,第

2020-06-02 14:59:53 153

原创 刷题笔记-万万没想到之聪明的编辑

题目描述我叫王大锤,是一家出版社的编辑。我负责校对投稿来的英文稿件,这份工作非常烦人,因为每天都要去修正无数的拼写错误。但是,优秀的人总能在平凡的工作中发现真理。我发现一个发现拼写错误的捷径:三个同样的字母连在一起,一定是拼写错误,去掉一个的就好啦:比如 helllo -> hello两对一样的字母(AABB型)连在一起,一定是拼写错误,去掉第二对的一个字母就好啦:比如 helloo -> hello上面的规则优先“从左到右”匹配,即如果是AABBCC,虽然AABB和BBCC都是错误拼

2020-05-15 16:41:02 288 2

原创 刷题笔记-24进制加减法函数

题目描述如题解题思路手写加减法最重要的就是捋清进位和借位的逻辑,其实就是模拟算式运算。加法的处理思路是将加数1当前位 + 加数2当前位 + 进位,用得到的数值 mod 进制得到当前位的计算结果,再判断是否有进位。减法的思路是用被减数的当前位 - 借位 - 减数的当前位,如果 (被减数 - 借位) 小于 减数当前位,则产生借位,当前位的计算结果是 借位后的数值 - 减数当前位。在处理减法时,可以选择用大数减小数,得到的结果再取反。下面的程序是基于字符串实现的,取反就是在字符串首部添加 ‘-’。

2020-05-15 16:10:53 826

原创 刷题笔记-活字印刷

题目描述https://leetcode-cn.com/problems/letter-tile-possibilities/解题思路首先要用 map 记录字符串中各大写字母出现的次数。每次从map中取出一个字符个数不为 0 的字符(不同的字符对应着不同的字符串排列可能),取到一个字符后,要将字符个数减 1,进入下一次 DFS 迭代。实现class Solution {public: void dfs(map<char,int>& mp, int& num)

2020-05-09 14:47:31 172

原创 刷题笔记-重建二叉树(剑指offer.4)

题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路所谓前序遍历是指先遍历二叉树的父节点,其次是左子树、右子树。如果左子树不为空,就先遍历左子结点,再遍历左子节点的左子树,再遍历左子节点的右子树...

2020-05-06 21:14:00 103

原创 刷题笔记-从头到尾打印链表(反转链表)(剑指offer.3)

问题描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。注意事项全在注释里了实现/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }...

2020-05-06 10:14:26 94

原创 刷题笔记-二维数组中的查找(剑指offer.1)

题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路首先从第 0 列沿着竖直方向搜索,直到数组中的元素 array[i][j] 不再小于 target。如果此时 array[i][j] 不等于 target,那么所有 i 行及 i 行以下...

2020-05-05 21:06:25 85

原创 刷题笔记-把数组排成最小的数

题目描述https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/解题思路(1)首先需要将数字转化为字符串,在C++中有两种方法:string str = to_string(num);或者利用stringstream,但stringstream不会自动释放内存,尤其在循环中更要注意这一点:st...

2020-04-13 16:11:44 87

原创 刷题笔记-鸡蛋掉落

问题描述https://leetcode-cn.com/problems/super-egg-drop/据说这是谷歌的一道经典面试题,但由于过于经典,已经被谷歌拉入黑名单了。(我妹说答案永远是0,因为不用试就知道,在一楼摔下鸡蛋,鸡蛋就会破!!)解题思路第一个想法是二分法。楼房高为N,鸡蛋有K个。如果鸡蛋足够多,那么试探 log2(N) 次一定可以明确鸡蛋在哪层楼摔下恰好不会摔坏。如果鸡蛋...

2020-04-11 22:13:18 169

原创 刷题笔记-打家劫舍

问题描述https://leetcode-cn.com/problems/house-robber/思路定义 dp[i] 为当小偷洗劫了第 i 家的情况下,他能偷窃到的最大金额。定义 money[0] 为截止到第 i-2 户人家,小偷得到的最大盗窃金额,money[1] 为截至第 i-1 户人家的情况。定义 robmax 为他走过第 i-1 家之后,能偷窃到的最大金额。偷窃了第i家就不能偷窃...

2020-03-27 20:13:26 90

原创 刷题笔记-最长回文子串

题目描述https://leetcode-cn.com/problems/longest-palindromic-substring/思路利用动态规划。当前状态为 dp[i][j],表示字符串第 i 个字符和第 j 个字符之间是否是回文串(i<=j)。当前状态与前一个状态 dp[i+1][j-1] 有关,如果 dp[i+1][j-1] 是回文串,且 s[i]==s[j] ,则 dp[...

2020-03-23 20:50:04 139

原创 刷题笔记-DFS、递归

题目描述https://leetcode-cn.com/problems/generate-parentheses/comments/递归永远的暴力解法class Solution {public: vector<string> generateParenthesis(int n) { vector<string> vec; ...

2020-02-17 20:41:28 100

原创 刷题笔记-移除链表元素

题目描述https://leetcode-cn.com/problems/remove-linked-list-elements/解答(哭了,大四时候看的数据结构还没忘没【捂脸】)/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ...

2020-02-12 16:36:15 105

原创 刷题笔记-三数之和

三数之和中等难度解决方案class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { vector< vector<int> > vec; sort(nums.begin(), nums.end()...

2020-02-02 23:20:54 111

原创 刷题笔记-两数之和

题目描述https://leetcode-cn.com/problems/two-sum/我的解答最粗暴的方式,遍历输入vector中所有的数字。class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> ...

2020-01-31 19:55:13 124

原创 碎碎念(二)

由于工作需要,今天看了一下HM16.15,发现HM16.15的变量命名真是很规则很易懂呀!哪里像HM14.0那个熊孩子!

2019-05-14 21:04:34 182

原创 碎碎念(一)

最近写代码很少发生无脑bug了,不需要调试很久,基本上搞定两三个问题,程序就能跑起来了,喜欢这种干脆利落的感觉。今日份的积累:(1)matlab中的除号“/”不管分子和分母是不是整数,结果永远是float型的(2)取余使用mod(3)按行读文本使用 fgetl 或者 fgets,区别是 fgetl 不读取换行符(4)判断文本是否是空行可以使用 isempty(line)(5)判断某...

2019-05-09 19:32:08 173

原创 pcCU->getCUPelX() 函数功能

这个函数到底是pcCU所在CTU在整张图片中的的像素横坐标位置,还是pcCU在图片中的像素横坐标位置?这个问题纠结了近一个月,现在给出我的结论,是后者。

2019-03-19 13:07:21 462

原创 HM14.0 使用方法

要使用HM14.0对视频进行编码,需要做一些前期工作。主要分为三个部分:首先要设置好配置文件,放在工作目录下;其次,设置启动项目;最后设置启动项目的调试属性。当然,在运行程序之前还要生成解决方案。

2019-03-19 12:51:32 823 2

原创 HM14.0 filterHorLuma 和 filterVerLuma 插值函数以及 isFirst、isLast 的作用

filterHorLuma 函数调用层次结构filterHorLuma 函数中调用了 filterCopy 和 filterHor&lt;NTAPS_LUMA&gt; 函数,当对整像素位置进行插值时调用前者,对亚像素进行插值时调用后者。  以下重点分析 filterHor&lt;NTAPS_LUMA&gt; 函数。filterHor&lt;NTAPS_LUMA&gt;函数filterHo...

2019-03-11 22:21:58 778

原创 TComPicYuv 类中的 m_apiPicBufY 和 m_piPicOrgY 的区别

参见Void TComPicYuv::create(……)函数中的几句代码: m_apiPicBufY = (Pel*)xMalloc( Pel, ( m_iPicWidth + (m_iLumaMarginX &amp;lt;&amp;lt;1)) * ( m_iPicHeight + (m_iLumaMarginY &amp;lt;&amp;lt;1))); m_apiPicBu...

2019-03-11 21:02:32 405

空空如也

空空如也

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

TA关注的人

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