自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 智谱GLM Api接口适配langchain OpenAI llamaindex的openAI接口

动机OpenAI充值比较麻烦,且访问不是那么方便。因此想用国内的api的去调试和测试一个任务。但是很多教程都是以openAI的接口为例子的,因此学习起来就不那么方便。本文参考了,终于调试成功了!!如何用接口在langchain 和 llamaindex中使用chatGLM api。

2024-07-25 15:28:15 1942

原创 day46 代码随想录 单调栈难题 面试高频题

这就回到了我们单调栈的范围了。此时栈中的栈顶元素就是凹槽的左边位置,而当前遍历的元素就是凹槽的右边位置,此时我们就可以通过这三个元素来进行体积的计算。另外,我们对这个的求法是,对于当前遍历到的柱子,我们是要求它左边的最大元素,还有右边的最大元素。首先对于矩阵求面积,单个矩阵也可以是面积,如果有跨度,那么其实两个矩阵之间高度最小的矩阵作为高度,矩阵之间的下标差作为宽度,这样来计算面积。如果我们按照列进行计算结雨水,我们需要知道当前柱子中左边柱子的最高高度和右边柱子的最高高度,就可以计算当前位置的雨水面积。

2024-09-03 10:57:23 677

原创 day45 代码随想录 | 单调栈考点

因为只有递增的时候,栈里要加入一个元素i的时候,才知道栈顶元素在数组中右面第一个比栈顶元素大的元素是i。即:如果求一个元素右边第一个更大元素,单调栈就是递增的,如果求一个元素右边第一个更小元素,单调栈就是递减的。给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,对应位置输出 -1。2. 单调栈里面的元素是递增的,还是递减的?

2024-09-02 17:18:38 874

原创 day 44 代码随想录 | 回文串个数 最长回文字串 最长回文子序列

我们在判断字符串S是否是回文,那么如果我们知道 s[1],s[2],s[3] 这个子串是回文的,那么只需要比较 s[0]和s[4]这两个元素是否相同,如果相同的话,这个字符串s 就是回文串。因此,我们的dp数组是二维的。布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。说明s[i]和s[j]的同时加入 并不能增加[i,j]区间回文子序列的长度,那么分别加入s[i]、s[j]看看哪一个可以组成最长的回文子序列。

2024-08-29 11:14:21 916

原创 day43 代码随想录 | 动态规划 大BOSS 子序列到编辑距离

给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。这个题是一个简单题,可以用双指针,也可以动态规划,也是入门编辑距离的入门题,只涉及删除操作。双指针一个指针指向s 一个指针指向t t指针一个移动,s指针如果遇到相等就移动如果s指针能移动到末尾,说明就可以了动态规划1. dp数组定义使用二维dp数组。

2024-08-28 13:52:21 734

原创 day42 代码随想录 | 子序列问题 面试高频题

如果不相等 就看看text1[0, i - 2]与text2[0, j - 1]的最长公共子序列 和 text1[0, i - 1]与text2[0, j - 2]的最长公共子序列,取最大的。举个例子A[0]如果和B[0]相同的话,dp[1][1] = dp[0][0] + 1,只有dp[0][0]初始为0,正好符合递推公式逐步累加起来。但dp[i][0] 和dp[0][j]要初始值,因为 为了方便递归公式dp[i][j] = dp[i - 1][j - 1] + 1;注意这个题是子序列,并不要求连续。

2024-08-27 14:28:36 939

原创 day41 代码随想录 | 股票买卖的最佳时机

dp[i][1] = max(dp[i-1][1], prices[i] + dp[i-1][0]) 要么第i天不交易,第i天交易的化就需要减去前面i-1买入的价格。一定是选最大的,所以 dp[i][1] = max(dp[i-1][0] - prices[i], dp[i - 1][1]);那么dp[i][1]究竟选 dp[i-1][0] - prices[i],还是dp[i - 1][1]呢?dp[i][1] 代表第i天不持有股票,说明卖了,可以是第i天卖的,也可使第i-1天。

2024-08-26 10:44:48 1064

原创 day 39 代码随想录 | 打家劫舍 动态规划

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。如果不偷当前节点,那么左右孩子就可以偷,至于到底偷不偷一定是选一个最大的,所以:val2 = max(left[0], left[1]) + max(right[0], right[1]);每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

2024-08-25 22:25:35 709

原创 day38 代码随想录 | 动态规划 完全背包问题 零钱兑换 完全平方数 单词拆分

dp[j] = min(dp[j], dp[j-coins[i]]+1) 啥意思呢,其实要么我用当前,要么我减去一个币值 然后+1。dp[j] = dp[j] or dp[j-len(s[j:i]) and s[j:i] == word] word就是dict。如果dp[j]为true,且[j, i]这个区间的字串在dic种出现过,那么dp[i]就为true了。但是dp[0] 不能为infinite,dp[0] 应该赋值为0,也好理解,我不需要硬币嘛。n就是我们的背包容量,物品就是小于n的完全平方数。

2024-08-23 10:49:45 729

原创 day37 代码随想录 | 完全背包问题 组合总和 II 零钱兑换II 爬楼梯(进阶版)

首先dp[0]一定要为1,dp[0] = 1是 递归公式的基础。当 m = 2,n = 3 时,n = 3 这表示一共有三个台阶,m = 2 代表你每次可以爬一个台阶或者两个台阶。第i件物品的重量是weight[i],得到的价值是value[i]。如果物品是内循环,容量是外循环,那么你就是将 2 2 1 和 1 2 2 当初两种不同的方式。完全背包问题是在0-1背包问题的上的基础得来的,区别在于在于物品可以无限制的重复选择。如果物品是内循环,算的是排列数,背包的每一个值,都会过物品。

2024-08-22 14:16:02 806

原创 day36 代码随想录 | 动态规划 目标和 一和零

所以递推公式:dp[i][j] = max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);dp[j] += dp[j-nums[i]] 这是个累加公式,即dp[3] = dp[2] + dp[1] 我们是用累加。最多有 5 个 0 和 3 个 1 的最大子集是 {"10","0001","1","0"} ,因此答案是 4。dp[i][j] 就可以是 dp[i - zeroNum][j - oneNum] + 1。我们要求的是,如果要装满left大小的背包,

2024-08-21 15:10:46 793

原创 day 35 代码随想录 | 0-1背包问题 分割等和子集 最后一块石头的重量II

由dp[i - 1][j - weight[i]]推出,dp[i - 1][j - weight[i]] 为背包容量为j - weight[i]的时候不放物品i的最大价值,那么dp[i - 1][j - weight[i]] + value[i] (物品i的价值),就是背包放物品i得到的最大价值。在使用二维数组的时候,递推公式:dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);在0-1背包问题中,都可以遍历,在二维数组中。

2024-08-20 13:33:30 599

原创 day34 代码随想录 | 不同路径 整数拆分

dp[i] 拆分 假设我们进行遍历从1到j j是小于i//2 + 1的,那么得到值可以是j*(i-j) 表明拆分为两个数,那么如果拆分多个,则是j * dp[i-j] 我们需要从这里面选择最大的。你走到dp[i][j] 要么从dp[i-1][j] 向下移动一步 要么从dp[i][j-1]向右一步。因此dp[i][j] = dp[i-1][j] + dp[i][j-1]dp[i][j]就是代表从(0,0)到[i,j]的路径数量。首先,dp[i][j] 就是障碍,那么其实dp[i][j] 就是应该为0。

2024-08-19 10:55:48 945

原创 day32 代码对象录 | 动态规划 斐波拉契 爬楼梯

首先,你走到每一步,不外部是前一步走一步到的,或者前一步走两步到的。因为,你到当前步的方数数量就等于dp[i-1] 走一步 加上dp[i-2]走两步的方法数。即dp[i] = dp[i-2] + dp[i-1]3. dp初始化,因为刚开始第一步和第二步楼梯可以初始化为0 dp[0] = 0, dp[1] = 0,因为我还没开始爬。3. 初始化.dp[1] = 1 dp[2] = 1. dp[0] 不用赋值,没有意义。这里dp[i]的每个值就是F(i)的值,递推公司已经给了,初始化也给了。

2024-08-18 14:47:08 300

原创 day31 代码随想录 | 单调递增的数字 和 贪心总结

感觉就是没有规律。有些简单得贪心你很容易想到思路有些是就是想不到。多练习 多刷特别是最大子序和。

2024-08-16 16:23:09 262

原创 day30 代码随想录 | 射气球 无重叠区间 划分字母区间 合并区间

说明已经重叠了,我们不需要加箭,但是,此时,我们要更新右边界,我们是找最小的两者右边界,如果不找最小,那么就超过了,你就一个箭射一个求。气球的直径大小就是区间的跨度。核心就是你要找到非重叠的区间范围,遇到非重叠,你就得加箭来射。像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的,因为划分的片段数较少。看下一个右区间是否重叠,如果重叠,我们取最小的右边界。这就需要右排序,如果右边的区间小于下一个左边的区间,说明没有重叠。第二种思路,计算非重叠区间,用总区间减去重叠区间。

2024-08-15 11:19:06 1089

原创 day29 代码随想录 | 加油站 分发糖果 找零 根据身高重建队列

在一条环路上有n个加油站,其中第i个加油站有汽油gas[i]升。你有一辆油箱容量无限的的汽车,从第i个加油站开往第i+1个加油站需要消耗汽油cost[i]升。你从其中的一个加油站出发,开始时油箱为空。给定两个整数数组gas和cost,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回-1。如果存在解,则它是的。这个题呢,我一来都没有想到用暴力法,直接用贪心了。但是我发现我自己暴力法好像都写不出来,因为是环形的。

2024-08-14 13:51:36 921

原创 day28 代码随想录 | 贪心 买卖股票 跳跃游戏 K次取反

随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。这个题怎么用到贪心的思想呢,我们来看最大覆盖范围,如果覆盖范围覆盖了整个数组,就可以。这个题很简单,我们肯定想的就是先转换负数,如果还有次数,我们就转换最小的数。如果负数转换完了,还有次数,且转换完负数的k是奇数,我们减去最小的数!

2024-08-13 15:39:16 1006

原创 day27 代码随想录 | 贪心算法 分发饼干 摆动序列 最大子数组和

1. 如果有重复元素呢,比如1,2,2,2,1。你的指针改怎么移动和判断呢,我们会得到1和2的差值是1 最后一个2和1的差值是-1,但是你指针应该怎么动,当我们遍历到i=1的时候, nums[i] - nums[i-1] = 1 那么后面 i+1-nums[i] = 0 你需要移动i,直到 最后i为最后,你需要保存你之前的那个1的差值,即pre_gap, 然后拿到你的cur_gap进行比较,但是在这之间,cur_gap是等于0的,你不能直接跳过重开,仍需要记录。假设是2,2,5,最终的result为2。

2024-08-12 13:40:19 742

原创 day25 代码随想录 | 非递减子序列 全排列

我们可以用一个set 来保存已经加入过的元素,后面如果继续遍历到,那么就直接跳过,这是对每一层而言,因此在进入for backtracking之前进行初始化,在for循环后面加,保证是在同一层!上面以4767为例做的树状图,还是去重,在同层的问题,同一父节点下,不能再重复使用相同元素。一种错误的想法是1,2 1,3 2,3 123,这是错误的,第一个1可以跟后面的1配对得到1,1 和1,1,1。有重复元素,关键还是在如何去重,对于相同的元素,对于同层而言,必须去重。去重的树状示意图如上所示,跟组合很像。

2024-08-10 11:56:32 397

原创 day24 代码随想录 | 复原ip 地址 子集问题

正好由四个整数(每个整数位于0到255之间组成,且不能含有前导0),整数之间用'.'分隔。给定一个只包含数字的字符串s,用以表示一个 IP 地址,返回所有可能的,这些地址可以通过在s中插入'.'来形成。你重新排序或删除s中的任何数字。你可以按顺序返回答案。这个题和切割字符串相似,只不过判断条件不一样。而且我们切割中止都是切割到末尾就可以结束了。此外,从题目的要求可以看到 s的长度应该在4-12之间,小于或大于这个长度就不可能完成满足条件的ip地址回溯三部曲1. 回溯参数。

2024-08-09 15:53:07 992

原创 day23 代码随想录 | 组合总和 分割回文串

这里就需要去重,思路就是如果前面已经出现过了,我就跳过,比如这里第一个1 已经走完了一个纵向的遍历,当我第二个1的时候就不用走了,那就是 candidates[i] == candidates[i-1]但是如果是横向遍历,i 是从 startIndex 到len()取值,startIndex 固定,i+1,那么,i就会存在i>startindex。但回溯远远没有这么简单,这个i是所有的i都可以吗,我们第一反应是i>0,如果是这样,我就直接跳过。这个题,没有叫你返回所有符合的字串,只是叫你返回分割的方案。

2024-08-08 14:51:29 747

原创 day22 代码随想录 回溯基础| 组合问题 组合之和 电话号码

什么时候达到了终止条件,树中就可以看出,一般来说搜到叶子节点了,也就找到了满足条件的一条答案,把这个答案存放起来,并结束本层递归。示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4] ]为什么用回溯,因为有些问题就只能用穷举,只能暴力搜索,比如组合 100数中选出50个数,你如果用循环,那就要用50个for,你怎么写?示例 2: 输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]]

2024-08-07 14:31:27 689

原创 day21 代码随想录 | 修剪二叉搜索树 有序数组转为二叉搜索树 二叉搜索树转换为累加树

但是,这样是错误的。不能直接返回右子树,因为你不能保证右子树一定所有的值的node都满足大于low,因此,需要对右子树进行递归。不能直接返回右子树,因为你不能保证左子树一定所有的值的node都小于low,因此,需要对左子树进行递归。当node.val < low的时候,由于是二叉搜索树,那么它的左子树一定小于low,右子树可能大于也可能小于low. 就像判断删除一个节点类似,我们可以对node的形式进行讨论。要大于或等于原来的树的node.val的值的和,这就说明我们累加的方向,用从大到小累计。

2024-08-06 10:35:44 660

原创 day20 代码随想录 | 二叉搜索树的插入 二叉搜索树的删除 二叉搜索树的最近公共祖先

这个题和二叉树的最近公共祖先很像,你也可像二叉树那样去做,但是就是没有用到二叉树的性质二叉树的性质可以用来完成剪枝的操作。二叉树搜索树就是,你可以找左边和找右边,根据p,q的value的大小如果 p,q 都小于key的value, 那么就走root.left 都大于,走root.right。否则,就改返回了 此时的root就是该节点。

2024-08-05 14:20:31 865

原创 代码随想录 day18 | 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先

530.二叉搜索树的最小绝对差给你一个二叉搜索树的根节点root,返回。差值是一个正数,其数值等于两值之差的绝对值。这个题很容易想到的一个思路就是 使用中序遍历,将二叉搜索树转换成一个有序数组。最小差值只会在相邻元素之间出现。代码如下常规思路第二种思路 双指针我们是比较相邻的值,可以初始化一个prev指针,和cur指针比较做差,来更新最小绝对值。

2024-08-03 22:28:44 911

原创 day17 代码随想录 | 最大二叉树 合并二叉树 二叉搜索树

合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;如果节点不存在,则返回 NULL。对于根节点,如果都存在,相加val,其中一个为None,就返回另一个。这里要清楚一个概念,二叉搜索树是每个节点都满足 左子树小于根节点,右子树大于根节点。1. 递归参数和返回值 递归参数就是节点和对应的节点列表,返回的是节点。二叉树搜索数的性质就是 左子树的值都小于根节点,右子树的值都大于根节点。通过给定的数组构建最大二叉树,并且输出这个树的根节点。null 的节点将直接作为新二叉树的节点。

2024-08-02 11:20:45 930

原创 代码随想录 day 16 | 树左下角的值 路径总和 中序后序构造二叉树

给定一个二叉树,在树的最后一行找到最左边的值。这个题是左边边的值,并不是左子树,右子树的也可以,不然理解错了。这个题用层序遍历的方式是很简单的,到最后一层,取第一个,就行了。

2024-08-01 16:29:20 438

原创 day15 代码随想录 | 110 平衡二叉树 257 二叉树的所有路径 404 左叶子之和 222 完全二叉树的节点个数

使用完全二叉树的特性,在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。假设父节点是parent. 判断是左叶子,那就是 parent.left and parent.left.left == None and parent.left.right==None。但是,你需要回溯,当你访问到叶子节点,记录之后,需要返回到你的父节点。即使是叶子节点,也返回0,你不能直接加叶子节点,这时的叶子节点无法判断是左叶子。因此你要对节点求和。

2024-07-31 15:40:28 727

原创 day14 代码随想录 | 对称二叉树 二叉树最大深度 二叉树最小深度

关于这个三个leetcode,都可以用递归和迭代的思想去处理。但对于二叉树,优先使用递归更加能体现抽象的过程,还是说的是递归三部曲这个题目看着挺简单,但是有很多细节需要注意。

2024-07-30 14:10:27 862

原创 day13 代码随想录 | 二叉树遍历 翻转二叉树

二叉树,这种结构跟常见的数组、字符串、字典等来说,不是那么好理解。但是二叉树基础的存储方式是链表,树的节点由三部分组成,一个指向左子树的left指针,一个是指向右子树的right指针和它自己的值val。二叉树的核心,其实就是二叉树的一个遍历。很多的leetcode就是考察你如何选择遍历方式,然后再遍历的基础上增加相应的操作。

2024-07-29 10:45:33 372

原创 day11 代码随想录 | 150. 逆波兰表达式求值 239. 滑动窗口最大值 347.前 K 个高频元素

给你一个字符串数组tokens,表示一个根据表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。这个题目是栈的典型应用。运算的时候,每次是两个数进行就算符操作。用栈的数据结构去完成。1. 遇到数字就入栈2. 遇到运算符就 pop两个数字根据符号进行运行这里注意几个细节。1. 在使用除法的时候,要定义函数,来针对负数的除法专门写函数(主要是针对负数。比如 -12 // 5,我们想的是为-2,但是python计算式-3. 我们取绝对值然后再除)2. pop数字运算的顺序。

2024-07-28 18:42:45 743

原创 day10 代码随想录 | 232 225 栈与队列 20 括号匹配 1047 删除重复串

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(pushpoppeekempty):实现MyQueueint pop()int peek()true题目要求用两个栈进行模拟。其中一个栈是用来存元素,一个是用来pop元素的当push到stack_in的时候,然后将stack_out.append(stack_in.pop())请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(pushtoppop和empty实现MyStackint pop()

2024-07-26 11:17:37 377

原创 day9 代码随想录 | 小白思考过程 459. 重复的子字符串

给定一个非空的字符串s,检查是否可以通过由它的一个子串重复多次构成。s = "abab"true可由子串 "ab" 重复两次构成。这个题看上去是真的不难。作为一个算法小白,我只会用很朴素的想法去做。第一个反应你可以想到暴力求解,这没问题。但是我自己暴力求解都没有过leetcode,因为超出了时间限制。

2024-07-25 13:35:36 302

原创 day8 代码随想录 | 344 541 反转字符串 28 KMP 字符字串匹配

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须、使用 O(1) 的额外空间解决这一问题。这个题不难,其实用用指针的思路就可以。一个在左边left,一个在最右边right,然后交换就可以,中止条件是相遇。这里不用left=right,当相等的时候,是指向同一个字符,没必要换了。给定一个字符串s和一个整数k,从字符串开头算起,每计数至2k个字符,就反转这2k字符中的前k个字符。k2kkk这个题目看起很复杂,其实不难。

2024-07-24 13:58:53 362

原创 day7 代码随想录 | 15 三数之和 18 四数之和 454 四数相加

给你一个整数数组nums,判断是否存在三元组满足i!= ji!= k且j!= k,同时还满足。请你返回所有和为0且不重复的三元组。答案中不可以包含重复的三元组。这个题目题目要读明白。首先,你取得数的索引是不能相同的。其次,即使你是取了三个数索引不相同,仍然可能包含重复的三元组。什么意思?比如数组是【0,0,0,0】 按照不同索引,你可以得到几个[0,0,0]的结果,但是你需要去重。由于之前做过两数之和,0就是我们所谓的target,那么是否可以采用类似的思路,用map取去映射呢。

2024-07-23 17:07:03 709

原创 day6 代码随想录 | 1 两数之和 202 快乐数 349两个数组交集

但是你是字典,你按照key取值,那么当你初始化相同的key后,直接覆盖率了一个索引,你得到的字典只有一个 3:1。最后,你返回的是3,3。因此你在遍历字典的时候,你根本无法保证你取的target-num的值是否已经访问过了,你不能保证说你在访问num的时候,你取的key不知你自己本身的num的值。正确方法应该是,我在遍历数组的时候,访问的target-num是再已经访问的num的字典里面去找。当快乐数的结果不为1时,将结果记录下来,如果后面的结果发现重复了之前的结果,就跳出循环,说明没有找到。

2024-07-22 14:28:27 616

原创 day4 代码随想录 | 24 链表两两交换节点 19 删除链表倒数第N个节点 142 环形链表 链表相交

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。因为涉及到链表的交换操作,头结点的交换与其他节点交换有不一样因此添加一个虚拟头结点简化操作。两两交换需要两个两个指针,一个指针没法操作,自己画图就能看到(如下)我在这里想到有两个 一个prev指针,一个cur指针,分别初始化为dummy_head和head.那么我们如何交换呢,需要保存哪些信息呢。

2024-07-21 17:23:10 1134

原创 代码随想录day3 | 203移除链表节点、206反转链表、707 设计链表

203移除链表节点、206反转链表、707 设计链表

2024-07-19 11:08:15 915

原创 代码随想录day2 | 977有序数组平方、209 长度最小的子数组、59 螺旋矩阵

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。这个题虽然有序,但是加入了负数,因此导致平方后的数组其实不是有序的。暴力的解法其实就是平方,然后双重循环遍历。但是这样就完全没有用到他给的条件中非递减的特性。那么,非递减到底有什么特性。由于是个排序,我们直觉上是喜欢从小到大去排序。我们如果只看一边(假如只看正数部分),那其实他就是有序的,同理,负数部分,平方后也是有序,只不过是从大到小。

2024-07-18 15:12:26 562

空空如也

空空如也

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

TA关注的人

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