前缀和: 例如原数组 a1 , a2 , a3 , ..... an 前缀和:Si = a1 + a2 + a3 + ... + ai 1、如何求Si for i = 1; i ? n; i++ s[i] = s[i-1] + ai 2、作用:求数组中某段的合 [l, r] 普通方法时间复杂度是O( ...
分类:
其他好文 时间:
2021-05-24 06:40:51
阅读次数:
0
解决 TOP k 问题通常可采用 堆排序 和 快速排序的思想 1. 大根堆(前 K 小) / 小根堆(前 K 大): 时间复杂度O(NlogK) c++ STL 中提供了 priority_queue 实现堆的基本功能,比如 priority_queue <int> pq; 堆 pq 的元素都是 i ...
分类:
编程语言 时间:
2021-05-24 05:41:19
阅读次数:
0
题目描述: 统计一个数字在升序数组中出现的次数。 例如: [1,2,3,3,3,3,4] 3 返回:4 解题思路: 看到题目,可直接暴力求解,循环数组,找出出现次数,但此时时间复杂度为O(n)。显然直接遍历,没有很好的利用题目中升序这个已知要求,我们只需要找到目标数字第一次和最后一次出现的位置,并且 ...
分类:
编程语言 时间:
2021-05-24 04:50:00
阅读次数:
0
有向图强连通分量SCC P3387【模板】缩点 注释放代码里啦 时间复杂度O(n+m) #include<iostream> #include<cstdio> #include<cstdlib> #define maxn 100010 #define maxm 1000010 using names ...
分类:
其他好文 时间:
2021-05-24 02:15:52
阅读次数:
0
问题: 求n以内所有素数,一般的做法是: 1. 遍历2-n之间所有的数i 2. 每个数i再遍历所有小于它的数看是否能被小于它的某个数整除,如果可以者该数i有可以被整除的数则是和数,没有则是素数。 两层for循环,时间复杂度高。 解法一:素数筛 思想:用素数去标记合数,例如,已知最小的素数是2,那么2 ...
分类:
编程语言 时间:
2021-05-24 00:23:04
阅读次数:
0
二分最大边权,即有些边强制不能被选 接下来,即任意一点上某两边不能同时被选,以及任意一点上颜色相同的两边必须被选择一条 这些限制都可以用2-sat的形式来描述(强制不能选即连边"选->不选"),但后两类的边数达到了$o(m^{2})$,时间复杂度上无法接受 当一个节点上有一种颜色的边出现3次,或有两 ...
分类:
其他好文 时间:
2021-05-23 23:11:11
阅读次数:
0
分类:数组-统计数组中的元素 题目描述: 给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。 找到所有出现两次的元素。 你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗? 解题思路: 由于数字i在1到n之间,可以将nums[ ...
分类:
编程语言 时间:
2021-05-23 23:05:32
阅读次数:
0
分类:数组-统计数组中的元素 题目描述: 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。 找到所有在 [1, n] 范围之间没有出现在数组中的数字。 您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? ...
分类:
编程语言 时间:
2021-05-23 23:00:05
阅读次数:
0
最裸的暴力,时间复杂度:\(O(n^3)\)。 const int N=110; int a[3],b[3]; int n; bool check(int c[],int a[]) { for(int i=0;i<3;i++) if(abs(a[i]-c[i]) > 2 && abs(a[i]-c[ ...
分类:
其他好文 时间:
2021-05-04 16:12:32
阅读次数:
0
#时间复杂度O(N*N),空间复杂度O(1) #暴力法 def twoSum_baoli(nums: List[int], target:int) -> List[int]: for i in range(len(nums)-1): base = nums[i] for j in range(i+1 ...
分类:
编程语言 时间:
2021-05-04 15:39:57
阅读次数:
0