avatar
Articles
43
Tags
19
Categories
3
首页
时间轴
标签
分类
清单
  • 音乐
  • 照片
  • 电影
argcxiang's blog
首页
时间轴
标签
分类
清单
  • 音乐
  • 照片
  • 电影

argcxiang's blog

IVW150-4-轮转数组
Created2025-05-22|IVW150
题目描述给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 123456输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4] 进阶: 尽可能想出更多的解决方案,至少有 三种 不同的方法可以解决这个问题。 你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗? 算法思路我觉得想到几种比较简单的方法倒还是没问题的,比如: 每次将数组循环后移一位,重复k%n次,时间复杂度是$O(k\%n * n)$,空间复杂度是$O(1)$ 拷贝一份新的数组,将两个数组拼接在一起,比如nums=[1,2,3], k=1,则生成新数组nums1=[1,2,3,1,2,3],直接取切片nums1[n-k-1,...
ChatBox+siliconFlow,你的AI助手!
Created2025-05-21
闲着无聊啊,水一点小blog,本期教程带来如何使用chatbox + silliconFlow(硅基流动)在本地“搭建”自己的AI助手(好吧实际上只是调用API),话不多说直接开干。 1.下载ChatBox直接访问官方网址即可,ChatBox,点击链接即可导航过去,windows,mac均支持,下载安装好后放在那里不要动。 2.注册SilliconFlow账号打开硅基流动官网,硅基流动,邀请码可以填写我的sMtGcx2w,这样我俩都会得到一定的分成,注册界面如下: 进入模型大厅后,首先需要新建一份API密钥,这个密钥你可以理解为身份验证口令,只有使用这个口令才能进行API接口调用: 新建名称可以随便写,我推荐写Chatbox相关的名字。毕竟,如果后面你学会了更多关于API调用的东西,或许你会使用新的API去做其他的接口任务,为了避免混淆,还是方便记忆为好: 接着复制这个API密钥,打开我们的ChatBox。 3.配置ChatBox点击设置: 模型提供方选择SilliconFlow...
IVW150-3-删除有序数组中的重复项
Created2025-05-20|IVW150
题目描述给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过: 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。 返回 k 。 示例 1: 123输入:nums = [1,1,2]输出:2, nums = [1,2,_]解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。 算法思路这个题能想到双指针,但是我一直没考虑清楚i, j两个指针的实际意义是什么,脑子傻了,因为我当时没搞清楚怎么确定这个元素在之前是否出现过?,所以自己写的方法依然是臭的不行,大体思路就是如果nums[i] <=...
IVW150-2-移除元素
Created2025-05-17|IVW150
题目描述给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作: 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。 返回 k。 示例 1: 1234输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2,_,_]解释:你的函数函数应该返回 k = 2, 并且 nums 中的前两个元素均为 2。你在返回的 k...
IVW150-1-合并两个有序数组
Created2025-05-16|IVW150
题目描述给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。 示例 1: 1234输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]解释:需要合并 [1,2,3] 和 [2,5,6] 。合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1...
HOT100-37-最短无序连续子数组
Created2025-05-09|HOT100
题目描述给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。 请你找出符合题意的 最短 子数组,并输出它的长度。 示例 1: 123输入:nums = [2,6,4,8,10,9,15]输出:5解释:你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。 算法思路这个题目难在要求$O(N)$的复杂度,如果没有这个要求,那么直接排序一遍然后比对改变的那一段区间即可,比如题目这个示例,排序后是[2, 4, 6 , 8, 9, 10, 15],相比起来只有[6, 4, 8, 10, 9]变了,所以长度为5。但是要求为$O(N)$的话必然是不可以排序了。 我们注意到一个问题,如果把原始的数组分成三部分numsa, numsb, numsc,那么numsa, numc必然是有序且升序的,例如示例的[2, 6], [9, 15],问题出现在左侧遍历到4时,发现比6要小,不满足升序,说明至少从6开头的这一段数组出问题了,右侧我们采用倒序方式遍历,本应该是降序的,但同样发现[10,...
HOT100-36-颜色分类
Created2025-05-06|HOT100
题目描述给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地 对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 必须在不使用库内置的 sort 函数的情况下解决这个问题。 示例 1: 12输入:nums = [2,0,2,1,1,0]输出:[0,0,1,1,2,2] 算法思路这个题目如果遍历两次的话非常好解决,首先第一遍遍历,把0换到数组最左边,使用一个指针p,划定0的范围,然后遍历数组,如果nums[i] = 0,就执行swap(nums[i], nums[pre]), pre++;第二遍遍历是一样的,这次从pre开始,再把1换到以pre起始的地方。python伪代码(方便点)大概是: 12345678for i in range(0, n): if nums[i] == 0: swap(nums[pre], nums[i]) pre++for i in range(pre, n): if nums[i] == 1: swap(nums[pre],...
HOT100-35-任务调度器
Created2025-05-06|HOT100
题目描述给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表,用字母 A 到 Z 表示,以及一个冷却时间 n。每个周期或时间间隔允许完成一项任务。任务可以按任何顺序完成,但有一个限制:两个 相同种类 的任务之间必须有长度为 n 的冷却时间。 返回完成所有任务所需要的 最短时间间隔 。 示例 1: 输入:tasks = [“A”,”A”,”A”,”B”,”B”,”B”], n = 2 输出:8 解释: 在完成任务 A 之后,你必须等待两个间隔。对任务 B 来说也是一样。在第 3 个间隔,A 和 B 都不能完成,所以你需要待命。在第 4 个间隔,由于已经经过了 2 个间隔,你可以再次执行 A 任务。 算法思路这道题目一开始我是想纯模拟+贪心做的,思路差不多是这样的: 统计每个任务出现的次数,然后进行排序得到hash_map; 假定我们得到的tasks队列是这样的:["A": 3, "B": 3, "C": 2, "D": 1], n=2 我们先把最大的排好:A X X A X X A X...
HOT100-34-最长回文子串
Created2025-05-04|HOT100
题目描述给你一个字符串 s,找到 s 中最长的 回文 子串。 示例 1: 123输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。 算法思路摆了一个51了,啥也没干,心里有点愧疚就来写道算法题,练练手感。这道题好像我做过,很有印象,最简单的一个做法就是中心拓展,顾名思义,找准一个回文中心,往两边枚举就行,但是一定要注意,回文子串的回文中心不一定是单字符,比如aba;还有可能是双字符,比如abba。因此写代码时可以分情况讨论。具体来说,我们可以遍历s[i],然后从l = i-1, i-2, i-3,...,0; r = i+1, i+2,...,n-1看s[l]==s[r],如果满足这个等式就是回文子串,不断增加长度即可;双对称中心同理,因此代码如下: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354string...
HOT100-33-下一个排列
Created2025-05-01|HOT100
题目描述整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的 下一个排列 就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。 例如,arr = [1,2,3] 的下一个排列是 [1,3,2] 。 类似地,arr = [2,3,1] 的下一个排列是 [3,1,2] 。 而 arr = [3,2,1] 的下一个排列是 [1,2,3] ,因为 [3,2,1] 不存在一个字典序更大的排列。 给你一个整数数组 nums ,找出 nums 的下一个排列。 必须 原地 修改,只允许使用额外常数空间。 示例 1: 12输入:nums =...
12…5
avatar
argcxiang
I am a student, majoring in information security.
Articles
43
Tags
19
Categories
3
Follow Me
Announcement
祝你今天开心!
Recent Posts
IVW150-4-轮转数组2025-05-22
ChatBox+siliconFlow,你的AI助手!2025-05-21
IVW150-3-删除有序数组中的重复项2025-05-20
IVW150-2-移除元素2025-05-17
IVW150-1-合并两个有序数组2025-05-16
Categories
  • HOT10035
  • IVW1504
  • selfintroduce1
Tags
动态规划 前缀和 快速选择 二分查找 哈希表 BFS 拓扑 贪心 分治 递减栈 双指针 循环链表 栈 桶排序 回溯 DFS 快慢指针 链表 反转链表
Archives
  • May 2025 10
  • April 2025 4
  • March 2025 9
  • February 2025 9
  • January 2025 11
Website Info
Article Count :
43
Unique Visitors :
Page Views :
Last Update :
©2019 - 2025 By argcxiang
Framework Hexo|Theme Butterfly