- 博客(20)
- 收藏
- 关注
原创 LeetCode笔记 739. 每日温度
问题描述:思路分析:不考虑暴力遍历的方法,太笨比了,失去了刷题的意义。这个题目是在栈相关的练习下,所以考虑借助栈来解决。1、先从头开始遍历数组,依次将温度入栈;2、如果当前温度大于栈顶温度,将栈顶温度出栈,且两个温度的下标之差就是所求的需要等待的天数。然后继续比较当前温度跟新的栈顶温度的大小,重复之前的操作,直到该温度小于栈顶元素,则将其入栈;3、如果当前温度小于栈顶温度,则继续将下一个元素入栈,直到该温度大于栈顶温度,跳转至步骤2;4、遍历直到数组结束;其实上述步骤就是为了构建一个
2020-10-21 23:04:26
100
原创 LeetCode笔记 133.克隆图
问题描述:代码实现:/*// Definition for a Node.class Node {public: int val; vector<Node*> neighbors; Node() { val = 0; neighbors = vector<Node*>(); } Node(int _val) { val = _val; neig
2020-10-10 16:47:57
113
原创 LeetCode笔记 152. 乘积最大子数组
问题描述:思路分析:很明显可用动态规范的思路。假设 整数数组nums的长度为n,创建两个长度为n+1的dp数组,Posdp[i]表示到第i个元素为止的最大乘积,Negdp[i]表示到第i个元素为止的最小乘积,依次遍历然后更新,最后Posdp[n]即为当前的最大乘积。代码实现:class Solution {public: int maxProduct(vector<int>& nums) { int n = nums.size(); vector<in
2020-10-10 09:12:50
109
原创 LeetCode笔记 242. 有效的字母异位词
问题描述:代码实现:class Solution {public: bool isAnagram(string s, string t) { int record[26] = {0}; for(int i = 0; i < s.size(); i++) { record[s[i] - 'a']++; } for(int i = 0; i <
2020-10-09 15:24:15
82
原创 LeetCode笔记 139. 单词拆分Ⅱ
问题描述:思路分析:首先使用动态规划的方法来校验字符串是否可以拆分成字典里的单次,然后使用DFS的方法来获得所有可能的拆分结果。代码实现:class Solution {public: bool inDict(string s, vector<string> wordDict) { for (auto x : wordDict) { if (x == s) { return true; } } return false; }
2020-10-09 15:17:38
95
原创 LeetCode笔记 139.单词拆分
问题描述:思路分析:一开始想的是简单粗暴的用DFS解决,然后提交代码发现超出时间限制了,只通过了29个用例=。=,后来改成用动态规划的思想。代码:/*动态规划*/class Solution{public: bool wordBreak(string s, vector<string>& wordDict) { vector<bool> flag(s.size() + 1, false); flag[0] = true; for (int
2020-09-23 14:50:25
80
原创 LeetCode笔记 131.分割回文串
问题描述:算法思想:深度优先搜索(DFS)。使用一个vector<vector< string>>类型的变量来保存所有可能的分割方案,使用一个vector< string>的变量来保存单次遍历时产生的临时方案。代码:class Solution {public: vector<vector<string>> partition(string s) { vector<vector<string>> re
2020-09-23 14:37:16
68
原创 LeetCode笔记 88. 合并两个有序数组
问题描述:算法思想:对两个数组从后往前搜索,比较两个值的大小,把最大的值放在最后,直到两个数组全部遍历完成。代码:class Solution {public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { int off = m + n - 1; while (off >= 0) { if (m <= 0) { nu
2020-09-23 11:24:55
58
原创 LeetCode笔记 136. 只出现一次的数字
问题描述:算法思想:“两个相同的值亦或结果为0,任何值和0异或,结果为这个值本身”。即:a ⊕ a = 0, a ⊕ 0 = 1代码:class Solution {public: int singleNumber(vector<int>& nums) { int res = 0; for (auto &i : nums) { res = res ^ i; } return res; }};...
2020-09-23 10:19:53
45
原创 LeetCode笔记 752. 打开转盘锁
问题描述:算法思想:采用广度优先搜索(BFS),具体细节:使用一个队列Q来记录所有待遍历的点(即可以从这个点出发继续去做广度更高的遍历)。使用一个集合来记录已经遍历过的节点,避免重复遍历。每次遍历,都会先从队列Q中取队首的数字去"旋转"成其他的数字,如果这些数字是目标数字,则返回遍历的广度,如果不是,则对队列执行pop(),继续取队首数字遍历。代码:class Solution {public: int openLock(vector<string>& deadends
2020-09-22 15:59:23
62
原创 LeetCode笔记200. 岛屿数量
问题描述:算法思想:采用深度优先遍历(DFS),每次经过一个节点就把该节点置为非1,避免之后重复遍历。程序从一个值为1的点开始遍历,直到无法继续下去,则认为这座岛屿探索完了,继续寻找下一个值为1的节点,直到整个图都遍历完。代码:class Solution {public: int numIslands(vector<vector<char>>& grid) { int islands = 0; for (int i = 0; i < grid
2020-09-22 15:13:20
64
原创 LeetCode笔记 622. 设计循环队列
问题描述:代码:class MyCircularQueue {private: vector <int> data; int head; int tail; int count; int size;public: /** Initialize your data structure here. Set the size of the queue to be k. */ MyCircularQueue(int k) { data.resize(k); head =
2020-09-20 22:08:49
56
原创 LeetCode笔记 747. 至少是其他数字两倍的最大数
问题描述:代码:class Solution {public: int dominantIndex(vector<int>& nums) { if (nums.size() == 1) { return 0; } int value_1st = -1; int value_2nd = -1; int index_1st = -1; int index_2st = -1; for (int i = 0; i < nums.size
2020-09-18 17:56:37
57
原创 LeetCode笔记 20. 有效的括号
问题描述:代码:class Solution {public: bool isValid(string s) { stack<char> ch; map<char, char> sym = { { '{', '}' }, { '[', ']' }, { '(', ')' } }; for (auto &c: s) { if (c == '{' || c == '[' || c == '(' ) { ch.push(c);
2020-09-18 17:21:17
69
原创 LeetCode笔记 155. 最小栈
问题描述:代码:class MinStack {public: stack<int> data; stack<int> min; MinStack() { } void push(int x) { data.push(x); if (min.empty() || min.top() >= x) //总是把最小的元素压到min栈里面 { min.pu
2020-09-18 17:15:52
86
1
原创 linux安装numa库(包括libnuma.so和libnuma.so.1)
问题描述:没有可用软件包 libnuma。错误:无须任何处理当在Linux系统中使用yum安装软件时提示 “没有可用软件包”时,代表在linux系统yum源中已经没有对应的安装包了,这时,我们需要安装EPEL。EPEL(Extra Packages for Enterprise Linux),企业版Linux额外包,RHEL分布非标准包的社区类库。安装如下:yum没有找到对应依赖包,更新epel第三方软件库,运行命令:yum install -y epel-release此时安装完成后,记得
2020-07-08 10:42:54
10930
转载 Linux -RedHat - 记录替换yum源的过程
项目需要再linux上开发,于是我弄了个虚拟机自己装了个RedHat,因为是纯净的系统,所以后面做项目的时候麻烦就来了。首先是网络,这个是最头疼的问题,ping来ping去各种不通,不过今天先不谈了,后续整理下再单独记录。今天主要记录下yum的问题。最先需要接触yum是因为安装某个包的时候报了个错:configure: error: no acceptable C compiler found in $PATH一查,发现是没装gcc。。行吧,那这肯定得装一个yum install gcc然后
2020-05-19 16:06:45
156
转载 new和new (std::nothrow) 的区别
源码方面的信息就不详细讲述了,找找代码看看便知,简要说明下:new(std::nothrow) 顾名思义,即不抛出异常,当new一个对象失败时,默认设置该对象为NULL,这样可以方便的通过if(p == NULL) 来判断new操作是否成功普通的new操作,如果分配内存失败则会抛出异常,虽然后面一般也会写上if(p == NULL) 但是实际上是自欺欺人,因为如果分配成功,p肯定不为NULL;...
2020-05-06 18:41:08
429
转载 __builtin_expect 说明(转载)
这个指令是gcc引入的,作用是允许程序员将最有可能执行的分支告诉编译器。这个指令的写法为:__builtin_expect(EXP, N)。意思是:EXP==N的概率很大。
2020-04-30 09:58:23
270
原创 windows环境下gtest的使用
准备首先需要下载gtest的项目https://github.com/google/googletest安装下载完成后,进行安装。(PS:我看网上很多安装教程都是linux环境下的,windows下也有人说有个msvc文件夹:googletest-master\googletest\msvc,但是我下的这个版本没有这个文件夹了)以下是我搭建gtest的过程:1、cd googlete...
2020-04-14 16:27:48
3911
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人