dna

8.26 | 学习笔记

时光总嘲笑我的痴心妄想 提交于 2019-11-28 16:32:57
从EOJ上的DNA排序题开始,这个题目有两个测试点总是超时,万分感谢有学长❤指出问题,原来的两层遍历时间复杂度有问题,所以顺势学习map; 感觉有两个难点,一是迭代器,二是按照value排序; 一、迭代器 迭代器一直感觉很高端的样子,从行为上看暂时可以理解为指针?如果不用迭代器连访问都很困难,而且高端一点的容器涉及到的STL函数比如find返回值都是迭代器 二、按照value排序 map会按照key排序,在CSDN上没找到其他方法能按照value排序的,所以折中一下,把map中的pair对放在vector里,然后自己写一个cmp,就可以用sort啦 AC代码记录一下 #include <bits/stdc++.h> using namespace std; int t,cnt; string tmp; typedef pair<string,int>dnapair; map<string,int>dna; vector<dnapair>v; map<string,int>::iterator iter; vector<dnapair>::iterator iter2; bool cmp(dnapair a,dnapair b) { if(a.second!=b.second)return a.second<b.second; return a.first<b.first; }

leetcode 重复的DNA序列

女生的网名这么多〃 提交于 2019-11-28 15:03:32
所有 DNA 由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。 编写一个函数来查找 DNA 分子中所有出现超多一次的10个字母长的序列(子串)。 示例: 输入: s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT" 输出: ["AAAAACCCCC", "CCCCCAAAAA"] 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/repeated-dna-sequences 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 算法一:暴力枚举 算法二:哈希表优化循环第二维,将值都存起来,查找即可 class Solution { public: vector<string> findRepeatedDnaSequences(string s) { unordered_map<string,int> hash; vector<string> res; for(int i=0;i+10<=s.size();++i){ string now = s.substr(i,10); if(hash[now]==1)res.push_back(now); hash[now]++; } return

重复的DNA序列[哈希表] LeetCode.187

回眸只為那壹抹淺笑 提交于 2019-11-28 04:13:32
所有 DNA 由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。 编写一个函数来查找 DNA 分子中所有出现超多一次的10个字母长的序列(子串)。 示例: 输入: s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT" 输出: ["AAAAACCCCC", "CCCCCAAAAA"] 思路: 设置一个hash表,存储已经出现过的十位字串; 遍历字符串,截取十位字串,并更新哈希表; 如果字串已经在hash表中,且只出现过一次的时候便将其加入到答案数组(只一次时加入,二次就不加了,为了防止重复) 代码如下: vector<string> findRepeatedDnaSequences(string s) { unordered_map<string,int> hash; string st;vector<string>ans; for(int i = 0 ; i < s.size();i++){ st = s.substr(i,10); if(1==hash[st]++ )ans.push_back(st); } sort(ans.begin(),ans.end()); return ans; } 来源:力扣(LeetCode) 链接: https:/

转录调控实战 | 一文解决转录调控问题 | chIP-seq | ATAC-seq

谁说我不能喝 提交于 2019-11-28 02:59:12
做生物的想发文章怎么办?转录调控来解析(huyou)! 最简单的情形: 1. 我在研究一个非常重要的基因A,功能已经做得差不多了,现在想深挖,第一步就是想知道哪个转录因子调控这个基因A; 2. 我发现了一个新颖的转录因子B,非常想知道这个TF到底在调控哪个基因。 研究方法不过几种: 1. RNA-seq分析差异基因,间接推测调控的转录因子。 2. 基于大量的ChIP-seq公共数据挖掘,用TF的抗体抓TF,同时抓下来TF结合的DNA,提取DNA,测序,就知道TF结合了哪些DNA,推测DNA附近的基因受该TF的调控。 3. motif分析预测,每个转录因子都有一个DNA结合结构域(DBD),喜欢结合在特定DNA序列上,也就是motif。去基因组上搜索motif所在的位置,其附近的基因就有可能受该TF的调控。 4. 做实验验证,DNase/ATAC-seq,用DNase-seq或ATAC-seq找开放区,预示着这样的区域有调控因子结合。在开放区找motif,如果有您感兴趣的TF的motif,那么这个TF很可能就在这里有结合,从而调控附近基因。 数据库: JASPAR CistromeDB数据库 Motif Scan footprintDB - 非常好用,当你有一段能结合DNA的蛋白序列(NCBI上通常有),就能搜出具有类似motif的TF。 什么是motif:

[LeetCode]187. 重复的DNA序列

久未见 提交于 2019-11-27 08:34:48
题目链接: https://leetcode-cn.com/problems/repeated-dna-sequences/ 题目描述: 所有 DNA 由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。 编写一个函数来查找 DNA 分子中所有出现超多一次的10个字母长的序列(子串)。 示例: 示例: 输入: s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT" 输出: ["AAAAACCCCC", "CCCCCAAAAA"] 思路: 滑动窗口 + 哈希 每次取10个字符记录下来,然后记录个数 时间复杂度: \(O(n)\) class Solution: def findRepeatedDnaSequences(self, s: str) -> List[str]: from collections import defaultdict visited = set() res = set() for i in range(0, len(s) - 9): tmp = s[i:i+10] if tmp in visited: res.add(tmp) visited.add(tmp) return list(res) java class Solution {

C语言结构体类型的强制转换

强颜欢笑 提交于 2019-11-27 08:07:51
当所用到的各个层次的成员较多时,我们会定义多个结构体函数,但是在传输过程中我们需要具体的指定哪一个结构体作为传输的数据,又C语言中的结构体并不能直接进行强制类型转换,只有结构体的指针可以进行强制类型转换,因此中间涉及到指针的问题,也就涉及到指向空间地址的问题。 我们定义一个结构体如下: typedef struct stdudent { char name[20]; int age; }student_t; 它的含义如下: 第一种: struct student student_1; //定义了一个student_1的结构体变量 第二种:student_t student_1 //定义了一个student_1的结构体变量 当我们调用子函数时,可能需要传递参数如下: void *run(void *play) struct stdudent *Play = (stdudent_t *)play; //因为void 指针是无类型(假设为void * a ),可以接受任何其他类型的指针, //所以一搬用于形参来接受参数,但当你要使用这个指针的时候就必须转换为具体的类型。所以进行强制转换。 附上例子说明: #include <iostream> #include <algorithm> using namespace std; typedef struct student { string

AcWing 兔子与兔子

江枫思渺然 提交于 2019-11-27 04:10:59
AcWing 兔子与兔子 Description 很久很久以前,森林里住着一群兔子。 有一天,兔子们想要研究自己的 DNA 序列。 我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DNA 序列可能包含 26 个小写英文字母)。 然后我们每次选择两个区间,询问如果用两个区间里的 DNA 序列分别生产出来两只兔子,这两个兔子是否一模一样。 注意两个兔子一模一样只可能是他们的 DNA 序列一模一样。 Input 第一行输入一个 DNA 字符串 S。 第二行一个数字 m,表示 m 次询问。 接下来 m 行,每行四个数字 l 1, r 1, l 2, r 2,分别表示此次询问的两个区间,注意字符串的位置从1开始编号。 Output 对于每次询问,输出一行表示结果。 如果两只兔子完全相同输出 Yes,否则输出 No(注意大小写)。 Data Size 1≤length(S), m ≤1000000 Sample Input aabbaabb 3 1 3 5 7 1 3 6 8 1 2 1 2 Sample Output Yes No Yes 题解: 字符串哈希。 模版题。用递推算出前i位的哈希值(1 <= i <= .size()),然后用前缀和方法得到想要的区间的哈希值。比较即可。 #include <iostream> #include <cstdio> #include

(9012年秋招刷题笔记)leetcode 187.findRepeatedDnaSequences(位运算)

醉酒当歌 提交于 2019-11-27 02:34:33
所有 DNA 由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。 编写一个函数来查找 DNA 分子中所有出现超多一次的10个字母长的序列(子串)。 示例: 输入: s = “AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT” 输出: [“AAAAACCCCC”, “CCCCCAAAAA”] 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/repeated-dna-sequences 刷题还是需要经验的,初看这道题以为考的是kmp算法,往这方面想死活想不出,后来看了题解发现原来只是一个简单的哈希匹配问题。 用10个字符串的滑动框,每滑动一次就将该字符串存入哈希表中,若字符串已经在该表中出现过,即是重复的,时间复杂度O(n),空间复杂度O(kn) =O(n)。 这里想说的是更高级的方法,至少在题解中没怎么出现过。 注意DNA的字母只有A,C,G,T四种,用二进制表示只需要两位00,01,10,11即可区分开,将10个字符串用二进制存到int(32)中也绰绰有余,对,这里说的是面试中能让面试官眼前一亮的位运算:将长10的字符串,每个字符用二进制表示然后存储在一个int数中可以更节省空间

DevOps的个人见解

≯℡__Kan透↙ 提交于 2019-11-25 18:59:35
百度和简书上,关于DevOps的定义,如下: DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。 它是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。 它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作。 这里的话,相当隐讳,这里我来解释一下。至于后来又扯到什么敏捷开发这种忽悠人的言论上,的确是让人可发一笑。 我的职业生涯除了开发C++程序,其它的时间就在进行操作维护相关的开发,解析MIB数据的工具,在信息中心进行执续集成。现在搞CI/CD。当然,这些还是我的业余,自己主要还是程序员。其它的时间都在研究这些与执续开发相关的工作。 所以,这里我们先不要讲道理,先来思考下现实世界的生物。 1. 以人这种动物为例,人有DNA。如果不把DNA的实质性含义搞清楚,不要谈什么敏捷开发这种骗人的把戏。 1.1 DNA:包含了全部的遗传信息。是一种完整的信息。这是什么意思呢?即研发的产品,所有的内涵的参数,必须向外公开。否则这个程序员,就没有存在的道理