自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 cublas64_100.dll找不到

cublas64_100.dll等一系列动态库找不到本人在运行导师给的VS2017+opencv+tf实现的yolo3程序时,由于已经安装了cuda10.2,程序使用的是10.0,所以运行起来总是提示cublas64_100.dll, 'cudart64_100.dll’等一系列动态库找不到。解决方法:可以不用卸载10.2的cuda,直接把10.0对应的缺失dll复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\bin下就好。

2021-06-02 17:18:07 1982 4

原创 vs2017配置libtorch

vs2017配置libtorch配置libtorch下载libtorch配置libtorch环境变量配置VS2017环境所踩过的坑发现上面程序编译了输出一大堆warning,但不报错,然而还是生成失败。编译完了,无法运行,找不到XXX.dll文件。有未经处理的异常:Microsoft C++异常:c10::Error,位于内存位置xxx处配置libtorch配置libtorch有两个方法,一是直接在vs2017上配置不用CMAKE,二是用CMAKE编译(该方法我踩坑失败,最后转为方法一成功),下面介绍方

2021-04-08 20:24:08 1750

原创 波兰逆波兰表达式

逆波兰表达式正常表达式转化逆波兰表达式创建两个栈命名为s1, s2。遍历待转化的表达式,如果是数字,直接丢进s2。如果是左括号’(’,丢进s1。如果是符号’+’, ‘-’, ‘*’, ‘/’,本质上是维护一个运算优先级严格单调递增栈,即如果s1栈顶符号运算优先级高于或者等于当前符号,出栈直到栈空或者栈顶运算符号优先级低于当前符号。如果s1栈顶符号运算优先级低于(不包括等于)当前符号,当前符号入s1。左括号是优先级最低的。如果是右括号,把栈内的符号全部弹出放入s2,直到遇到左括号,并丢弃该左括

2021-03-21 16:05:14 439

原创 721. 账户合并

721. 账户合并给定一个列表 accounts,每个元素 accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0] 是 名称 (name),其余元素是 emails 表示该账户的邮箱地址。现在,我们想合并这些账户。如果两个账户都有一些共同的邮箱地址,则两个账户必定属于同一个人。请注意,即使两个账户具有相同的名称,它们也可能属于不同的人,因为人们可能具有相同的名称。一个人最初可以拥有任意数量的账户,但其所有账户都具有相同的名称。合并账户后,按以下格式返回账户:每个账户的第

2021-01-18 21:17:14 189

原创 803. 打砖块

803. 打砖块有一个 m x n 的二元网格,其中 1 表示砖块,0 表示空白。砖块 稳定(不会掉落)的前提是:一块砖直接连接到网格的顶部,或者至少有一块相邻(4 个方向之一)砖块 稳定 不会掉落时给你一个数组 hits ,这是需要依次消除砖块的位置。每当消除 hits[i] = (rowi, coli) 位置上的砖块时,对应位置的砖块(若存在)会消失,然后其他的砖块可能因为这一消除操作而掉落。一旦砖块掉落,它会立即从网格中消失(即,它不会落在其他稳定的砖块上)。返回一个数组 result ,其

2021-01-18 21:09:10 107

原创 947. 移除最多的同行或同列石头

947. 移除最多的同行或同列石头n 块石头放置在二维平面中的一些整数坐标点上。每个坐标点上最多只能有一块石头。如果一块石头的 同行或者同列 上有其他石头存在,那么就可以移除这块石头。给你一个长度为 n 的数组 stones ,其中 stones[i] = [xi, yi] 表示第 i 块石头的位置,返回 可以移除的石子 的最大数量。思路可以想到,剩余的石头各自成一个连通分量,同行同列的石头属于一个连通分量,可以移除到只剩一个石头。因此,对二维平面的点进行并查集操作,将x坐标映射到10000+

2021-01-18 20:55:51 218 1

原创 1203. 项目管理

1203. 项目管理公司共有 n 个项目和 m 个小组,每个项目要不无人接手,要不就由 m 个小组之一负责。group[i] 表示第 i 个项目所属的小组,如果这个项目目前无人接手,那么 group[i] 就等于 -1。(项目和小组都是从零开始编号的)小组可能存在没有接手任何项目的情况。请你帮忙按要求安排这些项目的进度,并返回排序后的项目列表:同一小组的项目,排序后在列表中彼此相邻。项目之间存在一定的依赖关系,我们用一个列表 beforeItems 来表示,其中 beforeItems[i] 表

2021-01-12 21:38:23 146

原创 1202. 交换字符串中的元素

1202. 交换字符串中的元素给你一个字符串 s,以及该字符串中的一些「索引对」数组 pairs,其中 pairs[i] = [a, b] 表示字符串中的两个索引(编号从 0 开始)。你可以 任意多次交换 在 pairs 中任意一对索引处的字符。返回在经过若干次交换后,s 可以变成的按字典序最小的字符串。思路直接使用并查集,可以交换的索引值组成一个集合,对集合的元素进行排序即可,然后按照位置放回到原数组中。class Solution {private: vector<int

2021-01-11 19:32:26 265

原创 189. 旋转数组

189. 旋转数组给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。思路翻转法,数组元素向右移动k个位置,数组中后k个元素会到前面。因此可以先对数组进行翻转,然后对前k个元素进行翻转,再对剩下的元素进行翻转即得到答案。class Solution {public: void reverse(vector<int>& nums, int left, int right) { while(left < right) {

2021-01-11 19:29:19 104

原创 399. 除法求值

399. 除法求值给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 values[i] 共同表示等式 Ai / Bi = values[i] 。每个 Ai 或 Bi 是一个表示单个变量的字符串。另有一些以数组 queries 表示的问题,其中 queries[j] = [Cj, Dj] 表示第 j 个问题,请你根据已知条件找出 Cj / Dj = ? 的结果作为答案。返回 所有问题的答案 。如果存在某个无法确

2021-01-07 22:34:46 137

原创 86. 分隔链表

86. 分隔链表给你一个链表和一个特定值 x ,请你对链表进行分隔,使得所有小于 x 的节点都出现在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。思路直接创建两个链表,分开小于x的节点和大于等于x的节点即可,最后合并。代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x)

2021-01-07 22:01:21 106

原创 435. 无重叠区间

435. 无重叠区间给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。思路其实和452.用最少的箭射爆气球 的思路差不多。直接对区间的右端进行排序,贪心地寻找区间,以第一个区间的右边为边界right,遍历后面区间,如果后面区间的左端大于等于right,则把该区间加入没重叠,同时更新right。如果左端小于right,由于区间右端排序,贪心地选择前一区间,因为后一区间的右端大,更容易发生重叠。如果对区间的左端进行排序,同理以第一个区间的右边为边界right,遍历后面区间,如果后面区

2021-01-07 21:55:27 122

原创 85. 最大矩形

85. 最大矩形给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。思路想到了84.柱状图中最大矩形题目,84的是给出了一维的高度,找出最大矩形。该题是给出了一个二维数组,同理只要把二维数组转化为柱状图,就能使用84的思路进行求解。可以定义dp[i][j]为矩阵第i行第j列元素的左边连续1的数量。因此,对于每列,dp[i][j]就变成一个柱状图,套用84的题解即可。代码class Solution {public:

2020-12-29 11:50:10 114

原创 330. 按要求补齐数组

330. 按要求补齐数组给定一个已排序的正整数数组 nums,和一个正整数 n 。从 [1, n] 区间内选取任意个数字补充到 nums 中,使得 [1, n] 区间内的任何数字都可以用 nums 中某几个数字的和来表示。请输出满足上述要求的最少需要补充的数字个数。思路假定[1, x - 1]区间的任何数字已经可以表达,如果x也在数组中,则[1, 2x - 1]也可以表达,如果x不在数组中,则可以贪心地往数组中添加x,因为添加小于x的任何值,都达不到[1, 2x - 1]的区间长度。遍历数组,初始

2020-12-29 11:34:23 151

原创 135. 分发糖果

135. 分发糖果老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。思路可以直接使用贪心,从前往后遍历一次,保证只要当前孩子分数比前一孩子高,糖果数就比前一孩子多一颗。从后往前遍历一次,保证当前孩子分数比后一孩子高,糖果数也需要比后一孩子多一颗。代码class Solution {public: int candy(vector<int>& ratings) { int n = ratings.siz

2020-12-24 10:59:16 135

原创 103. 二叉树的锯齿形层序遍历

103. 二叉树的锯齿形层序遍历给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。思路想到了层序遍历,只需在遍历每层时,考虑当前层数,使用一个双端队列,偶数层从后端插入,奇数层从前端插入即可。代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode

2020-12-22 15:33:20 182

原创 746. 使用最小花费爬楼梯

746. 使用最小花费爬楼梯数组的每个索引作为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i](索引从0开始)。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。思路理所当然想到了动态规划,当在第i个阶梯时,只能由第i-2个阶梯或者i-1个阶梯跳跃而来,取两者花费最小的即可,在最后时,只需比较倒数两个阶梯的花费最小返回即可。代码class S

2020-12-22 15:25:54 128

原创 1081. 不同字符的最小子序列

1081. 不同字符的最小子序列返回 s 字典序最小的子序列,该子序列包含 s 的所有不同字符,且只包含一次。思路首先就想到了单调栈,维护一个单点递增栈,可以得到字典序最小的子序列。但是单调栈没有考虑题目的条件,需要包含所有不同字符并且只能出现一次,因此需要一个记录当前栈出现字符的数组,以及一个计算字符总数的数组,如果需要删除的字符在后面不出现了,就不能删除了。代码class Solution {public: string smallestSubsequence(string s

2020-12-22 15:18:05 335

原创 290. 单词规律

290. 单词规律给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。思路思路挺简单的,主要是细节问题,字母和字符串需要一一对应,所以需要一个哈希表和一个数组,哈希表映射字符串到字母,数组映射字母到字符串。然后就可以遍历pattern的每个字母,分割字符串即可。代码class Solution {public: bool

2020-12-16 10:33:31 168

原创 738. 单调递增的数字

738. 单调递增的数字给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。思路可以贪心地遍历整数N,找到第一个不单调递增的位置i,也就是s[i] < s[i - 1],然后可以把s[i - 1]对应的值减1,就可以把后面的值全部变为9了。但是把s[i - 1]减1时,需要注意s[i - 1]和s[i - 2]可能不是单调递增了,需要一直循环,找到减1仍单调递增或者直到最左边。代码class Solution {public:

2020-12-15 09:51:26 131

原创 49. 字母异位词分组

49. 字母异位词分组给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。思路对每个字符串进行排序,记入哈希表里面,遍历哈希表取出结果即可。代码class Solution {public: vector<vector<string>> groupAnagrams(vector<string>& strs) { unordered_map<string, vector<string&

2020-12-14 10:06:00 97

原创 376. 摆动序列

376. 摆动序列如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。思路想到了动态规划,令up[i]表示以[0, i]之间的元素为结尾的上升序列,down[i]为[0, i]之间的元素结尾的下降序列,则如果num[i] > num[i - 1],up[i] = max(up[i - 1], down[i -1] + 1),如果num[i] < num[i - 1],down[i] = max(

2020-12-12 16:36:50 105

原创 649. Dota2 参议院

649. Dota2 参议院思路可以用两个队列分别储存天辉和夜魇在数组的位置,先出手的肯定会禁止下一位对方阵营的选手,然后出手了就需要把位置+n再放入队列,以便处理下一个循环。最后只需判断那个队列剩余人数即可。代码class Solution {public: string predictPartyVictory(string senate) { queue<int> R; queue<int> D; int n =

2020-12-12 16:27:52 106

原创 842. 将数组拆分成斐波那契序列

842. 将数组拆分成斐波那契序列思路回溯法,通过遍历字符串的前缀,划分数组,直到字符串划分完毕。剪枝,如果划分的字符串是以0开头的,不用继续划分了。划分的字符串大于INT_MAX了,不用继续划分了。划分的字符串大于前面两个值的和时,不用继续划分了。代码class Solution {public: vector<int> splitIntoFibonacci(string S) { vector<int> list; df

2020-12-08 10:56:28 137

原创 861. 翻转矩阵后的得分

861. 翻转矩阵后的得分有一个二维矩阵 A 其中每个元素的值为 0 或 1 。移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0。在做出任意次数的移动后,将该矩阵的每一行都按照二进制数来解释,矩阵的得分就是这些数字的总和。返回尽可能高的分数。思路贪心地将每行的最左边全部改为1,具体地,访问每行的第一个位置,不为1的就将该行全部翻转。接下来对每列的1进行统计,如果1的数量大于一半,该列就不用翻转,否则就翻转该列。代码class Sol

2020-12-07 10:07:00 107

原创 621. 任务调度器

621. 任务调度器给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间,CPU 可以完成一个任务,或者处于待命状态。然而,两个 相同种类 的任务之间必须有长度为整数 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。你需要计算完成所有任务所需要的 最短时间 。思路计算每个任务出现的次数,记录次数最多为maxCoun

2020-12-05 21:34:04 135

原创 204. 计数质数

204. 计数质数统计所有小于非负整数 n 的质数的数量。思路暴力法,判断每个数能否被整除代码class Solution {public: bool isPrimes(int n) { for(int i = 2; i * i <= n; ++i) { if(n % i == 0) { return false; } } return true;

2020-12-03 10:00:51 63

原创 321. 拼接最大数

321. 拼接最大数给定长度分别为 m 和 n 的两个数组,其元素由 0-9 构成,表示两个自然数各位上的数字。现在从这两个数组中选出 k (k <= m + n) 个数字拼接成一个新的数,要求从同一个数组中取出的数字保持其在原数组中的相对顺序。求满足该条件的最大数。结果返回一个表示该最大数的长度为 k 的数组。说明: 请尽可能地优化你算法的时间和空间复杂度。思路分解问题,其实就是从第一个数组中选择i个数,凑成最大子序列,然后从第二个数组中选择k - i个数,凑成最大子序列,再将两个序列合

2020-12-02 11:49:45 353

原创 34. 在排序数组中查找元素的第一个和最后一个位置

34. 在排序数组中查找元素的第一个和最后一个位置给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。思路俗话说二分法思路简单,细节是魔鬼。以寻找开始位置为例,范围为[0, n - 1],首先寻找到nums[mid] == target值后,不能立刻返回,需要将right缩小为mid - 1,当nums[mid] > target时,right = mid - 1,当n

2020-12-01 10:11:00 79

原创 767. 重构字符串

767. 重构字符串给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。若可行,输出任意可行的结果。若不可行,返回空字符串。思路其实就是一个贪心的思想,统计每个字符出现的次数,如果最多的出现次数大于字符串长度的一半,则无法完成任务,否则就可以错位安排最大次数的字符,直到所有字符安排完毕。数据结构:优先队列,方便找到出现次数最大的字符。代码class Solution {public: struct cmp { bool operator() (c

2020-11-30 11:09:05 98

原创 164. 最大间距

164. 最大间距给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。如果数组元素个数小于 2,则返回 0。思路直接进行基数排序,基数排序的核心思想就是,将数组的数先按最低位进行排序,排序完毕后再按照次低位进行排序,直到数组中最大值的最高位排序完毕。代码class Solution {public: int maximumGap(vector<int>& nums) { int n = nums.size(); if(n

2020-11-26 22:17:02 74

原创 222. 完全二叉树的节点个数

222. 完全二叉树的节点个数给出一个完全二叉树,求出该树的节点个数。说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。思路利用完成二叉树的性质,分别求左右子树的高度,如果左右子树的高度相等,证明左子树已经被填满,左子树的节点数为2^n - 1,n为左子树高度,再加上根节点就是2^n,然后递归求解右子树即可。如果左右子树的高度不相等,证明右子树已

2020-11-24 18:30:27 107

原创 452. 用最少数量的箭引爆气球

452. 用最少数量的箭引爆气球在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到

2020-11-23 09:45:41 136

原创 148. 排序链表

148. 排序链表给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?思路直接想到了对链表进行归并排序,对比数组的归并,需要考虑到链表的断链问题。将问题分解,首先得知道链表的长度,从而确定归并范围,再得知道链表的中点,方便划分继续递归,以及合并链表。分解完毕问题,其实就是三个基础问题:计算链表长度、寻找链表中点、合并两个排序好的链表代码/** * Definition for

2020-11-22 16:10:29 80

原创 147. 对链表进行插入排序

147. 对链表进行插入排序对链表进行插入排序。思路关键在于保存最后一个已排序完毕的结点,便于进行下一次排序。只要是链表,都可以创建一个hair结点指向链表头head,便于处理头部插入情况。令LastSort = head,cur = head -> next,比较cur和LastSort的值,如果LastSort -> val <= cur -> val,LastSort前进一步,cur也前进一步即可。否则,就需要从链表头开始寻找合适的插入位置。/** * Definit

2020-11-20 10:03:19 81

原创 871. 最低加油次数

871. 最低加油次数汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处。沿途有加油站,每个 station[i] 代表一个加油站,它位于出发位置东面 station[i][0] 英里处,并且有 station[i][1] 升汽油。假设汽车油箱的容量是无限的,其中最初有 startFuel 升燃料。它每行驶 1 英里就会用掉 1 升汽油。当汽车到达加油站时,它可能停下来加油,将所有汽油从加油站转移到汽车中。为了到达目的地,汽车所必要的最低加油次数是多少?如果无法到达目的地,则

2020-11-18 11:41:05 242

原创 134. 加油站

134. 加油站在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。思路假定从x出发,第一次无法到达加油站y,那么从x和y之间的任一个加油站z出发,都无法到达加油站y,因为缺少了加油站x到z之间的剩余油量。因此,从起点开始计算,当第一次碰见无法到达的加油站时

2020-11-18 10:56:41 83

原创 406. 根据身高重建队列

406. 根据身高重建队列假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。思路根据身高高矮排序,身高相同的根据人数少到多排序,然后就可以根据排序的结果进行数组插入了,若此时正在处理第i个人,后面的人因为都比他矮,没有影响,前面的人都比他高,会影响他的人数,所以就直接根据第i个人前面的人数多少,在数组中插入位置即可。代码class Solution {public: s

2020-11-16 10:06:09 135

原创 402.移掉K位数字

402.移掉K位数字给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。思路由于高位数字影响较大,我们应该尽量删除高位较大的数字,如526,删除5的效果永远比删除2的效果要好,因此可以贪心地遍历字符串,找出第一个位置,使得num[i] < num[i - 1],此时就可以删除i - 1位置字符(i > 0),需要删除k个数字就贪心遍历k次,但这个方案的时间复杂度达到O(nk)。其实我们只要保证字符串是单调不降就好了,单调不降,很容易就想到单调递增栈,

2020-11-15 15:31:17 108

原创 vim全部复制到系统剪切板

vim全部复制全部选择,按esc退到命令模式,输入ddvG,dd表示回到第一行,v表示可视模式,G表示到最后一行。复制到剪贴板,首先要看下是否安装vim-gnome,否则就要sudo apt-get install vim-gnome输入ddvG全部选择后,直接输入"+y即可...

2020-11-14 19:46:48 7990 1

空空如也

空空如也

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

TA关注的人

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