题目: 思路: 首先明确了这个可以在一次循环中解决即时间复杂度为O(n) 其次,在循环中,我们应能知道起始的位置,然后终止于哪个位置,当碰到终止的时候必然是元素为已经纳入我们统计中的元素。...所以我们是否能用一个容器将元素不断纳入,在纳入过程中判断这个元素是否已经被纳入了进来,最好是有序的方便我们吧从某处的元素之前的那些一次性全部丢弃。...到第二个3时,以后的子串起点start为4, * 到第二个1时,如果不取最大的start,按start = map.get(arr[end])+1 * 算出起点start为2,显然以起点...start=2,结尾end=1的子串234351有重复的, * 因此start要取最大的 * 优点:对于方案一,少了一些对于list的截取与搜索的步骤,相对儿研会少一点操作,应该会节约点时间... * 如[1,2,3,4,5],这时候长度为5,如果下一个数是3, * 那么最大长度依旧是5,但是数据结构里面的[1,2,3]应当被清除, * 因为他们不能用于后续统计中,
1 /** 2 * 无重复随机字符串 3 * num=62或不传时位默认的62位 4 * @param
快指针 i 作为某一连续最长不重复区间的右端点,慢指针 j 作为该区间的左端点; 遍历数组 a[i],用 vis[a[i]] 标记当前区间已经存在的数。...当 vis[a[i]] > 1 时: 说明当前区间存在重复数字,则 j 不断右移,期间 vis[a[j]] --,直到 vis[a[i]] == 1 为止; 此时不含重复数字的区间长度即为 i - j...+ 1,用 res 来维护最长的区间长度。...否则说明当前区间还未存在重复数字,i 持续右移。
最长连续不重复子序列 给定一个长度为 n 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。 输入格式 第一行包含整数 n。...第二行包含 n 个整数(均在 0∼105 范围内),表示整数序列。 输出格式 共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。...while(s[a[i]] > 1) // 一点碰见两个重复的元素后 { s[a[j]] --; // 这里要主要的一点是这个算法是没有回溯的...现在是这个算法最厉害的地方 // 这个j代表的是 j可以到达最左的地方 所以在j左边的 // 元素的个数就需要都...-- 这点很妙 // 每次求的是 j到i之间的符合条件的最大值 j ++; // 然后j++ }
给定一个长度为 n 的整数序列,请找出最长的不包含重复数字的连续子序列,输出它的长度。 输入格式 第一行包含整数 n。...第二行包含 n 个整数(均在 {\rm{0}}\sim100000 范围内),表示整数序列。 输出格式 共一行,包含一个整数,表示最长的不包含重复数字的连续子序列长度。...for(int i = 0, j = 0; i < n; i++) { s[a[i]]++; while(s[a[i]] > 1) //出现次数大于1则重复...{ s[a[j]]--; //将对应数出现次数减一 j++; //往后移动j指针,直到跳过一个重复的元素 }...res = max(res, i - j + 1); //求最大子序列长度 } cout << res << endl; return 0; } 本作品采用知识共享署名-非商业性使用
题意描述 给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续区间,输出它的长度。输入格式 第一行包含整数n。 第二行包含n个整数(均在0~100000范围内),表示整数序列。...输出格式 共一行,包含一个整数,表示最长的不包含重复数字的连续子序列的长度。...数据范围 1≤n≤100000 输入样例: 5 1 2 2 3 5 输出样例: 3 思路 这道题采用双指针做法,对于一个数字,以该数字为结尾,然后向前计算满足不包含重复数字的最大长度。...使用双指针的好处是,可以让时间复杂度降到O(N)。...我们可以使用一个数组来统计每个数字出现的次数,如果出现的次数大于1,则说明已经有重复的数字出现,记录下当前区间的长度,并且将之前统计的数字清零,然后输出最终答案即可。
1.问题 有1,2,3,4四个数字求四个数字能生成多少个互不相同且无重复数字的三位数(不能含有122,133类似) 2.算法描述 先给定一个列表,第一个循环得到第一个数,第二个循环得到第二个数,第三个循环得到第三个数...,用if条件语句进行判断三个数是否重复或者相等,然后再将其转化为三位数,添加到列表中,最后输出该列表。...3.实验结果与讨论 通过实验、实践等证明提出的方法是有效的,是能够解决开头提出的问题。...10+k) list.append(x) print(list) print('能生成%d个'% int(len(list))) 4.结语 本实验探讨了1234能够组成多少无重复的三位数...,涉及for循环、if条件判断语句以及字符串之间的转换,进一步巩固了这些知识点,通过数学方法排列组合得出的结果与该程序运行的结果相一致,证明该方法是有效的。
将DNA序列看作是只包含['A', 'C', 'G', 'T']4个字符的字符串,给一个DNA字符串 ,找到所有长度为10的且出现超过1次的子串。...序列进行整数编码: [‘A’, ‘C’, ‘G’, ‘T’]4个字符分别用[0, 1, 2, 3](二进制形式(00, 01, 10, 11)所表示,故长度 为10的DNA序列可以用20个比特位的整数所表示...1.设置全局整数哈希int g_hash_map[1048576]; 1048576 = 2^20,表示所有的长度为10的 DNA序列。...3.从DNA的第11个字符开始,按顺序遍历各个字符,遇到1个字符即将key右移2位 (去掉最低位),并且将新的DNA字符s[i]转换为整数后,或运算最高位(第19 、20位),g_hash_map[key...4.遍历哈希表g_hash_map,若g_hash_map[i] > 1,将i从低到高位转换为10个字符的DNA 序列,push至结果数组。
题目 给你一个字符串 S,找出所有长度为 K 且不含重复字符的子串,请你返回全部满足要求的子串的 数目。...示例 1: 输入:S = "havefunonleetcode", K = 5 输出:6 解释: 这里有 6 个满足题意的子串,分别是: 'havef','avefu','vefun','efuno',...示例 2: 输入:S = "home", K = 5 输出:0 解释: 注意:K 可能会大于 S 的长度。在这种情况下,就无法找到任何长度为 K 的子串。...提示: 1 <= S.length <= 10^4 S 中的所有字符均为小写英文字母 1 <= K <= 10^4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com...set.size() >= K || set.count(S[j])) set.erase(S[i++]);//长度大了,或者包含j字符 set.insert(S[j]);//j无重复了
输入两个正整数n<m<10 6 ,输出 ,保留5位小数。输入包含多组数据, 结束标记为n=m=0。提示:本题有陷阱。
//printf(" s: %.5f\n",s); } printf("%.5f\n",s); } } } //子序列的和
这个应该是一个典型的动态规划问题:http://bbs.csdn.net/topics/310174805 直观地得到一个思路,表达起来真够难的,直接写代码要更容易 以abcbef这个串为例 用一个数据结构...pos记录每个元素曾出现的下标,初始为-1 从s[0]开始,pos['a'] == -1,说明a还未出现过,令pos['a'] = 0,视为将a"加入当前串",同时长度++ 同理令pos['b'] = ...= -1,说明'b'在前面已经出现过了,此时可得到一个不重复串"abc",刷新当前的最大长度,然后做如下处理: pos[s[0~2]] = -1,亦即将"ab""移出当前串",同时当前长度减去3 重复以上过程...maxLength = max(maxLength, i - start + 1) usedChar[s[i]] = i return maxLength 下面是c语言的版本...: // testlongsetString.cpp : 定义控制台应用程序的入口点。
之前有写过 找出数组中只出现一次的数,今天再来看下怎么找出数组中重复出现的数。 有一个长度为 n 的数组,所有的数字都在 0~n-1 的范围,现在要求找出数组中任意一个重复的数字。...思路二: 利用空间换时间的思想,新建一个哈希表,然后遍历数组,每扫描一个元素都去哈希表里查找是否也存在该元素,如果存在,即找到一个重复的数,如果不存在,则将该元素保存到哈希表。...如果 arr[i] 不等于 i,则继续拿 arr[i] 和 arr[arr[i]] 比较,如果 arr[i] 和 arr[arr[i]] 相等,则找到一个重复的数,因为该数字在 i 下标和 arr[i]...交换了之后,再重复上面的比较、交换操作,直到找到一个重复的数。 arr = [4,1,1,3,2,5,5] arr[0] != 0 则比较 arr[0] 和 arr[4] arr[0] !...= 0 则比较 arr[0] 和 arr[1] arr[0] == arr[1] 找到一个重复的数 你可能会问,为什么要交换,交换的目的就是为了把元素放到属于它的位置上,要让这个数组满足 arr[i]
最长连续不重复子序列 给定一个长度为 n的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。 输入格式 第一行包含整数 n。...第二行包含 n 个整数(均在 0∼105范围内),表示整数序列。 输出格式 共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。...while(s[a[i]] > 1) // 如果现在出现的这个数字重复了 然后那么【j,i】这一段的所有子序列的连续长度都要减一 { s[a[j]] --; // 这里要注意是j一直是不大于i的...,如果当前这个s[a[i]]>1,代表的是当前这个数字已经重复了,然后对于[i, j]这一段的所有的子序列的连续长度都需要减一。...while(s[a[i]] > 1) // 如果现在出现的这个数字重复了 然后那么【j,i】这一段的所有子序列的连续长度都要减一 {
Longest Substring Without Repeating Characters 已知一个字符串,求用该字符串的无重复字符组成的最长子串的长度。...例如: s = "abcabcbb" -> "abc", 3 s = "bbbbb" -> "b", 1 s = "pwwkew" -> "wke", 3 注意 "pwke"是子序列而非子串。...算法设计 利用滑动窗口 双指针维护滑动窗口,整个过程中,使用begin与i维护一个窗口,该窗口中的子串满足题目 条件(无重复的字符),窗口线性向前滑动,整体时间复杂度为O(n)。...1.设置一个记录字符数量的字符哈希,char_map; 2.设置一个记录当前满足条件的最长子串变量word; 3.设置最长满足条件的子串的长度result; 4.设置两个指针(记作指针i与指针begin...否则:begin指针向前移动,更新char_map中的字符数量,直到字符s[i]的数量为1;更新word,将 word赋值为begin与i之间的子串。
题目描述 有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 2. 程序分析 可填在百位、十位、个位的数字都是 1、2、3、4。...组成所有的排列后再去掉不满足条件的排列。 思路 这题是C语言算法的基础题,只需要设置定义三个变量并限定三个变量小于5并两两各不相等,然后使用三重循环对各种可能进行遍历即可。...=k) /*确保 i、j、k 三位互不相同*/ { printf("%d,%d,%d\n",i,j,k); //输出三位数
{ listNodes[i].next=listNodes[i+1]; } return listNodes[0]; } } 3-无重复字符的最长子串...示例 1: 输入: s = “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。...示例 2: 输入: s = “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。...示例 3: 输入: s = “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。...请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。 示例 4: 输入: s = “” 输出: 0 解题思路: 这里我们选择通过List的数据结构来解决该问题.
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?...在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。 编写一个函数来查找 DNA 分子中所有出现超多一次的10个字母长的序列(子串)。...方法返回true和false来判断子串是否出现超多一次,但是字符串保存的空间消耗大。...class Solution { public List findRepeatedDnaSequences(String s) { //ACGT的SCII码的二进制表示...,是0111,刚好3位1,我们可以与字符做按位与操作以使用字符的高位都变成0 //将字符转成低3位就能识别的数 //例如A:1000001
但是,你不能重复利用这个数组中同样的元素。...原题地址 https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ 给定一个字符串,请你找出其中不含有重复字符的...示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。...示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。...示例 3: 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 要注意字符串为空、变量为null、字符串长度 Length = 1 等情况。
示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。...示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。...示例 3: 输入: “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 注意,你的答案必须是子串的长度,”pwke” 是一个子序列,不是子串。...拿 abcdefce 举例,我们遍历到第二个c字符的时候,已有的不含有重复字符的子串是 abcdef ,当要把c加入到已有的子串的时候,需要将前面的 abc 删除,那么新的子串为 defc。...| 力扣(LeetCode) 无重复字符的最长子串 | 题解(LeetCode)
领取专属 10元无门槛券
手把手带您无忧上云