首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    2025-04-26:统计重新排列后包含另一个字符串的子字符串数目Ⅰ。用go语言,给定两个字符串 word1 和 word2。如

    2025-04-26:统计重新排列后包含另一个字符串的子字符串数目Ⅰ。用go语言,给定两个字符串 word1 和 word2。...初始化差异计数数组(diff) • 创建一个长度为26的整型数组 diff,对应26个小写字母。 • 对于 word2 中每个字符,将对应字母在 diff 中的计数减1。...这样 diff 中的每个位置表示对应字母在目标字符串 word2 中的缺失数量(负数表示比 word2 中出现多的字母数量,正数则表示还缺字符)。 2....空间复杂度分析 • 维护一个长度为26的整型数组 diff,固定大小,空间开销为 O(1)。 • 其他变量使用常数空间。 • 不需要额外开辟与字符串长度相关的存储空间。...因此,总体额外空间复杂度: O(1)。 结论 该算法通过差异数组和双指针滑动窗口,线性高效地统计满足条件的合法子串数,额外空间开销固定,适合处理长度较大的字符串。

    14910

    2022-04-17:给定一个数组arr,其中的值有可能正、负、0,给定一个正数k。返回累加和>=k的所有子数组中,最短的子数组长度。来自字节跳动。力扣8

    2022-04-17:给定一个数组arr,其中的值有可能正、负、0, 给定一个正数k。 返回累加和>=k的所有子数组中,最短的子数组长度。 来自字节跳动。力扣862。...答案2022-04-17: 看到子数组,联想到结尾怎么样,开头怎么样。 预处理前缀和,单调栈。 达标的前缀和,哪一个离k最近? 单调栈+二分。复杂度是O(N*logN)。 双端队列。...} let mut l: isize = 0; let mut r: isize = 0; for i in 0..N + 1 { // 头部开始,符合条件的,...ans = get_min(ans, i as isize - dq[l as usize]); l += 1; } // 尾部开始,前缀和比当前的前缀和大于等于的

    1.6K10

    2021-05-08:给定两个非负数组x和hp,长度都是N,再给定一个正数range。x有序,x表示i号怪兽在x轴上的位置

    2021-05-08:给定两个非负数组x和hp,长度都是N,再给定一个正数range。x有序,x[i]表示i号怪兽在x轴上的位置;hp[i]表示i号怪兽的血量 。...等到最左边缘变成0之后,再去找下一个最左边缘... 2.贪心策略加线段树,可优化成O(N * logN)的方法。 代码用golang编写。...0开始,但在arr里是从1开始的 // sum[]模拟线段树维护区间和 // lazy[]为累加懒惰标记 // change[]为更新的值 // update[]为更新慵懒标记...某一个范围的累加和信息 ret.lazy = make([]int, MAXN中,某一个范围沒有往下傳遞的纍加任務 ret.change2 = make...([]int, MAXN中,某一个范围有没有更新操作的任务 ret.update2 = make([]bool, MAXN中,某一个范围更新任务

    1.1K10

    2025-06-26:转换数组。用go语言,给你一个整数数组 nums,它被视作一个循环数组。请你构建一个同样大小的新数组 re

    2025-06-26:转换数组。用go语言,给你一个整数数组 nums,它被视作一个循环数组。...请你构建一个同样大小的新数组 result,规则如下: 对于数组中的每个位置 i(0 到 nums.length - 1): • 如果 nums[i] 是正数,向右移动 nums[i] 步,从当前位置出发...• 如果 nums[i] 是零,则直接将 nums[i] 的值赋给 result[i]。 这样,你会得到一个数组 result,其中每个元素是根据 nums 对应位置循环移动后的元素值。...• i = 3: • nums[3] = 1(正数),向右移动 1 步。 • 当前位置:3。 • 移动步骤: • 第 1 步:从 3 向右到 0(循环,因为 3 的右边是数组的开头)。...额外空间复杂度: • 需要额外创建一个长度为 n 的数组 result 存储结果。 • 因此额外空间复杂度为 O(n)。 总结: • 总时间复杂度:O(n)。 • 总额外空间复杂度:O(n)。

    9010

    LeetCode 448.找到所有数组中消失的数字 - JavaScript

    题目描述:给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。...找到所有在 [1, n] 范围之间没有出现在数组中的数字。 您能在不使用额外空间且时间复杂度为 O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。...题目分析 这一题和Leetcode 442.数组中重复的数据解决思路很相似。但没有完全明确的限制空间使用。...map[i]) res.push(i); } return res; }; 解法 2: 原地哈希 和Leetcode 442.数组中重复的数据的解法相似:使用符号来标记元素是否出现过。...”进行遍历 for (let i = 1; i <= length; ++i) { // 如果下标 i-1 的元素是正数,说明整数 i 没出现过(要不然前面循环就变成负数了)

    1.1K20

    Leetcode 【442、1031】

    但是这样时间和空间复杂度均为 O(n)。有没有办法在保持时间复杂度为 O(n) 的情况下让空间复杂度降为 O(1) 呢(即不需要额外的空间消耗)?...方法1(交换法): 注意到该数组中的数的范围是 1 ≤ a[i] ≤ n (n = size of array),因此我们可以想到利用原数组大小的空间,将各个数字交换到它们对应的索引位置处(比如将数字...因此,只遍历过一次的是负数,遍历两次的是正数。我们只需要在遍历的过程中判断 nums[abs(nums[i])-1] 是否为正数,就能找到出现两次的数字。...换句话说,这种方法使用正负数来当做计数器,负数记为 1,代表第 i 个位置的数字出现一次;正数记为 2,代表第 i 个位置的数字出现 2 次。...因此,我们找到了正数 [2,3],即为出现两次的数字。 注意:下标有可能出现负数,所以在编程的时候,要使用下标的绝对值。

    47320

    《Go小技巧&易错点100例》第二十二篇

    如果你确定数值不会是负数,且希望获得更大的正数范围,那么uint可能更合适。在设计API和库时,如果不确定用户会如何使用数据(是否会有负数),则默认使用int可能更安全。...使用有符号整数类型:如果应用场景允许负值,并且担心无符号整数溢出,可以考虑使用有符号的整数类型(如 int、int32、int64),这样至少可以避免因正数溢出而突然变成负数的情况(尽管它仍然可能因负值溢出而变成正数...切片本身是在栈上分配的(一个很小的结构体),但它指向的底层数组是在堆上分配的。这意味着切片可以非常灵活地增长和收缩,而不需要移动整个数据结构。...相互转换:可以从数组创建切片(通过切片字面量或直接使用数组的切片表达式),但不能直接将切片转换为数组,因为切片的大小是可变的,而数组的大小是固定的。但是,可以将切片的元素复制到数组中。...可比较的结构体: 如果一个结构体仅包含可比较的字段(如整型、浮点型、字符串、布尔型、结构体(如果这些结构体也是可比较的)、数组等),那么这个结构体实例之间可以使用 == 和 != 操作符进行比较。

    23630

    算法:位运算

    总结 •正数的原码就是其二进制,反码也是原码,补码也是原码•负数的源码就是其二进制,只不过首位是1,符号位;反码是符号位不变,其它取反;补码是反码+1;•在计算机中,负数以正值的类补码操作形式表达(取反...只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。你可以不使用额外空间来实现吗?...对于数组中出现三次的元素,每一个元素都出现了3次,对应着第i个二进制位的 3个0 或3 个1 ,无论是哪一种情况,它们的和都是3的倍数(即和为3或0 )。...这样一来,对于数组中的每一个元素 ,我们使用位运算 得到 的第 个二进制位,并将它们相加再对 取余,得到的结果一定为 或 ,即为答案的第 个二进制位。...while循环一直除以2,看能不能结果为是否为0(1排外) 方法2:一个数n是2的幂,当且仅当n是正整数,并且n的二进制表示中仅包含1个1。

    1.1K20

    手撕腾讯面试题-乘积最大子数组

    题目 给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。...示例 解题思路 注意点 本题要求的是乘积最大的连续子数组而不是乘积最大的子序列,因此要求子数组中的元素在原数组中是连续的。...动态规划 由于整数数组 nums 中的元素可能有正数、负数和 0,因此连续子数组中的元素也可能是这三种情况。...如果连续子数组中的元素存在负数,正数乘以负数就成负数,那么最大值乘以负数就变成了最小值,因此需要同时考虑当前连续子数组乘积的最大值curMax和最小值curMin。...注意点 整数数组 nums 中存在负数,当遍历到以nums[i](负数)结尾连续子数组时,需要交换 curMax 和 curMin。

    38630

    缺失的第一个正数(LeetCode 41)

    请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。...ok { return p } } } 4.4 空间复杂度为 O(1) 的哈希表 题目要求空间复杂度需要 O(1),所以不能使用额外的哈希表存储数组中的元素。 我们将目光放到数组本身。...注意如果它已经有负号,不需要重复添加。 在遍历完成之后,如果数组中的每一个数都是负数,那么答案是 n+1,否则答案是第一个正数的下标加 1。...在恢复后,数组应当有 [1, 2, …, n] 的形式,但其中有若干个位置上的数是错误的,每一个错误的位置就代表了一个缺失的正数。...时间复杂度: 由于每次的交换操作都会使得某一个数交换到正确的位置,因此交换的次数最多为 n,整个方法的时间复杂度为 O(n)。 空间复杂度: 没有使用额外的存储空间,所以是 O(1)。

    27610

    缺失的第一个正数

    难度 困难 给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。...提示: 你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间。...题解一 :直接用哈希表不满足题目内存空间要求 可以直接用给的数组存 用一种特殊标记来记录某个值是否存在 如 用第n-1个下标的数是负数 表示n存在 判断 第一个出现的正数的下标 X 则缺少的就是X+1...因为有负数的存在一开始 所以把相应的位置 设置成正数即可 正数要超过 n 避免和 普通数混淆 可以使用n+1 遍历时 吧正数 标志的下标设置 为负数 for (int i = 0; i < n; +...下标 题解二 : 置换数组 如 某个位置的数为 n 就把他和下标 n-1的数置换 这样一轮下来 就能保证 每个下标下面是自己的数 遍历一轮 发现有的位置没有相应的 数 即 所缺少的 数字 class

    1K20

    2022-07-27:小红拿到了一个长度为N的数组arr,她准备只进行一次修改, 可以将数组中任意一个数arr,修改为不大于P的正数(修改后的数必须和原数不同)

    2022-07-27:小红拿到了一个长度为N的数组arr,她准备只进行一次修改, 可以将数组中任意一个数arri,修改为不大于P的正数(修改后的数必须和原数不同), 并使得所有数之和为X的倍数。...小红想知道,一共有多少种不同的修改方案。 1 <= N, X <= 10^5。 1 <= arri, P <= 10^9。 来自网易。 答案2022-07-27: 求所有数字的累加和sum。...= cnt(p, x, *num, (x - ((sum - *num) % x)) % x); } return ans; } // 当前数字num // 1~p以内,不能是num的情况下...,% x == mod的数字有几个 // O(1) fn cnt(p: i64, x: i64, num: i64, mod0: i64) -> i64 { // p/x 至少有几个 /...1 : 0 // 在不考虑变出来的数,是不是num的情况下,算一下有几个数,符合要求 let ans = p / x + if (p % x) >= mod0 { 1 } else {

    1.5K30

    手撕腾讯面试题-乘积最大子数组

    题目 给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。...image.png 解题思路 注意点 本题要求的是乘积最大的连续子数组而不是乘积最大的子序列,因此要求子数组中的元素在原数组中是连续的。...动态规划 由于整数数组 nums 中的元素可能有正数、负数和 0,因此连续子数组中的元素也可能是这三种情况。...如果连续子数组中的元素存在负数,正数乘以负数就成负数,那么最大值乘以负数就变成了最小值,因此需要同时考虑当前连续子数组乘积的最大值curMax和最小值curMin。...注意点 整数数组 nums 中存在负数,当遍历到以nums[i](负数)结尾连续子数组时,需要交换 curMax 和 curMin。

    82030

    算法练习之三数之和等于零

    作者 | 陌无崖 转载请联系授权 题目 题目来源于leetcode官方网站 ---- 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b...三个数中肯定有正数和负数。...其实可以轻易的想到,那就是从小到大排序,这样一来我们就很轻易的对负数和正数进行划分,相等的数据也会是相邻的状态,三个数相加等于零一定是负数【左边】的数据和正数【右边】的数据选择三个才能相加等于零。...代码思路 1、首先我们需要排序 2、循环我们的数据 3、如果最小的数大于0直接结束循环 4、如果相邻的数据相等则跳过循环,避免重复 5、如果三个数相加等于零则存储到相应的二维数组中 上面的简单思路有一点我们需要注意...,就是这三个数该怎么找,我们说3个数必须是有正数和负 数,那么我们可以有一种办法每次找数相加时,第三个数是从正数中挑选最大的,如果结果仍然为正数,说明正数太大,应该选择一个小的,即排好序的数组倒数第二个数据

    1.2K40

    ——非比较排序—计数排序

    根据统计的结果将序列回收到原来的序列中 找出最大和最小值: 首先遍历数组 a 一次,找到其中的最大值 max 和最小值 min。...创建计数数组: 根据最大值和最小值计算出数值范围 range = max - min + 1,并用 calloc 动态分配一个大小为 range 的整型数组 count。...统计每个元素的出现次数: 再次遍历原数组 a,对于数组中的每个元素 a[i],计算它与最小值的差值 a[i] - min,并将计数数组中对应索引的位置加1。...这样做是因为我们希望 count[0] 存储的是原数组中小于等于 min 的元素数量,count[1] 存储的是原数组中等于 min+1 的元素数量,依此类推,从而避免了因为负数或零而导致的索引错误。...这里的循环保证了数值会按照原来的顺序被放置回数组,从而维持了稳定性排序。

    22710

    力扣Hot100刷题日常(最大子数组和,合并区间, 缺失的第一个正数,电话号码的字母组合)

    最大子数组和 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。...题目分析: 这道题目使用到了动态规划,找到数组内某个子区间(一个数字也是区间)中和最大的一块区间, 1.当数组里全是负数,就是找哪个负数最大 2.当数组中有正有负的情况下,先滤清一个思路 当有正数的情况下...,肯定先从正数可以算,不然前面从负数开始算,值肯定会变小 当和小于0时,这块区间就告一段落,得找下一个正数开始算 动态规划状态定义 dp[i] 表示以 nums[i] 为结尾的子数组的最大和...这个时候它们一定不可能会有并集 所以直接将刚才的最终结果ret中 ,并且将最新的 left = a right = b 继续下一个寻找 细节: 当循环结束,再把最后一个nums(left,right...假设1没出现 就直接返回1 依次下去 1)暴力解法: 1.将数组中的数字存放到哈希表中,并且记录一下最大的一个数字max 2.从第一个正数开始遍历 1--max 看看哪个在哈希表中不存在 因为是按顺序返回

    11400
    领券