- 浏览: 137472 次
文章分类
- 全部博客 (189)
- Tree (14)
- Dynamic Programming (34)
- Array (20)
- Search (1)
- Hash (12)
- Backtracking (22)
- Divide and Conque (8)
- Greedy (6)
- Stack (12)
- software (0)
- List (7)
- Math (22)
- Two pointers (16)
- String (20)
- Linux (1)
- Sliding Window (4)
- Finite State Machine (1)
- Breadth-first Search (7)
- Graph (4)
- DFS (6)
- BFS (3)
- Sort (9)
- 基础概念 (2)
- 沟通表达 (0)
- Heap (2)
- Binary Search (15)
- 小结 (1)
- Bit Manipulation (8)
- Union Find (4)
- Topological Sort (1)
- PriorityQueue (1)
- Design Pattern (1)
- Design (1)
- Iterator (1)
- Queue (1)
最新评论
-
likesky3:
看了数据结构书得知并不是迭代和递归的区别,yb君的写法的效果是 ...
Leetcode - Graph Valid Tree -
likesky3:
迭代和递归的区别吧~
Leetcode - Graph Valid Tree -
qb_2008:
还有一种find写法:int find(int p) { i ...
Leetcode - Graph Valid Tree -
qb_2008:
要看懂这些技巧的代码确实比较困难。我是这么看懂的:1. 明白这 ...
Leetcode - Single Num II -
qb_2008:
public int singleNumber2(int[] ...
Leetcode - Single Num II
All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: "ACGAATTCCG". When studying DNA, it is sometimes useful to identify repeated sequences within the DNA.
Write a function to find all the 10-letter-long sequences (substrings) that occur more than once in a DNA molecule.
For example,
Given s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT",
Return:
["AAAAACCCCC", "CCCCCAAAAA"].
[分析]
此题思路是容易想到的,遍历输入字符串的每个长度为10的substring,利用HashMap 检查其出现次数,出现两次或者以上的则加入到结果中。
实现时仅当某个substring第二次出现时加入结果可避免结果中出现重复字符串。但直接实现会得到Memory Limit Exceed,就是程序内存开销太大了。
此题的关键就是要将那些待检查的substring转换为int来节省内存,如何高效的编码substring?共4个字符,ACGT,可用两个bit区分它们,分别是00,01,10,11,
参考解答中的掩码技巧值得学习,使用一个20位的数字0x3ffff称为eraser,每次要更新一位字符时,将老的编码hint & eraser, 然后左移两位,然后加上新字符对应的编码,
这样就得到了新substring的编码,很巧妙~
[ref]
http://blog.csdn.net/coderhuhy/article/details/43647731
Write a function to find all the 10-letter-long sequences (substrings) that occur more than once in a DNA molecule.
For example,
Given s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT",
Return:
["AAAAACCCCC", "CCCCCAAAAA"].
[分析]
此题思路是容易想到的,遍历输入字符串的每个长度为10的substring,利用HashMap 检查其出现次数,出现两次或者以上的则加入到结果中。
实现时仅当某个substring第二次出现时加入结果可避免结果中出现重复字符串。但直接实现会得到Memory Limit Exceed,就是程序内存开销太大了。
此题的关键就是要将那些待检查的substring转换为int来节省内存,如何高效的编码substring?共4个字符,ACGT,可用两个bit区分它们,分别是00,01,10,11,
参考解答中的掩码技巧值得学习,使用一个20位的数字0x3ffff称为eraser,每次要更新一位字符时,将老的编码hint & eraser, 然后左移两位,然后加上新字符对应的编码,
这样就得到了新substring的编码,很巧妙~
[ref]
http://blog.csdn.net/coderhuhy/article/details/43647731
public class Solution { // Method 2: hashmap store int instead of string to bypass MLE public static final int eraser = 0x3ffff; public static HashMap<Character, Integer> ati = new HashMap<Character, Integer>(); static { ati.put('A', 0); ati.put('C', 1); ati.put('G', 2); ati.put('T', 3); } public List<String> findRepeatedDnaSequences(String s) { List<String> result = new ArrayList<String>(); if (s == null || s.length() <= 10) return result; int N = s.length(); int hint = 0; for (int i = 0; i < 10; i++) { hint = (hint << 2) + ati.get(s.charAt(i)); } HashMap<Integer, Integer> checker = new HashMap<Integer, Integer>(); checker.put(hint, 1); for (int i = 10; i < N; i++) { hint = ((hint & eraser) << 2) + ati.get(s.charAt(i)); Integer value = checker.get(hint); if (value == null) { checker.put(hint, 1); } else if (value == 1) { checker.put(hint, value + 1); result.add(s.substring(i - 9, i + 1)); } } return result; } // Method 1: Memory Limit Exceed & may contain duplicates public List<String> findRepeatedDnaSequences1(String s) { HashMap<String, Integer> map = new HashMap<String, Integer>(); int last = s.length() - 10; for (int i = 0; i <= last; i++) { String key = s.substring(i, i + 10); if (map.containsKey(key)) { map.put(key, map.get(key) + 1); } else { map.put(key, 1); } } List<String> result = new ArrayList<String>(); for (String key : map.keySet()) { if (map.get(key) > 1) result.add(key); } return result; } }
发表评论
-
Leetcode - LRU Cache
2015-09-03 18:31 542[分析] 自己使用HashMap + LinkedList/A ... -
Leetcode - Max Points on a Line
2015-08-23 15:30 722[分析] 两条直线若包含一个公共点且斜率相同,则为同一条直线。 ... -
Leetcode - Fraction to Recurring Decimal
2015-08-23 10:05 467[分析] 处理int型整数运算时,为避免溢出,省事的做法就是内 ... -
Leetcode - Isomorphic Strings
2015-08-23 09:51 545[分析] 思路1:维护两个哈希表,char[] map, bo ... -
Leetcode - Palindrome Permutation
2015-08-22 16:24 1187[分析] 思路2让我大开眼界,顺便学习下BitSet~ [re ... -
Leetcode - Group Shifted String
2015-08-22 16:20 1726Given a string, we can "sh ... -
Leetcode - Two Sum III - Data Structure Design
2015-08-21 10:30 695[分析] find的version1 版本注意num2Occu ... -
Leetcode - Longest Consecutive Sequence
2015-08-20 21:20 487[分析] base version说几句: 数组题一定要考虑重 ... -
Leetcode - Contains Duplicate II
2015-08-18 07:57 563Given an array of integers and ... -
Leetcode - Shortest Word Distance II
2015-08-18 07:25 1362This is a follow up of Shortest ... -
Leetcode - Single Number III
2015-08-17 20:24 1858Given an array of numbers nums, ... -
Leetcode - Bitwise AND of Number Range
2015-08-17 09:41 506Given a range [m, n] where 0 &l ... -
Leetcode - Power of Two
2015-08-16 21:48 485Given an integer, write a funct ... -
Leetcode - Single Num II
2015-08-16 20:55 802[分析] 此题找到三种符合题意的解法,只理解了解法1,解法2有 ... -
Leetcode - Pow(x, n)
2015-08-11 09:45 463[分析] 数值计算类型题目,二分法或者借助位运算,本题两种方法 ... -
Leetcode - Divide Two Integers
2015-08-11 09:00 447[分析] 不能使用乘、除、取模运算,直接的思路当然是一次减一 ... -
Leetcode - Two Sum
2015-07-20 10:14 354Given an array of integers, fin ... -
MockInterview-Implement Dictionary
2015-04-12 08:56 0[题目] Implement a dictionary, s ...
相关推荐
《在IDE中高效进行LeetCode练习:leetcode-editor的深度解析》 在编程学习与技能提升的过程中,LeetCode作为一款广受欢迎的在线编程挑战平台,帮助众多开发者锻炼算法思维,提高编程能力。而为了进一步提升练习体验...
leetcode-习题集资源leetcode-习题集资源leetcode-习题集资源leetcode-习题集资源leetcode-习题集资源leetcode-习题集资源
leetcode-cli-plugins leetcode-cli 的第 3 方插件。 什么是 如何使用 如何使用 插件 名称 描述 增强的命令 按公司或标签过滤问题 list 不要在同一台计算机上使 Chrome 的会话过期 login 不要在同一台计算机上使 ...
在IDE中解决LeetCode问题,支持leetcode.com与leetcode-cn.com,满足基本的做题需求。 理论上支持: IntelliJ IDEA PhpStorm WebStorm PyCharm RubyMine AppCode CLion GoLand DataGrip Rider MPS Android Studio。
LeetCode Editor 7.4 版本的下载是一个名为 "leetcode-editor" 的压缩包文件。这个压缩包的导入过程非常简单,只需要将它直接拖入 IDEA 界面,IDEA 会自动识别并安装插件。这种方式使得安装过程无需额外的步骤,对于...
leetcode-习题集资源源代码leetcode-习题集资源源代码leetcode-习题集资源源代码leetcode-习题集资源源代码leetcode-习题集资源源代码
~/.vscode/extensions/leetcode.vscode-leetcode-0.17.0/node_modules/vsc-leetcode-cli/bin/leetcode /usr/local/bin/leetcode 修改模板 open ~/.vscode/extensions/leetcode.vscode-leetcode-0.17.0/node_modules/...
解题思路思路和LeetCode-python 503.下一个更大元素 II一致,只是这里求的是下标的距离,而不是数值倒序搜索,用到栈,栈里存储索引情况1:若栈为
《PyPI官网下载 | leetcode-export-1.1.tar.gz》 在编程世界里,LeetCode是一个备受程序员喜爱的在线平台,它提供了大量的算法题目,帮助开发者提升编程技能和解决问题的能力。而Python作为一门广泛使用的高级编程...
leetcode-cheat 的发布 它是什么 ? 这是一个chrome 扩展,可以帮助您更高效地使用 leetcode。您可以从 重要: leetcode-cheat 现在只支持中文版。 也就是说不完全支持leetcode.com,但是你可以用leetcode-cn.com代替...
`swift-Swif-LeetCode-Utils` 是一个实用工具库,它为Swift程序员提供了方便快捷的方法来处理这些问题。这个项目可以帮助你更高效地进行LeetCode上的编程练习,提升你的解决方案的可读性和简洁性。 首先,让我们...
java java_leetcode-115-distinct-subsquences
java java_leetcode-112-path-sum
java java_leetcode-101-symmetric-tree
java java_leetcode-100-same-tree
970. 强整数对数运算function powerfulIntegers(x: number, y: number, bound: number): numb
java java_leetcode-110-balanced-binary-tree
java java_leetcode-73-set-matrix-zeroes
java java_leetcode-113-path-sumII