2024-07-13:用go语言,给定一个从0开始的长度为n的整数数组nums和一个从0开始的长度为m的整数数组pattern,其中pattern数组仅包含整数-1、0和1。...大体步骤如下: 1.在主函数main中,定义了一个nums数组为[1,2,3,4,5,6]和一个模式数组pattern为[1,1]。...2.countMatchingSubarrays函数的作用是计算匹配模式数组pattern的nums子数组的数量。它首先将模式数组pattern的长度赋值给m,然后在模式数组末尾添加一个值为2的元素。...接着遍历nums数组,将每相邻两个数的大小关系转换为-1、0或1,并存储在pattern数组中。 3.根据Z算法,创建一个数组z用于存储匹配长度。...4.最后,在z数组中,从第m+1个值开始遍历,如果匹配长度等于模式数组长度m,则将计数器ans加一。 综上所述,总的时间复杂度为O(n)(n为nums数组的长度),总的额外空间复杂度为O(n)。
2024-07-06:用go语言,给定一个从0开始的长度为n的整数数组nums和一个从0开始的长度为m的整数数组pattern,其中pattern数组的元素只包含-1、0和1。...我们定义“匹配”的子数组,对于一个大小为m+1的子数组nums[i..j],如果对于pattern数组中的每个元素pattern[k]都满足以下条件: 1.如果pattern[k]为1,则nums[i+...解释:模式 [1,1] 说明我们要找的子数组是长度为 3 且严格上升的。在数组 nums 中,子数组 [1,2,3] ,[2,3,4] ,[3,4,5] 和 [4,5,6] 都匹配这个模式。...大体步骤如下: 1.将 pattern 数组的长度记录为 m,接着为了方便处理,在 pattern 后面添加一个号码 2。...2.遍历 nums 数组,将 pattern 的内容替换为以 cmp.Compare 比较后得到的结果。 3.初始化一个结果变量 ans,用于存储匹配模式的子数组数量。
2024-08-21:用go语言,给定一个从 0 开始索引的整数数组 nums 和一个整数 k,请设计一个算法来使得数组中的所有元素都大于或等于 k,返回所需的最少操作次数。...每次操作可以执行以下步骤: 1.选择数组中最小的两个整数 x 和 y。 2.从数组中删除 x 和 y。...大体步骤如下: 1.创建一个结构体 hp,包含一个 sort.IntSlice 数组,用于存储传入的整数数组 nums。 2.初始化 hp 结构体,将 nums 存入其中,并将其转换为最小堆结构。...3.进入循环,判断最小堆中的最小值是否小于等于 k,若是则执行以下步骤,否则结束循环: 3.a. 从最小堆中弹出最小值 x。 3.b. 将 x 值加倍,再放回最小堆对的顶部,并修正堆结构。 3.c....总的时间复杂度: • 初始化堆结构时间复杂度为 O(n)。 • 每次循环中从堆中弹出元素、修改堆结构的时间复杂度为 O(log(n)),最多执行 n 次。
2024-08-17:用go语言,给定一个从0开始的整数数组nums和一个整数k, 每次操作可以删除数组中的最小元素。 你的目标是通过这些操作,使得数组中的所有元素都大于或等于k。...此时,数组中的所有元素都大于等于 10 ,所以我们停止操作。 使数组中所有元素都大于等于 10 需要的最少操作次数为 3 。...大体步骤如下: 1.遍历数组nums,对于元素小于k的情况,将操作次数ans加1。 2.在给定例子中,初始时nums为[2, 11, 10, 1, 3],k为10。...5.此时数组中的所有元素都大于或等于10,操作停止,使数组中所有元素大于等于10所需的最少操作次数为3。 总的时间复杂度为O(n),其中n为数组nums的长度,每个元素最多会被遍历一次。...总的额外空间复杂度为O(1),没有使用额外的数据结构来存储中间结果,只有常数级别的额外空间消耗。
2023-12-30:用go语言,给你一个下标从 0 开始的整数数组 nums ,它包含 n 个 互不相同 的正整数, 如果 nums 的一个排列满足以下条件,我们称它是一个特别的排列。...在这个函数内部,首先计算了nums数组的长度n,然后初始化了一个二维数组dp,用于记录状态的转移。...首先,它检查dp数组中是否已经计算了当前状态s和位置p的结果,如果是,则直接返回该结果。 4.接下来,如果状态s表示所有的数字都被使用过,那么将结果设为1,表示找到了一个满足条件的排列。...6.最后,将得到的ans存入dp数组中,并返回结果。 整体的时间复杂度:O(n*2^n),其中n是nums数组的长度。...对于process函数中的每个状态s以及位置p,最坏情况下都要回溯所有的n个数字,因此是指数级的复杂度。
2024-08-28:用go语言,给定一个从1开始、长度为n的整数数组nums,定义一个函数greaterCount(arr, val)可以返回数组arr中大于val的元素数量。...3.2.如果arr1中大于nums[i]的元素数量比arr2中大于nums[i]的元素数量少,将nums[i]加入arr2。...大体步骤如下: 1.创建一个新的函数greaterCount(arr, val),用于计算数组arr中大于val的元素数量。...2.定义一个空数组arr1和arr2,并创建两个BinaryIndexedTree数据结构tree1和tree2。 3.对于数组nums中的每个元素: 3.1....从第三个元素开始遍历: 3.3.1.计算arr1和arr2中大于当前元素的个数,并根据规则选择将当前元素加入哪个数组,更新对应的Binary Indexed Tree。
2024-06-01:用go语言,给定一个从0开始索引的整数数组 nums 、两个正整数 k 和 dist 。 数组的代价是该数组中的第一个元素。...问题要求将数组 nums 分割成 k 个连续且不重叠的子数组, 同时确保第二个到第k个子数组的第一个元素与它前面的子数组的最后一个元素的距离不超过 dist 。...3.对堆 l 进行调整,保持其大小不超过 k,如果超过则将多出的部分元素从堆 l 移至堆 r 中。...4.遍历数组 nums,从第 dist+2 个元素开始,进行子数组的调整: • 移除 out 元素,根据其大小从堆 l 或堆 r 中移除。...5.最后返回数组的第一个元素与最小代价和 mn 的和作为最终结果。
2024-09-11:用go语言,给定一个从0开始的整数数组nums和一个正奇数整数k, 要求在nums数组中选择k个不重叠的子数组, 使得这些子数组的能量值之和最大。...子数组的能量值是通过一定规则计算得到的, 具体规则是对于某个子数组,将其每个元素乘以一个特定系数, 并将这些结果相加,系数随着元素在子数组中位置的变化而变化。...最终,要求找到一组k个不重叠的子数组,使得这些子数组的能量值之和达到最大值。 需要注意的是,选择的子数组不需要覆盖整个原始数组。 最后要返回能够获得的最大能量值。...3.循环k次,表示每次选择一个子数组的过程: 3.a.初始化 pre 为 f[i-1],f[i-1] 为负无穷大,设置初始最大值为负无穷大,定义一个权重 w。...3.b.从第 i 个位置开始循环到 n-k+i 位置,计算每次选择一个子数组后的最大能量值,并更新 f[j]。 4.返回最终的最大能量值 f[n]。
2024-02-03:用go语言,你有 k 个背包。给你一个下标从 0 开始的整数数组 weights, 其中 weights[i] 是第 i 个珠子的重量。...如果第 i 个珠子和第 j 个珠子在同一个背包里, 那么下标在 i 到 j 之间的所有珠子都必须在这同一个背包中, 如果一个背包有下标从 i 到 j 的所有珠子,那么这个背包的价格是 weights[i...一个珠子分配方案的 分数 是所有 k 个背包的价格之和。 请你返回所有分配方案中,最大分数 与 最小分数 的 差值 为多少。 输入:weights = [1,3,5,1], k = 2。 输出:4。...灵捷3.5 大体步骤如下: 1.初始化变量: • 将权重数组 weights 的长度保存在变量 n 中。 • 创建一个长度为 n-1 的整数数组 sums。...4.循环分配珠子到背包: 4.1.初始化变量 ans 为 0,用于保存最终的结果。 4.2.使用循环,从 i=0, j=n-2, p=1 开始循环,其中 p 表示已经形成背包的数量。
2025-02-14:与敌人战斗后的最大分数。用go语言,给定一个从0开始的整数数组 enem)yEnergies,表示敌人的能量值,以及一个整数 currentEnergy,表示你初始的能量总量。...你的初始得分为0,并且所有敌人开始时都是未标记的。...你可以进行以下两种操作任意次数(包括0次)以得分: 1.选择一个未标记的敌人 i,前提是 currentEnergy 大于等于 enemyEnergies[i]。...此操作会使你获得1分,并且你的能量值减少 enemyEnergies[i],即 currentEnergy 更新为 currentEnergy - enemyEnergies[i]。...2.如果你当前得分至少为1,你可以选择一个未标记的敌人 i,此时你的能量值将增加 enemyEnergies[i],即 currentEnergy 更新为 currentEnergy + enemyEnergies
2024-12-22:矩阵中的最大得分。...用go语言,给定一个由正整数构成的 m x n 矩阵 grid,你可以从任意单元格开始,移动到正下方或正右侧的任一单元格(不要求相邻) 在从值为 c1 的单元格移动到值为 c2 的单元格时,得分计算为...解释:从单元格 (0, 1) 开始,并执行以下移动: 1.从单元格 (0, 1) 移动到 (2, 1),得分为 7 - 5 = 2 。...大体步骤如下: 1.创建一个二维数组 premin 用于存储每个单元格的最小值,初始化为 math.MaxInt 值。...3.遍历矩阵的每个单元格,对于当前单元格 (i, j): • 设定一个变量 pre 用于记录从上方或左方移动过程中的最小值,初始值为 math.MaxInt。
2024-09-18:用go语言,给定一个从 0 开始的长度为 n 的正整数数组 nums 和一个二维操作数组 queries,每个操作由一个下标值 indexi 和一个数值 ki 组成。...开始时,数组中的所有元素都是未标记的。依次执行 m 次操作,每次操作的过程如下: 1.如果下标 indexi 对应的元素还未标记,则标记这个元素。...我们需要返回一个长度为 m 的数组 answer,其中 answer[i] 表示执行第 i 次操作后,数组中未标记元素的和值。...2.遍历 nums 数组,同时计算数组元素的和 s,并将每个元素的索引存入 ids 数组中。 3.对 ids 数组进行稳定排序,排序依据是对应元素在 nums 中的值。...4.创建一个答案数组 ans,长度为 queries 的长度,用于存储每次操作后未标记元素的和值。 5.遍历 queries 数组,对每个操作进行处理: • 获取操作指令中的下标 i 和数值 k。
2024-05-18:用go语言,给定一个从 0 开始的字符串 s,以及两个子字符串 a 和 b,还有一个整数 k。...定义一个“美丽下标”,当满足以下条件时: 1.找到字符串 a 在字符串 s 中的位置,且该位置范围为 0 以数组的形式返回这些下标。...大体步骤如下: 1.定义了 main 函数,其中给定了字符串 s、子字符串 a 和 b,以及整数 k。 2.在 main 函数中调用 beautifulIndices 函数,并输出结果。...7.然后遍历 posA 中的每个位置 i,在 posB 中查找满足条件的位置 j 和 k,更新 ans。 8.将找到的美丽下标按照升序排列,并以数组形式返回。
2023-11-22:用go语言,给你一个长度为 n 下标从 0 开始的整数数组 nums。 它包含 1 到 n 的所有数字,请你返回上升四元组的数目。...2.遍历数组,从第二个元素开始(下标为1): a.初始化计数器cnt为0。...c.再次遍历当前元素之前的所有元素(下标小于当前元素的下标),如果当前元素大于前一个元素,则将cnt加到dp[j]上;否则,将dp[j]加上cnt的整数值。 3.返回ans作为结果。...2.遍历数组,从第二个元素开始(下标为1): a.初始化计数器cnt为0。...b.遍历当前元素之前的所有元素(下标小于当前元素的下标),如果当前元素大于前一个元素,则将dp[j]加到ans上,并将cnt加1;否则,将dp[j]加上cnt的整数值。 3.返回ans作为结果。
2025-01-06:无需开会的工作日。用go语言,给定一个正整数 days,表示员工可以工作的总天数(从第 1 天开始)。...同时还有一个二维数组 meetings,其长度为 n,其中每个元素 meetings[i] = [start_i, end_i] 表示第 i 次会议的开始和结束天数(包含这两天)。...2.在 countDays 函数中,首先对会议时间表按照会议开始时间进行排序,以便后续处理时能够按顺序遍历。 3.初始化当前合并区间的左右端点 start 和 end。...4.遍历会议时间表 meetings,对于每一个会议时间段 p: • 如果该会议的开始时间 p[0] 大于当前合并区间的结束时间 end,说明 p 和当前合并区间不相交,需要把不相交的天数减去,更新新的合并区间的起始位置为...• 更新当前合并区间的结束时间为 max(end, p[1])。 5.处理最后一个合并区间,将最后一个合并区间的长度减去。 6.返回最终的结果。
2024-07-27:用go语言,给定一个正整数数组,最开始可以对数组中的元素进行增加操作,每个元素最多加1。 然后从修改后的数组中选出一个或多个元素,使得这些元素排序后是连续的。...大体步骤如下: 1.定义一个函数 maxSelectedElements(nums),参数为一个整数数组 nums,返回最多可选出的连续元素数量。...2.初始化一个空的映射 f 用于存储每个数字及其相邻数字出现的次数。 3.对输入的数组 nums 进行排序,确保数组中的元素是升序排列。...4.遍历排序后的数组 nums,对于数组中的每个元素 x: • 更新映射 f[x+1] 为 f[x] + 1,表示 x+1 与 x 相邻的数字出现的次数。...• 更新映射 f[x] 为 f[x-1] + 1,表示 x 与 x-1 相邻的数字出现的次数。 5.遍历映射 f 中的所有值,取其中的最大值作为答案。
By 张旭 CaesarChang 合作 : root121toor@gmail.com 关注我 带你看更多好的技术知识和面试题 给定一个链表,判断链表中是否有环。...为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。...fast=fast.next.next; slow=slow.next; } return false; } } 使用快慢指针,刚开始快比慢快
2024-08-24:用go语言,给定一个下标从1开始,包含不同整数的数组 nums,数组长度为 n。...你需要按照以下规则进行 n 次操作,将数组 nums 中的所有元素分配到两个新数组 arr1 和 arr2 中: 1.首先将 nums 中第一个元素加入 arr1。...2.然后将 nums 中第二个元素加入 arr2。 3.如果 arr1 的最后一个元素 大于 arr2 的最后一个元素,就将 nums[i] 追加到 arr1 。...在第 3 次操作中,由于 arr1 的最后一个元素大于 arr2 的最后一个元素(2 > 1),将 nums[3] 追加到 arr1 。...3.开始遍历 nums 中的第三个元素(3): • 因为 a 的最后一个元素 2 大于 b 的最后一个元素 1,所以将 nums[3] 即 3 加入数组 a,此时 a = [2, 3],b = [1]。
2024-05-25:用go语言,给定一个只包含正整数且下标从0开始的数组nums。 你可以执行以下操作: 如果两个相邻元素的二进制表示中包含相同数量的1, 那么可以交换这两个元素。...大体步骤如下: 1.定义了一个countOnes函数,用来计算一个整数的二进制表示中1的数量。 2.定义了canSortArray函数,用于判断能否通过题目描述的操作使得数组有序。...3.初始化preMax为0,用于记录前一个处理过的最大值。 4.开始遍历数组nums,用i来记录当前位置,n表示nums的长度。 5.对于每个位置i,将当前元素nums[i]视为mx(当前最大值)。...6.统计mx中1的数量,存储在变量ones中。 7.循环遍历直到相邻元素的二进制表示中包含相同数量的1为止,i会逐渐增加。...总的时间复杂度: • countOnes函数的时间复杂度为O(log(maxNum)),其中maxNum表示数组中的最大值。 • 在canSortArray函数中,遍历数组一次,不超过n次。
例 限制字符出现次数 // {n}: n 是一个非负整数。匹配确定的 n 次。...:exp) 表示当一个限定符应用到一个组,但组捕获的子字符串并非所需时,通常会使用非捕获组构造。 例 匹配以.结束的语句。 // 匹配由句号终止的语句。...exp) 表示输入字符串不得匹配子表达式中的正则表达式模式,尽管匹配的子字符串未包含在匹配结果中。 例 捕获未以“un”开头的单词 // \b(?!...以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。...请从输出结果中,细细体味使用不同的贪婪或懒惰策略,对于匹配子字符串有什么影响。 附录 匹配正则字符串的方法 由于正则表达式中很多元字符本身就是转义字符,在Java字符串的规则中不会被显示出来。
领取专属 10元无门槛券
手把手带您无忧上云