自学
Wenweno0o
代码搬运工
展开
-
二分查找法模板
基本思想1)首先把循环可以进行的条件写成 while(left < right),在退出循环的时候,一定有 left == right 成立,此时返回 left 或者 right 都可以(2)“神奇的”二分查找法模板的基本思想(特别重要)“排除法”即:在每一轮循环中排除一半以上的元素,于是在对数级别的时间复杂度内,就可以把区间“夹逼” 只剩下 1 个数,而这个数是不是我们要找的数,单独...转载 2019-07-18 22:19:34 · 570 阅读 · 0 评论 -
爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 ...原创 2019-07-18 21:17:06 · 1638 阅读 · 0 评论 -
合并K个排序链表
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6方法 1:暴力想法 & 算法 遍历所有链表,将所有节点的值放到一个数组中。 将这个数...原创 2019-07-11 21:15:34 · 137 阅读 · 0 评论 -
加一
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。...转载 2019-07-15 22:12:19 · 150 阅读 · 0 评论 -
删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:...原创 2019-06-30 19:55:19 · 186 阅读 · 0 评论 -
合并两个有序数组
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3...原创 2019-07-10 21:15:11 · 707 阅读 · 0 评论 -
报数
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:1. 12. 113. 214. 12115. 1112211 被读作 "one 1" ("一个一") , 即 11。11 被读作 "two 1s" ("两个一"), 即 21。21 被读作 "one 2", "one 1" ("一个二" , "一个...原创 2019-07-04 21:09:35 · 241 阅读 · 0 评论 -
有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"输出: true示例 3:输入: "(]"输出: fal...原创 2019-06-29 11:31:26 · 699 阅读 · 0 评论 -
最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。示例 1:输入: ["flower","flow","flight"]输出: "fl"示例 2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。方法一:水平扫描法思路首先,我们将描述一种查找一组字符串的最长公共前缀 LCP(...原创 2019-06-28 22:38:31 · 336 阅读 · 0 评论 -
二进制求和
给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。示例 1:输入: a = "11", b = "1"输出: "100"示例 2:输入: a = "1010", b = "1011"输出: "10101"思路整体思路是将两个字符串较短的用 000 补齐,使得两个字符串长度一致,然后从末尾进行遍历计算,得到最终结果。本题...原创 2019-07-16 21:18:52 · 254 阅读 · 0 评论 -
两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -&...原创 2019-07-19 22:17:30 · 203 阅读 · 0 评论 -
贪心算法
贪心算法(Greedy Algorithm) 简介贪心算法,又名贪婪法,是寻找最优解问题的常用方法,这种方法模式一般将求解过程分成若干个步骤,但每个步骤都应用贪心原则,选取当前状态下最好/最优的选择(局部最有利的选择),并以此希望最后堆叠出的结果也是最好/最优的解。区间的元素选择贪婪法的基本步骤:步骤1:从某个初始解出发;步骤2:采用迭代的过程,当可以向目标前进一步时,就根据局部...原创 2019-08-12 23:19:37 · 407 阅读 · 0 评论 -
盛最多水的容器
给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且n的值至少为 2。 图中垂直线代表输入数...原创 2019-08-10 22:02:45 · 158 阅读 · 0 评论 -
Z 字形变换
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN...原创 2019-08-06 23:23:40 · 341 阅读 · 0 评论 -
二叉树(python实现)
1. BinaryTree (二叉树)二叉树是有限个元素的集合,该集合或者为空、或者有一个称为根节点(root)的元素及两个互不相交的、分别被称为左子树和右子树的二叉树组成。二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有个结点深度为k的二叉树至多有个结点;对任何一棵二叉树T,如果其终端结点数为N0,度为2的结点数为...原创 2019-08-04 21:28:50 · 3953 阅读 · 1 评论 -
无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 ...原创 2019-07-21 23:16:23 · 169 阅读 · 0 评论 -
x 的平方根
实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。方法一:二分法思路分析:使用二分法搜索平方根的思想很...原创 2019-07-17 21:19:25 · 370 阅读 · 0 评论 -
排序链表
在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5题解:归并排序 ...原创 2019-07-09 21:41:50 · 419 阅读 · 0 评论 -
手撕Bert代码(torch版)
目录前言先从分类说起(run_classifeir.py文件)前言BERT(BidirectionalEncoderRepresentations fromTransformers)近期提出之后,作为一个Word2Vec的替代者,其在NLP领域的11个方向大幅刷新了精度,可以说是近年来自残差网络最优突破性的一项技术了。论文的主要特点以下几点:使用了Transformer...原创 2019-07-12 22:51:45 · 2193 阅读 · 0 评论 -
自然语言处理之bert
一、简介BERT(Bidirectional Encoder Representations from Transformers)是Google AI团队最新开源的NLP模型,正如家林大咖所言:这是2018年人工智能领域最重要的事件!对于技术人员而言,这是整个人工智能领域接下来五年最重要的机遇!BERT模型具有以下两个特点:第一,是这个模型非常的深,12层,并不宽(wide),中间层只有1...原创 2019-05-30 21:02:42 · 2145 阅读 · 1 评论 -
自然语言处理之word2vec
一、背景语言模型- 在统计自然语言处理中,语言模型指的是计算一个句子的概率模型。 传统的语言模型中词的表示是原始的、面向字符串的。两个语义相似的词的字符串可能完全不同,比如“番茄”和“西红柿”。这给所有NLP任务都带来了挑战——字符串本身无法储存语义信息。该挑战突出表现在模型的平滑问题上:标注语料是有限的,而语言整体是无限的,传统模型无法借力未标注的海量语料,只能靠人工设计平滑...原创 2019-05-18 15:10:57 · 1606 阅读 · 1 评论 -
自然语言处理之fastText
一、整体结构fastText的代码整体结构如下图所示:1、fastText简介fastText是一个快速文本分类算法,与基于神经网络的分类算法相比有两大优点:1、fastText在保持高精度的情况下加快了训练速度和测试速度2、fastText不需要预训练好的词向量,fastText会自己训练词向量 3、fastText两个重要的优化:HierarchicalSoftmax、N-gr...原创 2019-05-22 20:13:21 · 1654 阅读 · 0 评论 -
自然语言处理之TextRNN
TextRNN文本分类RNN是在自然语言处理领域非常标配的一个网络,在序列标注/命名体识别/seq2seq模型等很多场景都有应用,Recurrent Neural Network for Text Classification with Multi-Task Learning文中介绍了RNN用于分类问题的设计,下图LSTM用于网络结构原理示意图,最后一步的隐层代表着对整个句子的编码,直接接全连...原创 2019-05-26 20:33:02 · 2218 阅读 · 0 评论 -
自然语言处理之TF-IDF原理以及利用其进行特征筛选
一. 什么是TF-IDFTF-IDF(Term Frequency-Inverse Document Frequency, 词频-逆文件频率).字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。词频 (term frequency, TF)指的是某一个给定的词语在该文件中出现的次数。这个数字通常会被归一化(一般是词频除以文章总词数),以防止...转载 2019-05-16 21:36:01 · 1402 阅读 · 0 评论 -
自然语言处理之Textcnn
一、 模型原理Yoon Kim在论文(2014 EMNLP) Convolutional Neural Networks for SentenceClassification提出TextCNN。将卷积神经网络CNN应用到文本分类任务,利用多个不同size的kernel来提取句子中的关键信息(类似于多窗口大小的ngram),从而能够更好地捕捉局部相关性。网络结构图如下:详细原理图:(...原创 2019-05-24 20:47:14 · 2382 阅读 · 1 评论 -
自然语言处理之LDA主题模型
一、LDA介绍LDA(Latent Dirichlet Allocation)是一种文档主题生成模型,也称为一个三层贝叶斯概率模型,包含词、主题和文档三层结构。所谓生成模型,就是说,我们认为一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到。文档到主题服从多项式分布,主题到词服从多项式分布。LDA是一种非监督机器学习技术,可以用来识别...转载 2019-05-19 21:43:32 · 1185 阅读 · 0 评论 -
自然语言处理之SVM
一、SVM原理具体原理可见:https://blog.csdn.net/d__760/article/details/80387432二、SVM文本分类实现文本分类是有监督学习的一个例子,它使用包含文本文档和标签的数据集来训练一个分类器。端到端的文本分类训练主要由三个部分组成:1. 准备数据集:第一步是准备数据集,包括加载数据集和执行基本预处理,然后把数据集分为训练集和验证集。特...转载 2019-05-19 21:33:47 · 2045 阅读 · 3 评论 -
自然语言处理之结巴分词
自然语言处理之结巴分词一、介绍jieba“结巴”中文分词:做最好的 Python 中文分词组件"Jieba" (Chinese for "to stutter") Chinese text segmentation: built to be the best Python Chinese word segmentation module.Scroll down for English ...翻译 2019-05-14 20:50:52 · 613 阅读 · 0 评论 -
自然语言处理之Hierarchical Attention
一、简介今天,基本上所有的NLP方面的应用,如果想取得state-of-art的结果,就必须要经过attention model的加持。比如machine translation, QA(question-answer), NLI(natural language inference), etc, etc…. 但是这里有个问题:统上的attention的应用,总是要求我们的task本身同时有源...原创 2019-05-28 21:39:37 · 1156 阅读 · 0 评论 -
移除元素
给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两...原创 2019-07-01 20:29:18 · 148 阅读 · 0 评论 -
搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0...原创 2019-07-03 21:38:30 · 200 阅读 · 0 评论 -
最后一个单词的长度
给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度。如果不存在最后一个单词,请返回 0 。说明:一个单词是指由字母组成,但不包含任何空格的字符串。示例:输入: "Hello World"输出: 5思路 标签:字符串遍历 从字符串末尾开始向前遍历,其中主要有两种情况 第一种情况,以字符串"Hello World"为例,从后向前遍...原创 2019-07-12 20:09:34 · 310 阅读 · 0 评论 -
罗马数字转整数
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12...原创 2019-06-27 21:39:05 · 359 阅读 · 0 评论 -
合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4方法 1:递归想法我们可以如下递归地定义在两个链表里的 merge 操作(忽略边界情况,比如空链表等): ...原创 2019-07-08 20:54:13 · 667 阅读 · 0 评论 -
实现strStr()
实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = "hello", needle = "ll"输出: 2示例 2:输入: haystack = "aaaaa", needle =...原创 2019-07-02 22:36:10 · 165 阅读 · 0 评论 -
回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。首...原创 2019-06-26 22:37:50 · 247 阅读 · 0 评论 -
整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−231,231− 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。方法:弹...原创 2019-06-26 22:05:49 · 165 阅读 · 0 评论 -
两数之和
哈希表原理介绍哈希表(Hash table,也叫散列表), 是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。哈希表hash table(key,value) 的做法其实很简单,就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然...原创 2019-06-26 21:00:57 · 153 阅读 · 0 评论 -
最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。思路 这道题用动态规划的思路并不难解决 动态规划的是首先对数组进行遍历,当前最大连续子序列和为 sum,结果为 ans 如果...原创 2019-07-07 20:32:52 · 165 阅读 · 0 评论 -
自然语言处理之朴素贝叶斯
一 、朴素贝叶斯基本原理基于朴素贝叶斯公式,比较出后验概率的最大值来进行分类,后验概率的计算是由先验概率与类条件概率的乘积得出,先验概率和类条件概率要通过训练数据集得出,即为朴素贝叶斯分类模型,将其保存为中间结果,测试文档进行分类时调用这个中间结果得出后验概率。1、基本定义分类是把一个事物分到某个类别中。一个事物具有很多属性,把它的众多属性看作一个向量,即,用x这个向量来代表这个事物,x...原创 2019-05-19 21:00:22 · 2238 阅读 · 0 评论