自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(335)
  • 问答 (1)
  • 收藏
  • 关注

原创 74. 搜索二维矩阵

1.题目描述编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:(1)每行中的整数从左到右按升序排列。(2)每行的第一个整数大于前一行的最后一个整数。示例 1:示例 2:提示:(1)m == matrix.length(2)n == matrix[i].length(3)1 <= m, n <= 100(4)-10^4 <= matrix[i][j], target <= 10^42.思路输入的 m x n 矩阵可以视为长

2021-03-25 00:03:00 271

原创 678. 有效的括号字符串

1.题目描述给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:(1)任何左括号 ( 必须有相应的右括号 )。(2)任何右括号 ) 必须有相应的左括号 ( 。(3)左括号 ( 必须在对应的右括号之前 )。(4)∗*∗可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串。(5)一个空字符串也被视为有效字符串。示例 1:示例 2:示例 3:注意:1.字符串大小将在 [1,100] 范围内。2.思路有效的字

2021-03-24 18:14:41 321

原创 384. 打乱数组

1.题目描述给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。实现 Solution class:  Solution(int[] nums) 使用整数数组 nums 初始化对象  int[] reset() 重设数组到它的初始状态并返回  int[] shuffle() 返回数组随机打乱后的结果示例:提示:(1)1 <= nums.length <= 200(2)-10^6 <= nums[i] <= 10^6(3)nums 中的所有元素都是

2021-03-24 13:00:26 354

原创 43. 字符串相乘

1.题目描述给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:示例 2:说明:1.num1 和 num2 的长度小于110。2.num1 和 num2 只包含数字 0-9。3.num1 和 num2 均不以零开头,除非是数字 0 本身。4.不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。2.思路(1)乘数 num1 位数为 M,被乘数 num2 位数为 N,

2021-03-24 10:46:40 149

原创 227. 基本计算器 II

1.题目描述给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。示例 1:示例 2:示例 3:提示:(1)1 <= s.length <= 3 * 105(2)s 由整数和算符 (’+’, ‘-’, ‘*’, ‘/’) 组成,中间由一些空格隔开(3)s 表示一个 有效表达式(4)表达式中的所有整数都是非负整数,且在范围 [0, 231 - 1] 内(5)题目数据保证答案是一个 32-bit 整数2.思路设置一个栈,对于加减号

2021-03-23 20:35:53 94

原创 443. 压缩字符串

1.题目描述给定一组字符,使用原地算法将其压缩。压缩后的长度必须始终小于或等于原数组长度。数组的每个元素应该是长度为1 的字符(不是 int 整数类型)。在完成原地修改输入数组后,返回数组的新长度。进阶:你能否仅使用O(1) 空间解决问题?示例 1:示例 2:示例 3:提示:所有字符都有一个ASCII值在[35, 126]区间内。1 <= len(chars) <= 1000。2.思路(双指针)使用两个指针 read 和 write 分别标记读和写的位置。读写操作均从

2021-02-25 22:18:04 117

原创 440. 字典序的第K小数字

1.题目描述给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字。注意:1 ≤ k ≤ n ≤ 109。示例 :2.思路字典序就是根据数字的前缀进行排序,比如 10 < 9,因为 10 的前缀是 1,比 9 小。再比如 112 < 12,因为 112 的前缀 11 小于 12。一个节点都拥有 10 个孩子节点,因为作为一个前缀 ,它后面可以接 0~9 这十个数字。而且可以发现,整个字典序排列也就是对十叉树进行先序遍历。1, 10, 100, 101, … 11, 11

2021-02-25 19:19:52 197

原创 977. 有序数组的平方

1.题目描述给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按非递减顺序排序。示例 1:示例 2:提示:1 <= nums.length <= 104-104 <= nums[i] <= 104nums 已按非递减顺序排序2.思路(双指针)利用「数组 nums 已经按照升序排序」这个条件。显然,如果数组 nums 中的所有数都是非负数,那么将每个数平方后,数组仍然保持升序;如果数组 nums 中的所有数都是负数,那么将

2021-02-24 23:59:22 172

原创 670. 最大交换

1.题目描述给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。示例 1 :示例 2 :注意:1.给定数字的范围是 [0, 108]2.思路1.把数字转化为字符串2.用哈希表记录每个字符最后一次出现的索引i3.遍历字符串,对于每个字符,查找该字符右边比它大的数字,为了找到最大的比该字符大的数字,从9开始倒序查找,并进行交换。3.代码class Solution {public: int maximumSwap(int num) {

2021-02-21 23:14:30 102

原创 468. 验证IP地址

1.题目描述编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址。如果是有效的 IPv4 地址,返回 “IPv4” ;如果是有效的 IPv6 地址,返回 “IPv6” ;如果不是上述类型的 IP 地址,返回 “Neither” 。IPv4 地址由十进制数和点来表示,每个地址包含 4 个十进制数,其范围为 0 - 255, 用(".")分割。比如,172.16.254.1;同时,IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01 是不合法的。IPv6

2021-02-21 13:43:38 77

原创 718. 最长重复子数组

1.题目描述给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例:提示:1 <= len(A), len(B) <= 10000 <= A[i], B[i] < 1002.思路dp[i][j]表示以i,j结尾的最长公共子数组的长度初始状态:dp[0][0] = 0,空数组的最长公共子数组的长度为0状态转移方程:dp[i][j] = dp[i-1][j-1] + 1,if A[i-1] == B[j-1]结果:dp[i][j]的最大值

2021-02-19 16:12:34 74

原创 394. 字符串解码

1.题目描述给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。示例 1:示例 2:示例 3:示例 4:2.思路由于括号内嵌套括号,因此

2021-02-09 15:50:02 77

原创 582.结束进程

1.题目描述题目:给定n个进程,每个进程都有一个唯一的PID(process id)和PPID(parent process id)。每个进程最多只有一个父进程,但可能有多个子进程。如果一个进程的PPID为0,表示它没有父进程。如果一个进程被杀死,那么它的子进程也会被杀死。输入两个相同长度的整数数组,第一个数组是每个进程的PID,第二个数组是对应位置进程的PPID,再输入一个将被杀死的进程的PID,请输出所有将被杀死的进程的PID。例如,输入的PID数组为[1, 3, 10, 5],PPID数组为[3,

2021-02-09 13:04:39 488

原创 334. 递增的三元子序列

1.题目描述给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。示例 1:示例 2:示例 3:提示:1 <= nums.length <= 105-2^31 <= nums[i] <= 2^31 - 12.方法一求最长上升子序列,

2021-02-09 11:46:05 401

原创 分解质因数

1.题目描述1.将一个整数分解为若干质因数之乘积2.你需要从小到大排列质因子2.思路从最小的质数2开始递增到根号n为止:(1)如果这个数可以整除n,则加入结果,并且n更新为n/i。(2)否则递增i。3.代码#include <iostream>#include <vector>using namespace std;int main() { int n = 8; vector<int> res; for (int i = 2; i * i

2021-02-08 17:14:08 159

原创 97. 交错字符串

1.题目描述给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。两个字符串 s 和 t 交错的定义与过程如下,其中每个字符串都会被分割成若干非空子字符串:s = s1 + s2 + … + snt = t1 + t2 + … + tm|n - m| <= 1交错是 s1 + t1 + s2 + t2 + s3 + t3 + … 或者 t1 + s1 + t2 + s2 + t3 + s3 + …提示:a + b 意味着字符串 a 和 b 连接。

2021-02-08 12:24:39 149

原创 209. 长度最小的子数组

1.题目描述给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。示例:进阶:如果你已经完成了 O(n) 时间复杂度的解法, 请尝试 O(nlogn) 时间复杂度的解法。2.思路定义两个指针 start 和 end 分别表示子数组的开始位置和结束位置,维护变量 sum 存储子数组中的元素和(即从nums[start] 到 nums[end] 的元素和)。初始状态下,start 和 end

2021-02-07 12:02:39 139

原创 628. 三个数的最大乘积

1.题目描述给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。示例 1:示例 2:示例 3:提示:3 <= nums.length <= 104-1000 <= nums[i] <= 10002.思路1.如果数组中全是非负数,则排序后最大的三个数相乘即为最大乘积;如果全是非正数,则最大的三个数相乘同样也为最大乘积。2.如果数组中有正数有负数,则最大乘积既可能是三个最大正数的乘积,也可能是两个最小负数(即绝对值最大)与最大正数的

2021-02-01 11:44:00 144

原创 350. 两个数组的交集 II

1.题目描述给定两个数组,编写一个函数来计算它们的交集。示例 1:示例 2:说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。我们可以不考虑输出结果的顺序。进阶:如果给定的数组已经排好序呢?你将如何优化你的算法?如果 nums1 的大小比 nums2 小很多,哪种方法更优?如果 nums2 的元素存储在磁盘上,内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?2.思路(哈希表)由于同一个数字在两个数组中都可能出现多次,因此需要用哈希表存储

2021-01-31 21:59:04 174

原创 92. 反转链表 II

1.题目描述反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL2.思路(双指针)1.设置两个指针cur和pre2.cur和pre移动到位置m,也就是翻转链表的起始位置3.指针tail为翻转后的尾节点,con指针为第m个节点的前一个节点,此结点是翻转后链表的头部

2021-01-31 20:17:14 92

原创 1235. 规划兼职工作

你打算利用空闲时间来做兼职工作赚些零花钱。这里有 n 份兼职工作,每份工作预计从 startTime[i] 开始到 endTime[i] 结束,报酬为 profit[i]。给你一份兼职工作表,包含开始时间 startTime,结束时间 endTime 和预计报酬 profit 三个数组,请你计算并返回可以获得的最大报酬。注意,时间上出现重叠的 2 份工作不能同时进行。如果你选择的工作在时间 X 结束,那么你可以立刻进行在时间 X 开始的下一份工作。示例 1:示例 2:示例 3:提示:

2021-01-31 15:52:30 149

原创 165. 比较版本号

1.题目描述给你两个版本号 version1 和 version2 ,请你比较它们。版本号由一个或多个修订号组成,各修订号由一个 ‘.’ 连接。每个修订号由 多位数字 组成,可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0 ,下一个修订号下标为 1 ,以此类推。例如,2.5.33 和 0.1 都是有效的版本号。比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较 忽略任何前导零后的整数值 。也就是说,修订号 1 和修

2021-01-30 23:00:23 151

原创 415. 字符串相加

1.题目描述给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。提示:num1 和num2 的长度都小于 5100num1 和num2 都只包含数字 0-9num1 和num2 都不包含任何前导零你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式2.思路1.设定 i,j 两指针分别指向 num1,num2 尾部,模拟人工加法;2. 计算 sum = n1 + n2 + carry,并将当前位 sum % 10 添加至 res 头部;3.

2021-01-26 10:47:57 57

原创 767. 重构字符串

1.题目描述给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。若可行,输出任意可行的结果。若不可行,返回空字符串。示例 1:示例 2:注意:S 只包含小写字母并且长度在[1, 500]区间内。2.思路1.如果要使得两相邻的字符不同,那么出现次数最多的那个数的数量必须满足下面条件,如下图所示,比如下面的a是出现次数最多的2.这个时候a的数量已经达到了临界值,如果再多一个 a ,那么至少有两个 a 是相邻的。所以这里出现次数最多的那个字符数量的临界值是threshol

2021-01-20 16:57:30 77

原创 166. 分数到小数

1.题目描述给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数 。如果小数部分为循环小数,则将循环的部分括在括号内。如果存在多个答案,只需返回 任意一个 。对于所有给定的输入,保证 答案字符串的长度小于 104 。示例 1:示例 2:示例 3:示例 4:示例 5:2.思路小数部分如果余数重复出现两次就表示该小数是循环小数。转换为long long防止溢出处理正负号,一正一负取负号分子分母全部转换为正数获得小数

2021-01-20 16:11:17 114

原创 516. 最长回文子序列

1.题目描述给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s 的最大长度为 1000 。示例 1:输入:输出:一个可能的最长回文子序列为 “bbbb”。示例 2:输入:一个可能的最长回文子序列为 “bb”。提示:1 <= s.length <= 1000s 只包含小写英文字母2.思路(动态规划)状态:dp[i][j] 表示 s 的第 i 个字符到第 j 个字符组成的子串中,最长的回文序列长度是多少。转移方程:如果 s 的第 i

2021-01-12 21:59:16 125

原创 349. 两个数组的交集

1.题目描述给定两个数组,编写一个函数来计算它们的交集。示例 1:示例 2:说明:1.输出结果中的每个元素一定是唯一的。2.我们可以不考虑输出结果的顺序。2.方法1分别遍历两个数组并用set保存每个数组的元素,元素较少的set记为s1,元素较多的set记为s2,遍历s1并查找当前遍历的元素是否存在于s2中,如果存在就加入结果数组。3.代码class Solution {public: vector<int> intersection(vector<int&

2021-01-12 16:05:58 74

原创 1636. 按照频率将数组升序排序

1.题目描述给你一个整数数组 nums ,请你将数组按照每个值的频率 升序 排序。如果有多个值的频率相同,请你按照数值本身将它们 降序 排序。请你返回排序后的数组。示例 1:示例 2:示例 3:提示:1 <= nums.length <= 100-100 <= nums[i] <= 1002.思路使用哈希表保存数组每个元素的频次,然后根据频次升序排序,如果频次一样就根据元素值降序排序。3.代码class Solution {public: ve

2021-01-09 19:51:31 400 1

原创 25. K 个一组翻转链表

1.题目描述给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->4->5说明:你的算法只能使用常数的额外空间。你不能只是单纯的改变节点内部的

2021-01-09 19:00:19 185

原创 470. 用 Rand7() 实现 Rand10()

1.题目描述已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。不要使用系统的 Math.random() 方法。示例 1:示例 2:示例 3:提示:rand7 已定义。传入参数: n 表示 rand10 的调用次数。进阶:rand7()调用次数的 期望值 是多少 ?你能否尽量少调用 rand7() ?2.思路要从 rand7() 到 rand10(),也要求是等概率的,那只要我们把小的数映射到

2021-01-09 14:41:40 218

原创 59. 螺旋矩阵 II

1.题目描述给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例:2.思路生成一个 n×n 空矩阵 res,随后模拟整个向内环绕的填入过程:1.定义当前左右上下边界 left,right,top,bottom,初始值 num = 1,迭代终止值 end = n * n;2.当 num <= end时,始终按照 从左到右 从上到下 从右到左 从下到上 填入顺序循环,每次填入后:  执行 num += 1:得到下一个需要填入的数字;  

2021-01-09 13:22:50 104

原创 85. 最大矩形

给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。示例 1:示例 2:示例 3:示例 4:示例 5:2.思路1.如果只有一行,把每个格子中的数据看成是高度,那么就是 [84. 柱状图中最大的矩形]2.如果只有两行,我想得到第二行中所有数据的高度第二行中数据是 1 ,如果上面第一行也是 1 ,高度就是 2 ,否则是 1第二行中数据是 0 ,那么不管第一行是什么,高度都是 03.因此,遍历每一行时,都能够得到

2021-01-02 18:57:54 92

原创 win10远程连接服务器jupyter notebook

1 服务端配置先对服务器进行基本的环境安装,如:Anaconda环境等。1.1 jupyter配置jupyter notebook可以非常方面的进行数据分析,数据可视化等,对于远程连接服务器是一大福音,并且在进行模型训练的时候可以寄存中间的结果变量,不需要每次运行都要重新加载数据进行处理或者重新进行模型训练,非常节省时间。1.1.1 安装jupyter并生成配置文件使用清华镜像源可以提升安装包的下载速度,从地址:https://mirrors.tuna.tsinghua.edu.cn/anacon

2020-12-28 11:14:03 552

原创 237. 删除链表中的节点

1.题目描述请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。现有一个链表 – head = [4,5,1,9],它可以表示为:2.思路方法:与下一个节点交换从链表里删除一个节点 node 的最常见方法是修改之前节点的 next 指针,使其指向之后的节点。因为,我们无法访问我们想要删除的节点之前的节点,我们始终不能修改该节点的 next 指针。但是,我们可以把想要删除的节点的值替换为它后面节点中的值,然后删除它之后的节点。因为我们知道要删

2020-10-19 11:39:55 118

原创 单链表的选择排序

1.题目描述给定一个无序单链表,实现单链表的选择排序(按升序排序)。示例12.思路节点p为已排序链表,节点q为未排序区链表,每次循环找到未排序区的最小值接到已排序区后面。3.代码/** * struct ListNode { * int val; * struct ListNode *next; * }; */class Solution {public: /** * * @param head ListNode类 the head node

2020-10-10 16:39:35 1353

原创 将字符串转化为整数

1.题目描述实现函数 atoi 。函数的功能为将字符串转化为整数提示:仔细思考所有可能的输入情况。这个问题没有给出输入的限制,你需要自己考虑所有可能的情况。示例12.思路1.处理空字符串2.忽略前置空格3.保存符号4.处理非法输入5.处理溢出3.代码class Solution {public: int atoi(const char *str) { int idx = 0; int sign = 1; int val = 0

2020-10-09 20:27:42 843

原创 有序数组中不重复元素的个数

1.题目描述给定一个有序数组,请算出平方后的数组有多少个不相同的数字。例子,[-1,3,3],返回结果 2.例子,[-1,-1,1,1],返回结果 1.2.思路使用双指针,对left和right的绝对值进行比较,如果不相等,那么绝对值大的一边进行收缩,并且不相等的数加一,但是要记录一下这个数的绝对值,这样碰到相同的可以越过去。比如[-1,3,3],一开始right绝对值为3,left绝对值为1,不相等,res为1,记录pre为3,右边向里面收缩一位,然后right绝对值还是3,left绝对值为1,

2020-10-07 17:29:48 1209 2

原创 面试题 17.24. 最大子矩阵

1.题目描述给定一个正整数、负整数和 0 组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。注意:本题相对书上原题稍作改动示例:说明:1 <= matrix.length, matrix[0].length <= 2002.思路需要将二维转化为一维,对于矩阵的每一列,我们将其加在一起

2020-09-28 18:37:55 235

原创 202. 快乐数

1.题目描述编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。示例:2.思路使用 “快慢指针” 思想,找出循环:“快指针” 每次走两步,“慢指针” 每次走一步,当二者相等时,即为一个循环周期。此时,判断是不是因为 1 引起的循环,是的话就是

2020-09-27 23:41:10 65

原创 190. 颠倒二进制位

1.题目描述颠倒给定的 32 位无符号整数的二进制位。示例 1:示例 2:2.思路分治策略,通过掩码将 32 位整数划分成具有较少位的块,然后将每个块反转,最后将每个块的结果合并得到最终结果。3.代码class Solution {public: uint32_t reverseBits(uint32_t n) { n = (n >> 16) | (n << 16); n = ((n & 0xff00ff00) &

2020-09-26 22:33:47 119

空空如也

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

TA关注的人

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