自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(74)
  • 资源 (1)
  • 收藏
  • 关注

原创 LeetCode算法题(数组相关)(十四)——种花问题

问题:假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数n。能否在不打破种植规则的情况下种入n朵花?能则返回True,不能则返回False。输入: flowerbed = [1,0,0,0,1], n = 1输出: True输入: flowerbed = [1,0,0,0,1], n = 2输出: False算法:...

2020-10-28 20:28:35 334

原创 LeetCode算法题(数组相关)(十三)——最大连续1的个数

问题:给定一个二进制数组, 计算其中最大连续1的个数。输入: [1,1,0,1,1,1]输出: 3解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.算法:我的算法总体思路就是,遇到1就计数累加,遇到0就计数清0重新计数。其实思路挺简单的,直接上代码吧。因为计数变量会变,因此定义两个计数变量,每次遇到0时要比较两个计数变量哪个大,把大的留下。因此就会得到最大连续1的个数。实现:class Solution { public int findMax

2020-10-28 19:12:38 489

原创 LeetCode算法题(数组相关)(十二)——多数元素

问题:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。输入: [3,2,3]输出: 3输入: [2,2,1,1,1,2,2]输出: 2算法:这道题我偷懒了,直接用了Java中的Map集合,太方便了。Map集合是一个一个的键值对,key代表数组中的每个不相同的元素,value代表出现的次数。将数组的所有元素循环完放入Map集合后,直接选择value值大于n/2的ke..

2020-10-28 18:30:03 253

原创 LeetCode算法题(数组相关)(十一)——加一

写在前面刷算法题是真的会上瘾,本来这周打算早早看完论文,没想到一刷算法题就停不下来了,论文也被搁置了。做出这道题就去看论文。。。。。问题:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。算法:刚刚看到这个题的时候,感觉出这个题的人是不是脑子冒泡了出这么简单的题,做着做着发现还是自己太年轻了。这道题要考虑到进位的问题,当然如果把数组转换成整数,加

2020-10-28 17:43:54 149

原创 LeetCode算法题(数组相关)(十)——移动零

问题:给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。输入: [0,1,0,3,12]输出: [1,3,12,0,0]算法:其实,数组移动的问题,几乎是大同小异。我们的核心问题是知道每个元素到底要移动到哪里。我的思路如下图所示:当循环完成后,在把后面cnt个元素赋值为0即可。实现:class Solution { public void moveZeroes(int[] nums) { int len...

2020-10-28 16:00:32 150

原创 LeetCode算法题(数组相关)(九)——丢失的数字

问题:给定一个包含[0, n]中n个数的数组nums,找出[0, n]这个范围内没有出现在数组中的那个数。输入:nums = [3,0,1]输出:2解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。输入:nums = [0,1]输出:2解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没有出现在 nums 中。算法:这道题目也简单的...

2020-10-28 15:37:50 625

原创 LeetCode算法题(数组相关)(八)——移除元素

问题:给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。给定 nums = [0,1,2,2,3,0,4,2], val = 2,函数应该返回新的长...

2020-10-28 12:55:53 147

原创 LeetCode算法题(数组相关)(七)——存在连续三个奇数的数组

问题:给你一个整数数组arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回true;否则,返回false。输入:arr = [2,6,4,1]输出:false解释:不存在连续三个元素都是奇数的情况。输入:arr = [1,2,34,3,4,5,7,23,12]输出:true解释:存在连续三个元素都是奇数的情况,即 [5,7,23] 。算法:这个应该算比较简单的问题了,我们可以在循环数组的同时,判断是否有连续的三个奇数。连续的问题我们可以通过...

2020-10-28 12:39:35 428

原创 LeetCode算法题(数组相关)(六)——三个数的最大乘积

问题:给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。输入: [1,2,3]输出: 6输入: [1,2,3,4]输出: 24算法:还没有看其他人怎么实现的这个功能,但是我自己写的程序耗时太多了。我的思路是这样的,对于任意给定的一个数组(长度大于等于3的数组),这个数组是无序的,我们想要求三个数乘积的最大值,就可以先将这个数组排序。排序后的数组有以下这几种情况:如果只有三个数,那么直接返回这三个数的乘积。如果数组所有的数都是负数,.

2020-10-26 10:59:55 564 1

原创 LeetCode算法题(数组相关)(五)——有序数组的平方

问题:给定一个按非递减顺序排序的整数数组A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。输入:[-4,-1,0,3,10]输出:[0,1,9,16,100]算法:看到这个题,有一个重点是数组的顺序,是非递减顺序。如果按照一个简单的思路来实现,那当然是将所有数组元素的平方,赋值给一个新的数组,之后再对新的数组进行排序。但是这样的思路做的话,题目中的非递减顺序有什么用呢?于是我写的程序利用了这个非递减顺序的条件,但是实现的过程比简单思路更复杂。下面介绍一下算法:以这个数.

2020-10-26 09:16:54 259 1

原创 LeetCode算法题(数组相关)(四)——搜索插入位置

问题:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。算法:这道题很显然,可以使用二分查找来解。只不过,二分查找的找不到该怎么办?实现:class Solution { public int searchInsert(int[] nums, int target) { int start = 0,end = nums.length-1,mid=(start

2020-10-23 15:33:19 157

原创 LeetCode算法题(数组相关)(三)——删除排序数组中的重复项

问题:给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。算法:在这个题中,很重要的一个条件就是,是一个排序数组。算法的核心就是,记录相同的元素总共有多少个,才能知道数组的元素要前移多少个。举个例子如下图所示:实现:class Solution { public int removeDuplicates(int[] nums)

2020-10-22 21:11:31 92

原创 LeetCode算法题(数组相关)(二)——两数之和

问题:给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。算法:首先,我们用一个具体的例子来走一遍,两个数是怎么找出来的。假如给定的整数数组为[15,11,7,2],那么,找到7和2的过程如下图所示:我们能看到找到7和2的过程中有一个规律,那就是下标的规律。假如下标用(i,j)表示,可以看到j逢四进一,当j进一之后,重新赋值j等于i+1。...

2020-10-22 20:49:00 210

原创 LeetCode算法题(数组相关)(一)——转置矩阵

问题:给定一个矩阵A,返回A的转置矩阵。矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。作为一个算法的菜鸟,这是自己独立做出来的第一道题。虽然很简单,但也是里程碑,从这里开始我的刷题之旅。算法思想:实在想不到什么能减少复杂度的算法,一个很简单的思想就是:step1:将给定矩阵A的行列长度分别计算出来step2: 新创建一个二维数组B,将二维数组B的长度和宽度,分别设置为给定矩阵的宽度和长度。step3:通过B[j][i] = A[i][j]来对矩阵进...

2020-10-22 20:21:33 262

原创 MapReduce在Yarn上的运行流程

运行示意图:MapReduce程序是在Yarn上运行的,job任务还没提交到集群之前,客户端要先进行切片,默认是按照128M来切片。切片的信息会序列化成一个文件到hdfs上。接下来客户端将任务提交给了yarn集群,想让yarn集群来运行。Yarn集群又由Resource Manager和Node Manager做成,Resource Manager是管理者,Node Manager是真正要运行任务的节点。yarn接受到了客户端的请求,会要求在某个Node Manager上开辟一个容器,启动APPMa

2020-05-12 00:16:51 1008

原创 C语言思维导图

为了复习C语言,因此按照自己的复习重点来画了一个思维导图,希望能给各位同行带来参考。如有错误请指正。

2020-05-04 17:46:47 739 1

原创 稀疏矩阵压缩存储(C语言实现)

背景需求在一个矩阵中,如果非0元素远远少于0元素,那么这个矩阵就是稀疏矩阵,在实际应用中,计算机会耗费大量的空间存储这些无意义的0元素,如果能够压缩一下,将会减少计算机的开销。本篇文章以五子棋的棋局保存为背景,用c语言实现原始稀疏矩阵转换为压缩矩阵并且存储为文件,棋局复盘则读取文件将压缩矩阵转换为原始稀疏矩阵。图解假如有如下棋局,如果要保存,可以用1来表示红棋子,2来表示黑棋子,0表示...

2020-04-17 13:22:24 5190

原创 自然语言处理(十四)——隐马尔科夫模型(HMM)初步理解

一、前言本文主的目的是对隐马尔科夫模型进行初步的理解,也就是明白这个隐马尔科夫模型到底是个什么东西,明报这个隐马尔科夫模型到底有什么用。至于怎么利用这个马尔科夫模型做一个解决语音识别领域问题的小成品,本文还没有涉及,本人水平有限,正处在小白学习的阶段,因此有什么错误的地方,望各位不吝赐教。下面进入正题,这里用知乎一位答主的例子黄以及志洪老师课程来理解隐马尔科夫模型。二、骰子案例来理解HMM...

2020-01-08 11:23:34 711

原创 自然语言处理(十三)——马尔科夫链运用之page rank算法

一、绪论上一篇文章介绍了马尔科夫链的概念以及相关的计算,例如转移概率,转移概率矩阵等。明白了马尔科夫链是个什么以后,它到底有什么用处?当然用处是非常大,可以说马尔科夫链对谷歌的诞生有非常大的影响。谷歌初创时,搜索引擎还不成熟,人们输入关键字进行搜索时,出来的网页可能质量并不怎么让人满意。因为当初的搜索引擎,在根据关键字爬取网页后,就简单的根据字数统计等等这些指标来排序,因此高质量的网页可能会被...

2020-01-07 13:54:29 515

原创 自然语言处理(十二)——马尔科夫过程

一、绪论1.随机过程:就是一族(无限多个)随机变量{ X(t), t},其中,t是参数,它属于某个指标集T,T称为参数集。通常,我们把t看作是时间。X(t)为时刻t时过程的状态。所有的状态称为随机过程的状态空间。接下来用一个例子来理解一下这个随机过程,物理中的分子无规则运动中,随时间的变化,分子的运动一时刻是一时刻的位移,运动的位置也没有什么具有的规则。这就是一个随机过程的例子,可以看出想...

2020-01-06 14:19:58 2325

原创 自然语言处理(十一)——产生式模型和判别式模型

前言产生式模型和判别式模型的区别,下面会用一个天气判断的案例来解释。首先我们需要了解一下什么是分类器,用数学的符号来描述分类器就是:输入x以及分类变量y,求p(y | x)。例如,x是云量、气温、湿度。y是天气状况(下雨?不下雨?)。分类器的作用就是分析云量等这些指标,来得出下雨或者不下雨的概率。一、两种模型的思想到底怎么计算下雨的概率,产生式模型和判别式模型有不同的计算思想。产生式模...

2020-01-05 21:38:35 585

原创 自然语言处理(十)——概率图模型之贝叶斯网

一、概念概率图模型在概率模型的基础上,使用了基于图的方法来表示概率分布(或者概率密度、密度函数),是一种通用化的不确定性知识表示和处理方法。在概率图模型的表达中,结点表示变量,结点之间直接相连的边表示相应变量之间的概率关系。这是教材上的解释,概率论我没系统学过,光看这个概念我是不懂的,下面是教材上的例子:我们现在想求联合概率分布时,也就是每一种情况的概率,季节有4种选择,有2种病,两...

2020-01-05 17:34:28 359

原创 自然语言处理(九)——数据平滑

一、概念什么是数据平滑?我通过一个例子来解释一下。假设有如下语料库:{ 今天 天气 不错, 天气 晴朗, 晴朗 的 天气,}如果要计算句子s=“晴朗天气”的概率(用二元语法模型,自然语言处理(七)已经介绍过),有如下计算过程。p(天气 | 晴朗) = c(晴朗天气)/ c(晴朗) == 0显然上面计算得到的概率不怎么准确,晴朗天气总有出现的可能,最...

2020-01-04 16:49:34 2774

原创 自然语言处理(八)——语言模型性能评价

一、概念信息熵:熵这个概念是香农从热力学中引进的,热力学中的熵是代表分子状态混乱程度,在信息论中熵又称为自信息,可以视为描述一个随机变量的不确定性的数量。它表示信源X每发一个符号(不论发什么符号)所提供的平均信息量。一个随机变量的熵越大,它的不确定性越大,那么,正确估计其值的可能性就越小。越不确定的随机变量越需要大的信息量用以确定其值。这是宗成庆老师的书《统计自然语言处理》里面的解释,光看...

2020-01-03 22:35:57 576

原创 自然语言处理(七)——n元语法模型计算句子出现概率

一、前言区别于形式语言进行自然语言处理,语言模型在自然语言处理中不关心句子的语法,而是关心这个句子出现的概率,即使一个句子完全符合语法逻辑,但是在语料库中未出现,我们仍然可以认为这个句子出现的概率为0。目前计算句子的概率一般采取n元语法模型,因此接下来就引入n元语法模型二、n元语法模型介绍n元语法模型之前,要懂一个理想情况下计算概率的模型。对于一个由m个基元(“基元”可以为字、词或短语...

2020-01-02 21:26:53 4942

原创 自然语言处理(六)——词性消歧

一、前言词性标注就是将每个单词的词性标注出来,标注的实现可以利用语料库,但是同一个单词在不同的句子可能会有不同的词性,这时就需要词性消歧。下面举一个例子。以下三个句子,分别标注了词性,np是名词,vbn是过去分词,vbd是过去式,by是介词by(1) Chapman/np killed/vbn John/np Lennon/np John/np(2) Lennon/np was...

2020-01-02 11:22:37 746

原创 自然语言处理(五)——单词纠错

一、概念编辑距离(Edit Distance):是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。精准的定义就不多说了,直接上例子来理解这个编辑距离。编辑主要有三个操作:插入、删除、修改。例如:goood变为good,只需要删除一个o,因此编辑距离是1。gd变为god。只需要插入一个o,因此编辑距离是1。gwd变为god,只要修改w为o,因此编辑距离是1。cutoff编辑距离(...

2020-01-02 07:46:06 1536

原创 自然语言处理(四)——下推自动机接受的语言

一、概念下推自动机的定义:一个不确定的PDA可以表达成一个7元组: M = (Σ, Q, Γ, δ, q0, Z0, F) 其中,Σ 是输入符号的有穷集合; Q 是状态的有限集合; q0 ∈ Q 是初始状态; Γ 为下推存储器符号的有穷集合; Z0∈Γ 为最初出现在下推存储器顶端的开始符号; F 是终止状态集合,F ⊆ Q; δ 是从 Q×(Σ∪{ε})×Γ 到 Q×Γ* 的子集的映射。映...

2020-01-01 14:26:56 3048 2

原创 自然语言处理(三)——自动机理论

前言如何判断一个句子是否符合文法的规则,自动机是很简便的方法。四种文法对应四种自动机来判断验证,接下来就介绍一下四种文法和四种自动机的对应。一、有限自动机确定的有限自动机 (Definite Automata, DFA)确定的有限自动机 M 是一个五元组: M = (Σ, Q, δ, q0, F) 其中,Σ 是输入符号的有穷集合; Q 是状态的有限集合; q0 ∈ Q 是初始状态;...

2019-12-31 12:12:20 1374

原创 自然语言处理(二)——乔姆斯基4型文法

一、正则文法(3型)定义:如果文法 G=(N, Σ, P, S) 的 P 中的规则满足如下形式:A → B x(这里注意B只是一个形式,代表非终结符),或 A → x,其中 A, B ∈ N,x ∈ Σ, 则称该文法为正则文法(简写为 FSG)或称3型文 法。(左线性正则文法)(如果 A → x B,则该文法 称为右线性正则文法。)例如有如下规则:A→ Ax,A → x。那么可以推出AA...

2019-12-31 09:54:53 3117 1

原创 自然语言处理(一)——文法(形式语言)基本概念

一、基本概念1.字符串:假定 Σ 是字符的有限集合,它的每一个元素称之为字符。由 Σ 中字符相连而成的有限序列被称之为Σ上的字符串。这是教材对于字符串的定义,通俗地理解,字符串就是一连串的字符。不包括任何字符的字符串称为空串,记作 ε。包括空串的 Σ 上字符串的全体记为 Σ*。例如Σ=abcd。 Σ*可以理解为a、b、c、d这四个字符的任意组合再加上空串ε的集合。2.字符串的连接:...

2019-12-30 22:21:33 2243

原创 时间复杂度怎么算

一、什么是时间复杂度?一个语句的频度是指该语句在算法中重复执行的次数,算法中所有语句的频度之和是关于问题规模n的函数T(n),时间复杂度就是分析T(n)的数量级来得到的。算法的执行时间与T(n)的数量级成正比,而并不是相等。T(n)的数量级也记为O。二、常见的时间复杂度排序O(1) < O()<O(n)<O(n)<O()<O()<O()<O(n...

2019-11-28 00:05:29 3025

原创 单链表的倒置(c语言实现)

分析:如下图所示代码如下:void invert(struct Node *head){ struct Node *p0,*p1,*temp,*p2; p0 = head->next; p1 = p0->next; temp = p0; while(p1!=NULL){ p2 = p1->next; //必须放在前面,否则死循环 p1->ne...

2019-11-26 17:23:34 2983

原创 单链表删除节点(通过给定值删除)

分析:如下图所示代码如下:struct Node * Del(struct Node *head,int nodeData){ struct Node *p1,*p2; //p1指向待删除的节点,p2指向p1前面的节点 int flag = 0; //定义一个标志,如果是1 则已经找到要删除的节点 如果是0 则没找到 p1 = head; //p1先指向头结点,从头开始找 w...

2019-11-26 16:40:27 1353

原创 单链表的创建(c语言实现)

一:动态内存分配创建链表(链表的元素顺序向后添加)分析:顺序向后添加的原理如下图所示,主要定义p、q两个指针代码如下:struct Node *CList(){ //创建链表,新节点总顺序向后 struct Node *head,*p,*q; int ch; head = (struct Node *) malloc(sizeof(struct Node)); he...

2019-11-26 14:09:57 14530 3

原创 用递归的方法计算1+2+3+...+n

分析:这个同阶乘的道理一样,递归实现很简单代码如下:#include <stdio.h>int sum( int n){ if(n<=0) printf("data error"); else if(n ==1) return 1; else return n+sum(n-1);}int main(){ int n; scanf("%d",&...

2019-11-25 18:54:25 27580 1

原创 从键盘上输入任意字符,输出该字符的ascii码值

分析:c语言中字符其实本质和整型一样,输出格式改为%d。代码如下:#include <stdio.h>int main(){ char c; scanf("%c",&c); printf("%d",c);}运行结果:...

2019-11-23 18:55:00 28310

原创 选手比赛成绩排名

分析:同学生成绩的道理一样,就是一个冒泡排序,这次是从小到大代码如下:#include <stdio.h>#define N 5struct Comp{ char name[50]; double score;};void DDubbleSort(struct Comp comp[]){ for(int i = 0; i < N-1 ; i++){ f...

2019-11-23 18:48:09 612

原创 去掉一个最高分,去掉一个最低分,剩下的平均值作为最终成绩。(c语言实现)

分析:这个也比较简单,用一个数组接收评委的分数,然后累加。最后找到最高分和最低分减去平均一下就可以。代码如下:#include <stdio.h>#define N 5int main(){ double score[N],sum=0.0,avg=0.0; for(int i = 0 ; i<N ;i++){ printf("第%d位评委的分数:\n",i+...

2019-11-23 17:57:55 25259 9

原创 编程求1*2+3*4+..+99*100

分析:本题很简单,只要定义一个循环累加即可。#include <stdio.h>int main(){ int i,sum = 0; for(i = 1;i<=99;i+=2){ printf("%d*%d\n",i,i+1); sum+=i*(i+1); } printf("%d\n",sum);}运行结果:...

2019-11-23 17:34:10 7005 1

Linux安装 (1).doc

本文档含有Linux安装的非常细致,非常完整的教程。从VMware开始,每一步安装都有详细截图引导,直到最后克隆出三台虚拟机,并且完成配网,实现三台虚拟机免密连接,为Hadoop分布式平台搭建提供基础。

2020-03-31

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除