![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
【刷题】刷题日记
文章平均质量分 66
算法题思路与讲解
古正风
与其心生敬佩,不如自己便是那样。
展开
-
【C++】【刷题】实战应用——海量数据的查重及top K问题
基本单位换算:1G=》1024*1024*1024=》1 000 000 000=》10亿10亿整数=》1G整数=》1G*4字节=》4GB(32位int占4字节,int*4字节,64位int4字节,int*8字节)50亿整数=》5G整数=》5G*4字节=》20GB(32位)海量数据查重/去重有一组IP地址、URL、字符串,哪些有重复,重复了多少次,去除重复的考虑类似这种问题,主要有以下思路:哈希表 + 分治思想:哈希表增删查O(1),但是占空间大,10亿个整数,大约占4GB,用哈希表存k.原创 2022-04-27 13:19:14 · 543 阅读 · 2 评论 -
【C++】【刷题】实战应用——大数加减
题目背景大数用内置类型是存不下的,32位操作系统中int最大存储2^31-1 = 2147483647,long:2147483648 ,logn long:9223372036854775807所以一般用字符串来存储非常大的数据请实现以下类的方法,完成大数的加减法#include <iostream>#include <string>#include <algorithm>using namespace std;//题目:请实现以下类的方法,完原创 2022-04-27 13:16:42 · 433 阅读 · 2 评论 -
【C++】【刷题】实战应用——DFS与BFS搜索迷宫路径及迷宫最短路径
题目背景请输入迷宫的行列数(例如:5 5)请输入迷宫的路径信息(0表示可以走,1表示不能走):0 0 0 1 11 0 0 0 11 1 0 1 11 1 0 0 11 1 1 0 0迷宫路径搜索中...>>>如果没有路径,直接输出<<<不存在一条迷宫路径!>>>如果有路径,直接输出<<<* * * 1 11 0 * 0 11 1 * 1 11 1 * * 11 1 1 * *深度优先遍历进行搜索DF原创 2022-04-27 13:13:41 · 643 阅读 · 2 评论 -
【牛客】面试必刷TOP101——01链表
BM1 反转链表描述给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。数据范围: 0≤n≤1000要求:空间复杂度 O(1),时间复杂度 O(n) 。如当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。以上转换过程如下图所示:示例1输入:{1,2,3}返回值:{3,2,1}示例2输入:{}返回值:{}说明:空链表则输出空我的思路:初始化:3个指针原创 2022-04-21 15:54:13 · 708 阅读 · 2 评论 -
每日LeetCode一道题————螺旋矩阵
每日一题题目说明59.螺旋矩阵 II给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。示例 1:输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2:输入:n = 1输出:[[1]]算法思路模拟(按层模拟):定义四个指针left,right,top,bottom分别指向矩阵四角,具体如图所示:定义一个数字num初始值为1。然后按照螺旋状依次把num值输入,然后num+原创 2021-11-10 16:53:43 · 189 阅读 · 2 评论 -
每日LeetCode一道题————合并区间
每日一题题目说明56.合并区间以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例 1:输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入:interv原创 2021-11-07 15:40:19 · 120 阅读 · 2 评论 -
每日LeetCode一道题————颜色分类
每日一题题目说明75.颜色分类给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。示例 1:输入:nums = [2,0,2,1,1,0]输出:[0,0,1,1,2,2]示例 2:输入:nums = [2,0,1]输出:[0,1,2]示例 3:输入:nums = [0]输出:[0]示例 4:输入:nums = [1]输出:[1]作者原创 2021-11-07 14:53:06 · 178 阅读 · 2 评论 -
每日LeetCode一道题————罗马数字转整数
每日一题题目说明13.罗马数字转整数罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。27 写做 XXVII,原创 2021-11-06 15:16:53 · 262 阅读 · 2 评论 -
每日LeetCode一道题————合并两个有序链表
每日一题题目说明21.合并两个有序链表将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]算法思路方法一:递归如果 l1 或者 l2 一开始就是空链表 ,那么没有任何操作需要合并,所以我们只需要返回非空链表。否则,原创 2021-11-05 16:40:17 · 165 阅读 · 0 评论 -
每日LeetCode一道题————有效的括号(括号匹配)
每日一题题目说明20.有效的括号(括号匹配)给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:tr原创 2021-11-05 16:11:06 · 5192 阅读 · 6 评论 -
每日LeetCode一道题————寻找两个正序数组的中位数
每日一题题目说明4.寻找两个正序数组的中位数给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5示例原创 2021-11-05 14:55:23 · 228 阅读 · 2 评论 -
每日LeetCode一道题————字符串转换整形(atoi)
每日一题题目说明8.字符串转换整数 (atoi)请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。原创 2021-11-04 17:06:30 · 113 阅读 · 2 评论 -
每日LeetCode一道题————整数转罗马数字
每日一题题目说明12.整数转罗马数字罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。27 写做 XXVII,原创 2021-11-03 14:45:18 · 4175 阅读 · 5 评论 -
每日LeetCode一道题————Z 字形变换
每日一题题目说明6.Z 字形变换将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows原创 2021-11-03 14:13:06 · 123 阅读 · 2 评论 -
每日LeetCode一道题————最长回文子串
每日一题题目说明5.最长回文子串给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”作者:LeetCode-Solution链接:https://leetcode-cn.com/problems/longest-palindromic-substri原创 2021-11-02 15:10:17 · 394 阅读 · 2 评论 -
每日LeetCode一道题————旋转图像(旋转矩阵)
每日一题题目说明48.旋转图像给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]]示例 2:输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]原创 2021-11-01 15:36:39 · 256 阅读 · 3 评论 -
每日LeetCode一道题————跳跃游戏
每日一题题目描述45.跳跃游戏 II给你一个非负整数数组 nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。示例 1:输入: nums = [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。示例 2:输入: nums = [2,3,0,1,4原创 2021-11-01 14:35:29 · 287 阅读 · 2 评论 -
每日LeetCode一道题————有效的数独
每日一题题目描述36.有效的数独请你判断一个 9x9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用 ‘.’ 表示。注意:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。示例 1:输入:board =[[“5”,“3”,原创 2021-10-30 17:19:04 · 4101 阅读 · 2 评论 -
每日LeetCode一道题————搜索旋转排序数组
每日一题题目说明33.搜索旋转排序数组整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你原创 2021-10-30 17:07:53 · 136 阅读 · 2 评论 -
每日LeetCode一道题————在排序数组中查找元素的第一个和最后一个位置
每日一题题目说明34.在排序数组中查找元素的第一个和最后一个位置给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例 2:输入:nums = [5,7,7,8,8,10], target =原创 2021-10-29 18:56:06 · 127 阅读 · 2 评论 -
每日LeetCode一道题————四数之和
每日一题题目说明18.四数之和给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):0 <= a, b, c, d < na、b、c 和 d 互不相同nums[a] + nums[b] + nums[c] + nums[d] == target你可以按 任意顺序 返回答案 。示例 1:原创 2021-10-27 18:28:20 · 479 阅读 · 2 评论 -
每日LeetCode一道题————无重复字符的最长子串
每日一题题目说明3.无重复字符的最长子串给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必原创 2021-10-26 22:48:36 · 153 阅读 · 2 评论 -
每日LeetCode一道题————最接近的三数之和
每日一题题目说明16.最接近的三数之和给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。作者:LeetCode-Solution链接:https://leetcode-cn.com/problems/原创 2021-10-25 19:48:51 · 179 阅读 · 2 评论 -
每日LeetCode一道题————三数之和
每日一题题目说明15.三数之和给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]来源:力扣(LeetCode)链接:https:/原创 2021-10-25 18:11:14 · 191 阅读 · 2 评论 -
每日LeetCode一道题————两数相加(链表)
每日一题题目说明2.两数相加给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9原创 2021-10-24 12:09:21 · 140 阅读 · 2 评论 -
每日LeetCode一道题————两两交换链表中的节点
每日一题题目说明24.两两交换链表中的节点给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:输入:head = [1, 2, 3, 4]输出:[2, 1, 4, 3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]作者:LeetCode-Solution链接:https://leetcode-cn.com/problems/swap-nodes-in-p原创 2021-10-24 10:38:58 · 113 阅读 · 2 评论 -
每日LeetCode一道题————下一个排列
每日一题题目说明31.下一个排列实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列(即,组合出下一个更大的整数)。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须 原地 修改,只允许使用额外常数空间。示例 1:输入:nums = [1, 2, 3]输出:[1, 3, 2]示例 2:输入:nums = [3, 2, 1]输出:[1, 2, 3]示例 3:输入:nums = [1, 1, 5]输出:[1, 5, 1]示原创 2021-10-23 19:32:08 · 163 阅读 · 2 评论 -
每日LeetCode一道题————盛最多水的容器
每日一题11.盛最多水的容器题目说明:盛最多水的容器给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示原创 2021-10-23 18:56:42 · 122 阅读 · 2 评论