首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

2022-07-17:1、2、3...n-1、n、n、n+1、n+2... 在这个序列中,只有一个数字有重复(n)。 这个序列是无序的,找到重复数字n。 这个序

2022-07-17:1、2、3...n-1、n、n、n+1、n+2...在这个序列中,只有一个数字有重复(n)。这个序列是无序的,找到重复数字n。这个序列是有序的,找到重复数字n。...一个结论 return slow;}// 符合题目要求的、无序数组,找重复数// 时间复杂度O(N),额外空间复杂度O(1)// 用异或fn find_duplicate2(arr: &mut Vec...一个结论 return ans;}// 符合题目要求的、有序数组,找重复数// 时间复杂度O(logN),额外空间复杂度O(1)fn find_duplicate_sorted(arr: &mut...i32 = arr.len() as i32 - 1; let mut m: i32; let mut ans = -1; while l = 0 && arr[(m - 1) as usize] == arr[m as usize]) || (m + 1 < arr.len

80010

数据结构与算法-十大排序算法(动画演示)

算法描述 (1). 在未排序序列中找到最小元素,存放到排序序列的起始位置; (2). 在剩余未排序元素中继续寻找最小元素,放到已排序序列的末尾; (3). 重复步骤2,直到所有元素排序完毕; 2....for (int i = n - 1; i >= 0; i--){ // 堆顶存放最大值与最后一个元素做交换 swap(tree, i, 0);...算法描述 (1). 找出待排序列最大值 max 和最小值 min,算出序列的数据范围 r = max - min + 1,申请辅助空间 C[r]; (2)....反向遍历原始数组序列一个数,设当前数最小数的值为y,C[y]的值1为这个数在有序序列中的位置,同一个数每重复出现一次,将对应的C[y]位置1,遍历完成后所有数即为有序序列。 2....// 设当前数最小数的值为y,C[y]的值1为这个数在有序序列中的位置 // 当前数每重复出现一次,将对应的C[y]位置1向前推一次 int y = arr[i]

71720
您找到你想要的搜索结果了吗?
是的
没有找到

字符串最长子串难?滑动窗口拯救你

重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。...示例 1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 子串:串中任意个连续的字符组成的子序列称为该串的子串。...字符 s[right + 1] 跟子串 s[left...right] 中的每个字符进行比较,如果都不同,则将字符 s[right + 1] 也纳入到子串中。 ?...,刨除重复元素,并将此时左边界对应的字符出现的次数在 freq 的记录中一 */ } else { freq[s[l++]]--; }.../* 当前子串的长度和已找到的最长子串的长度取最大值 */ res = fmax(res, r - l + 1); } return res; } // c++ 语言 int

82140

python笔记1-字符串

1、注释 单行注释 # 多行注释 ’’’ ””” 2、操作符 标准算术操作符 +加 - *乘 /除 //地板除 %取模 **乘方 标准比较操作符 大于 >=大于等于 ==...7、操作举例 1)使用input赋值一个变量name_1,并打印出来 ? 2)使用decimal精确运算浮点小数 ? 3)使用int字符串123456转换为整数型 ?...1、几个字符的作用 \的作用:把之后的字符当做普通字符使用 r的作用:原样输出 \b的作用:相当于于退格 2、字符串类型 str() 3、格式化操作 lower() :字符串格式化为小写字母...加法乘法操作 :多个序列拼接 :指定序列重复输出次数 成员资格操作 in :在 not in :不在 函数 len()...:长度 min() :最小值 max() :最大值 练习 server1=r'9000,20Gb,3xx:1000,4xx:500,5xx:100

99530

七种排序算法 冒泡,选择,插入,希尔,快速,归并,堆

重复地访问要排序的数列,每次访问的最大值“浮”到数组尾部。 步骤如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个,直到把最大的元素放到数组尾部。...遍历长度一,对剩下的元素从头重复以上的步骤。 直到没有任何一对数字需要比较时完成。...从上次最小元素存放的后一个元素开始遍历至数组尾,最小的元素置于开始处。 重复上述过程,直到元素排序完毕。...已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。...步骤如下: 按堆的定义数组R[0..n]调整为堆(这个过程称为创建初始堆),交换R[0]和R[n]; R[0..n-1]调整为堆,交换R[0]和R[n-1]; 重复上述过程,直到交换了R[0]和R[

27730

数据结构-常用的排序算法

--j;//通过前移遍历已排序好的序列中的每一个值 } R[j+1] = temp;//temp插入到R[j+1]的位置 } } 2.2折半插入排序 折半排序是在直接插入排序的基础上进行改进的...,当比较完一次(即j的for循环执行完一次)以后,i的值加1,而参与比较的数值个数1,循环此过程,直到所有的数值均已排序完成(即i的值大于等于待排序序列的长度)。...它的基本思想是,待排序的序列构成一个大顶堆。这样,整个序列最大值就是堆顶的根节点。...根节点移走,根节点是最大值,然后再将剩余的n-1序列重新构造成一个堆,新堆的根节点是新堆的最大值,也是这n个元素中的次大值。如此重复,便可得到一个有序序列。...所以堆排序其实就是两个步骤,第一步是待排序数据转换成一个大堆顶,第二步就是逐步每个最大值的根结点移走,并且再次调整为大顶堆。

36020

【python-leetcode03-滑动窗口法】无重复字符的最大子串

问题描述: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。...示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。...示例 3: 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个序列,不是子串。...只有一个用例没通过,如果想要把题目做出来,简单版的滑动窗口,简单粗暴。 要想通过就得使用升级版的滑动窗口了:一个左边界start,一个记录最大值max_num,一个记录当前遍历得子串hash。...想了有点久,想到一种巧妙得办法,如果hash表中得键得长度小于hash表中值得和,说明出现了重复的字符,此时左边界就起作用了,让左边界对应的字符在hash中的值一,如果还有重复的,start+=1,在执行一操作

28410

排序进行曲-v2.0

堆排序的基本思想是待排序的序列 构建成一个大顶堆(或小顶堆),然后依次堆顶元素与最后一个元素交换,再重新调整堆,重复这个过程 直到整个序列有序。...调整后的堆 为:[10, 5, 3, 4, 1] 排序:堆顶元素10与最后一个元素1交换位置,并将堆的大小1。交换后的堆为:[1, 5, 3, 4]。...然后再对 堆顶元素1进行一次向下调整,使得堆重新满足堆的定义。调整后的堆为:[5, 4, 3, 1]。 再次排序:堆顶元素5与最后一个元素1交换位置,并将堆的大小1。...再次排序:堆顶元素4与最后一个元素3交换位置,并将堆的大小1。交换后的堆为:[3, 1]。然后再对堆顶 元素3进行一次向下调整,使得堆重新满足堆的定义。调整后的堆为:[1, 3]。...最后排序:堆顶元素1与最后一个元素3交换位置,并将堆的大小1。交换后的堆为:[3]。堆的大小为1,排 序完成。

15820

C# Random 生成不重复随机数

如果反复使用同一个种子,就会生成相同的数字系列。产 生不同序列的一种方法是使种子值与时间相关,从而对于 Random 的每个新实例,都会产生不同的系列。...下面主要就第二类介绍几个方法: 方法1:思想是用一个数组来保存索引号,先随机生成一个数组位置,然后把随机抽取到的位置的索引号取出来,并把最后一个索引号复制到当前的数组位置,然后使随机数的上限一,具体如...:先把这100个数放在一个数组内,每次随机取一个位置(第一次是1-100,第二次是1-99,...)...int[] index = new int[15]; for (int i = 0; i < 15; i++) index = i; Random r = new Random(); //用来保存随机生成的不重复的...(1, site - 1); //在随机位置取出一个数,保存到结果数组 result[j] = index[id]; //最后一个数复制到当前位置 index[id] = index[site - 1]

1.5K20

C# Random 生成不重复随机数

如果反复使用同一个种子,就会生成相同的数字系列。产 生不同序列的一种方法是使种子值与时间相关,从而对于 Random 的每个新实例,都会产生不同的系列。...下面主要就第二类介绍几个方法: 方法1:思想是用一个数组来保存索引号,先随机生成一个数组位置,然后把随机抽取到的位置的索引号取出来,并把最后一个索引号复制到当前的数组位置,然后使随机数的上限一,具体如...:先把这100个数放在一个数组内,每次随机取一个位置(第一次是1-100,第二次是1-99,...)...int[] index = new int[15]; for (int i = 0; i < 15; i++) index = i; Random r = new Random(); //用来保存随机生成的不重复的...(1, site - 1); //在随机位置取出一个数,保存到结果数组 result[j] = index[id]; //最后一个数复制到当前位置 index[id] = index[site - 1]

1.8K10

十大排序——最全最详细,一文让你彻底搞懂

具体算法描述如下: 1.从第一个元素开始,该元素可以认为已经被排序; 2.取出下一个元素,在已经排序的元素序列中从后向前扫描; 3.如果该元素(已排序)大于新元素,将该元素移到下一位置; 4.重复步骤3...算法描述 1.初始待排序关键字序列(R1,R2….Rn)构建成大顶堆,此堆为初始的无序区; 2.堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无序区(R1,R2,……Rn-1)和新的有序区...(Rn),且满足R[1,2…n-1]<=R[n]; 3.由于交换后新的堆顶R[1]可能违反堆的性质,因此需要对当前无序区(R1,R2,……Rn-1)调整为新堆,然后再次R[1]与无序区最后一个元素交换...该算法是采用 分治法(Divide and Conquer) 的一个非常典型的应用。已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。...算法描述 1.把长度为n的输入序列分成两个长度为n/2的子序列; 2.对这两个子序列分别采用归并排序; 3.两个排序好的子序列合并成一个最终的排序序列

83621

2023.4生信马拉松day2-数据类型

5.多个数据的组织——数据结构 -向量 一个向量内部只能有一种数据类型,可以有重复重复值允许,不同的数据类型不允许!...5 #(3)有重复的用rep(),有规律的序列用seq(),随机数用rnorm() rep("x",times = 3) seq(from = 3,to = 21,by = 3) rnorm(n...table(x) #重复值统计 sort(x) #默认从小到大排序——R语言里的默认思想 sort(x,decreasing = F) sort(x,decreasing = T) 8.对两个向量进行的操作...union(x,y) #默认会去重复! setdiff(x,y) #xy setdiff(y,x) #yx #x与y的差集和y与x的差集是不一样的!...)] x[-4] x[-(2:4)] -练习题:如何从13个数中筛选大于7的 (113个数作为向量赋值给x (2)x>7 #判断,之后会返还13个TRUE/FAUSE (3)[]TRUE对应的值挑选出来

69530

蓝桥杯突击复习准备——部分算法汇总

指针 unique(vector1.begin(),vector1.end()) //重排元素,使得所有值提前,返回值为重排后最后一个重复值的后面的值的迭代器,即从返回值到vector1.end()是无意义的值...,也是重复值的总数量 reverse(vector1.begin(),vector1.end()) //反转元素顺序 next_permutation(p,p+n) //求下一个全排列,枚举用...最长上升子序列 II (AC代码,思路在代码中) 7.LCS最长公共子序列 状态转移方程: //f[i][j] 表示 a[1~i] 和 b[1~j] 的最长公共子序列 f[i][j]=max(max(f...= -1; i = ne[i]) { int j = e[i]; d[j]--; //上一个节点被删除,那么它下一个点入度就1...i--; } // 改为 while(i & 1){ // 用位运算代替 --i;// 前自/增 比 后自/增快。

95110

算法 | 数据结构常见的八大排序算法

从待排序序列中,找到关键字最小的元素; 如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换; 从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。...(L,length,i): #定义一个int值保存当前序列最大值的下标 largest = i #执行循环操作:两个任务:1 寻找最大值的下标;2.最大值与父节点交换 while (1): #获得序列左右叶子节点的下标...= temp #堆中序列长度1 i = i-1 #调整大顶堆 adjust_max_heap(L,i,0) 冒泡排序 基本思想 冒泡排序思路比较简单: 序列当中的左右元素...,依次比较,保证右边的元素始终大于左边的元素; ( 第一轮结束后,序列最后一个元素一定是当前序列最大值;) 对序列当中剩下的n-1个元素再次执行步骤1。...重复步骤1.2,直到所有子集当中只有一个元素为止。 用伪代码描述如下: 1.i =L; j = R; 基准数挖出形成第一个坑a[i]。

80140

堆排序解读(基于java实现)

堆排序的基本思想是待排序的序列构建成一个最大堆(或最小堆),然后堆顶元素与最后一个元素交换,再对剩余的元素进行调整使其满足堆的性质,重复这个过程直到所有元素都排好序。...堆顶元素与最后一个元素交换:交换后,最大元素就位于数组的末尾。调整剩余元素:对除去最后一个元素的剩余部分进行调整,使其满足堆的性质。重复步骤2和步骤3,直到所有元素都排好序。...int l = 2 * i + 1; // 左子节点 int r = 2 * i + 2; // 右子节点 // 如果左子节点大于根节点,更新最大值...if (r arr[largest]) { largest = r; } // 如果最大值不是根节点,交换根节点和最大值的位置...使用循环从最后一个非叶子节点开始构建最大堆。在每一轮排序中,我们当前最大值移动到数组的末尾,并重新调整堆结构,使得剩余元素满足最大堆的性质。这个过程重复进行 n-1 次,直到排序完成。

18710

ASP.NET (Web) + C#算法 | 生成随机数字序列(随机数字+每个数字取随机不重复的位置和颜色)

关于今天的一个关于ASP的课后作业,是要求在ASP上实现随机生成数字序列: 具体要求: 随机位置:每个数字的位置相对随机; 随机颜色:每个数字的颜色随机且不重复; 随机数字:从0到9随机取出四个数;...最大值大小 为长度的数组 for (int i = 0; i < maxValue; i++)//数组的内容:最小值+(从 0 到 最大值一 ),及intList为一个特殊规律的不重复的递增数组...//intList的一个运行模拟序列: //0 1 2 3 4 n = listlength = 5,取到1 //0 4 2 3 | 4 n = listlength = 4,取到4...//不断用最后面的值来覆盖选中到的值,再把最后面的值去掉(通过n--实现,抽象意义上“截短”提供数字的intList),由此实现不重复序列 详细解析见以上的代码截图。...new PointF(0, 300)); int[] rdlist = common.GetRandom(0,cr.Length,textString.Length);//产生一个随机的不重复

2.4K10
领券