自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 74. 搜索二维矩阵【二分法】【C++】

1的一维数组,最中间的数mid是5((0+12-1) / 2 == 5),对应二维数组行数1(5 / 4==1),列数5(5 % 4 == 1)。输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13。输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3。本题是二分搜索的变形,常规的二分搜索是一个一维数组,而本题是一个。,但是依然可以使用一维数组的思路,

2024-07-05 23:44:18 410

原创 203. 移除链表元素【链表】【C++】

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。就是跳过下一个的节点,直接和下一个的下一个节点相连,但需要注意,C++需要手动释放内存。输入:head = [1,2,6,3,4,5,6], val = 6。输入:head = [7,7,7,7], val = 7。列表中的节点数目在范围 [0, 104] 内。输入:head = [], val = 1。时间复杂度O(n):遍历一遍链表。输出:[1,2,3,4,5]

2024-06-27 10:06:20 325

原创 904. 水果成篮【滑动窗口】【C++】

考虑滑动窗口,用一个哈希表存贮窗口内出现数字的次数,当哈希表出现的个数为3时,窗口左侧收缩,并且对应的个数减1,如果某个数字的次数为0时,删除对应的元素。输入:fruits = [3,3,3,1,2,1,1,2,3,3,4]如果从第一棵树开始采摘,则只能采摘 [1,2] 这两棵树。解释:可以采摘 [1,2,1,1,2] 这五棵树。输入:fruits = [1,2,3,2,2]解释:可以采摘 [2,3,2,2] 这四棵树。输入:fruits = [0,1,2,2]解释:可以采摘 [1,2,2] 这三棵树。

2024-06-26 20:33:38 328

原创 844. 比较含退格的字符串【栈】【C++】

使用两个指针分别指向两个字符串的末尾,从后往前遍历字符串,遇到’#‘就删除一个元素,直到当前没’#',然后比较当前字母。生成去掉’#‘后的字符串:使用栈(字符串来模拟)来完成,遇到’#‘且栈非空就出栈,不是’#'就入栈。分别生成两个字符串,然后比较两个字符串是否相等(时间复杂度O(n))。输入:s = “ab#c”, t = “ad#c”输入:s = “ab##”, t = “c#d#”解释:s 会变成 “c”,但 t 仍然是 “b”。输入:s = “a#c”, t = “b”

2024-06-26 11:04:26 297

原创 283. 移动零【快慢指针】【C++】

数组、链表等线性结构删除元素一般都是用快慢指针的方法,快指针一般用于遍历,对于满足要求的元素赋值给慢指针。给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。类似,第一步都是删除元素,只是本题多了一步,在数组后面补零。请注意 ,必须在不复制数组的情况下原地对数组进行操作。输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]空间复杂度O(1):常数个变量。输入: nums = [0]时间复杂度O(n):遍历数组。

2024-06-26 10:07:22 343

原创 26. 删除有序数组中的重复项【双指针】【C++】

给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2。输入:nums = [0,0,1,1,1,2,2,3,3,4]

2024-06-26 09:47:53 184

原创 383. 赎金信【哈希表】【C++】

然后遍历magazine 数组,在哈希表上减,如果出现了负数则为返回false。给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。输入:ransomNote = “aa”, magazine = “aab”输入:ransomNote = “aa”, magazine = “ab”magazine 中的每个字符只能在 ransomNote 中使用一次。输入:ransomNote = “a”, magazine = “b”

2024-06-26 09:35:57 209

原创 242. 有效的字母异位词【哈希表】【C++】

分别用两个哈希表存每个字母出现的次数:即key–字母,value–出现次数,如果两个哈希表相同则是异位词。不需要两个哈希表,第二个出现的字母在第一个哈希表上减,最后再遍历哈希表,都为0则是异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。输入: s = “anagram”, t = “nagaram”输入: s = “rat”, t = “car”空间复杂度O(1):无额外空间。

2024-06-25 23:54:02 190

原创 122. 买卖股票的最佳时机 II【C++】【贪心法】【动态规划法】

思路:由于可以当天卖出后当天买入,所以我们可以进行拆分如:price[3] - price[0] = (price[3] - price[2]) + (price[2] - price[1]) + (price[1] - price[0])解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。区别在于能不能多次购买,所以昨天不持有股票而今天买入股票为dp[i - 1][1] - prices[i]。

2024-06-12 15:51:11 420

原创 买卖股票的最佳时机【C++】

买卖股票的最佳时机有很多变形题,他们有的可以暴力、贪心等方法求解,但是都可以用动态规划的思路进行求解,需要重点掌握。

2024-06-11 10:48:47 658

原创 343. 整数拆分【贪心】【动态规划】【C++】

想要拆分的整数乘积最大,尽量多拆成几个整数,但拆成几个整数合适?不能继续拆分的整数我们从小到大分析,2和3拆分会变小,4拆分不变。选择不能拆分的最大值3作为拆分的最小单元,但剩下的4不能拆分为3*1。给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。8 = 3 + 3 + 2(不能3 + 5,5拆分会变大)解释: 2 = 1 + 1, 1 × 1 = 1。输入: n = 10。

2024-06-06 20:31:57 347

原创 不同路径相关问题【C++】【动态规划】

不同于第一题,本题加入了障碍,但是(i,j)的路径数依旧由(i-1,j)和(i,j-1)有关,所以依旧考虑使用动态规划方法,只是需要修改递归公式等内容。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]现在考虑网格中有障碍物。输入:obstacleGrid = [[0,1],[0,0]]

2024-06-01 14:29:22 917

原创 爬楼梯相关问题

给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。到第i层的花费与i-1层的花费和i-2层的花费有关,因此本题也可以尝试使用动态规划方法。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。i-1层的最小花费和i-2层最小花费的最小值。只循环使用了3个变量,因此可以不用n维数组。解释:你将从下标为 1 的台阶开始。解释:有两种方法可以爬到楼顶。解释:有三种方法可以爬到楼顶。

2024-05-30 21:02:05 895

原创 斐波那契数【C++】【多解法】

递归法:从上到下计算动态规划:从下到上计算。

2024-05-29 10:42:32 409

原创 151. 反转字符串中的单词【C++】

输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。s 中使用至少一个空格将字符串中的 单词 分隔开。解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。给你一个字符串 s ,请你反转字符串中 单词 的顺序。解释:反转后的字符串中不能存在前导空格和尾随空格。输入:s = “a good example”

2024-05-28 11:24:50 237

原创 541. 反转字符串 II【C++】

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。如果剩余字符少于 k 个,则将剩余字符全部反转。输入:s = “abcdefg”, k = 2。输入:s = “abcd”, k = 2。输出:“bacdfeg”s 仅由小写英文组成。

2024-05-28 10:21:54 304

原创 打家劫舍【动态规划】

因为当前值与以前值有关,所以可以尝试动态规划。动态规划每道题都可以用这5步进行解决,每一步都很重要。代码随想录。

2024-05-22 13:37:13 246 1

原创 344.反转字符串(C++)

使用reverse()函数直接反转,但这题比较简单,不推荐使用。

2024-05-17 09:10:38 237 1

原创 pytorch的Dataset和Dataloader的简单使用

其余很多参数不常用,比如设置采样的规则、数据集不够分时最后一个batch丢不丢等等。Dataset类:可以根据id索引出单个的数据,还可以进行一些预处理。batch_size:多少个数据组成一个整体,越大对内存要求更高。dataset:传入训练集或者验证集(Dataset对象)。shuffle:训练集一般设为True,验证集为False。,可以自己添加一些预处理的函数,比如划分训练集、验证集。Dataloader类:将数据集进行打包成迭代器。:将数据集按batch进行打包。

2024-05-16 20:53:16 263

原创 JZ81 调整数组顺序使奇数位于偶数前面(二)(C++)

3.再次遍历原数组,是奇数就从res数组的下标0开始赋值,偶数就放在index开始赋值。2.第一个指针向后移动,遇到偶数就停下,第二个指针向前移动到奇数就停下,然后交换两个数。1.然后使用双指针,一个指向数组首,一个指向数组尾。3.重复步骤3,知道第一个指针大于第二个指针。1.首先遍历一遍数组,确定奇数个数index。2.创建一个结果数组res。

2024-05-14 20:22:37 167 2

原创 977.有序数组的平方(C++)

两侧指针的平方一定大于中间的平方,所以两侧向中间以动就行。时间复杂度:快速排序,O(nlogn)空间复杂度O(n):创建了一个辅助数组。时间复杂度O(n):遍历一遍数组。空间排序:原数组操作,O(1)

2024-05-14 09:08:21 206 1

原创 数组:移除元素(C++)

遍历数组每一个元素,如果这个值和目标值相等,则删除该元素。但是数组因为是连续的,所以需要遍历的将后一个值赋给前一个值。因此有两层遍历,时间复杂度O(n^2)、空间复杂度O(1)对于数组、链表、字符串等数据结构,我们常常使用双指针的方法。双指针中的快慢指针最为合适,其中慢指针指向当前马上添加的位置,快指针去遍历数组。不能i < nums.size(),因为要遍历完原数组长度,而不是变化中的数组。删除数组元素也可以使用erase方法,时间复杂度是一样的。

2024-05-13 15:00:50 706

原创 54. 螺旋矩阵

首先怎么判断可能剩一行还是一列?行数<列数就是剩一行,大于也同理。等于可以任意归为一类,比如3*3的矩阵。,依然同样的模拟方式,但区别是行数和列数不等。比如最后可能剩一列或者一行,需要单独处理。其次怎么判断是否有剩余?取行数和列数的最小值,如果满足以下就说明有剩,需要单独处理。

2024-05-13 14:35:47 211

原创 59. 螺旋矩阵 II(C++)

这道题不涉及算法,只是进行模拟一个过程。但是在模拟时会出现很多问题,比如:循环转圈多少次?、边界怎么处理等等。每条边的终点由一个变量控制,因为它随着圈数而改变;如果n为奇数还需要单独处理中间位置。

2024-05-13 11:28:24 171

原创 二分查找以及相关问题(c++)

本文简单介绍了二分查找以及几种变形问题,关键就是如何缩小查询的范围。希望大家对二分法有更深的理解。

2024-05-10 21:14:38 265

原创 翻转二叉树(c++)

分析二叉树问题可以先画个图,理清思路。二叉树翻转4种遍历方式都可以(都是O(n)、O(n)复杂度),唯独中序有变化,不方便。

2024-05-09 15:44:08 293 1

原创 合并两个有序链表(c++)

思路:设置一个哨兵节点(head节点),方便处理首元节点。用两个指针分别指向头部,用head指向val较小的那个节点,较小的节点并往后移。直到某个链表遍历完成,将另一个链表剩余部分直接连接即可。时间复杂度O(n):同样最坏遍历2n个节点。时间复杂度O(n):最坏遍历2n个节点。空间复杂度O(n):栈的最大深度为2n。空间复杂度O(1):几个常量指针。

2024-05-07 10:40:28 155 1

原创 206.反转链表

定义两个指针,pre指针初始化为null,cur初始化为首元节点。由cur指向pre指针,再不断同时遍历链表,就能实现链表反转。但是如果直接将cur指向pre以后,原本cur的下一个节点就会断开,所以需要用临时指针保存。

2024-05-06 19:06:24 127

原创 python将字典数据写入csv文件中

writer = csv.writer(),获取一个文件写入器对象,再通过writer.writerow()函数写入数据。同理csv.reader()可以读取csv文件。通过row_exist 参数来实现,只有第一次加入的数据时才需要加入字典的key值。

2024-05-06 16:57:36 485

原创 python获取文件夹下需要的文件

]:匹配指定范围内的字符,如[0-9]匹配数字,[a-z]匹配小写字母;**:匹配所有文件、目录、子目录和子目录里的文件(3.5版本新增);其中iglob()是以迭代器的形式返回,list()转为列表形式。所以它用列表的形式返回所有满足条件的文件。*:匹配0个或多个字符;

2024-05-06 16:28:49 229

原创 142. 环形链表 II

思路:我们操作链表其实是在操作指针,而无环链表的指针地址不会重复。因此可以用一个哈希表来判断每个节点是否出现过,当第一次出现重复时,说明找到入口点,如果到链表结尾都没有出现重复则说明该链表无环。思路:我们设置一个快指针,每次走两步,一个慢指针,一次走一步。空间复杂度:O(1):几个指针时常量。空间复杂度O(n),哈希表辅助空间。时间复杂度:O(n):遍历链表。时间复杂度O(n),遍历链表。

2024-05-06 15:43:45 408

空空如也

空空如也

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

TA关注的人

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