自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

handsomeKyne

披一身上善若水,走一生厚德载物

  • 博客(82)
  • 收藏
  • 关注

原创 深入浅出系列1:词向量

深入浅出系列1:词向量0、文章结构词向量简介one-hot编码统计语言模型分布式表征和SVD分解神经网络语言模型word2vecfastText(新增文章补充,敬请期待)GloVe(新增文章补充,敬请期待)Bert/ELMO/GPT提取词向量(新增文章补充,敬请期待)1、词向量简介词向量(word vector/word embedding):为了计算机理解语言,将词映射为实体向量,常见的词向量表示方法有:词袋模型:one-hot、tf-idf、textrank等主题模型:

2021-01-31 14:28:10 842

原创 每日一题:1047. 删除字符串中的所有相邻重复项

每日一题:1047. 删除字符串中的所有相邻重复项1、题目给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:"abbaca"输出:"ca"解释:例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操

2021-03-09 23:09:41 233

原创 每日一题:剑指 Offer 59 - I. 滑动窗口的最大值

每日一题:剑指 Offer 59 - I. 滑动窗口的最大值一、题目给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值--------------- -----[1 3 -1] -3 5 3 6 7 3 1 [3 -1

2021-03-08 23:43:07 132

原创 每日一题:单调栈系列

每日一题:单调栈系列1、题目一:496. 下一个更大元素I给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。示例 1:输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输出: [-1,3,-1]解释:

2021-03-06 19:12:14 202

原创 每日一题:232.用栈实现队列

每日一题:232.用栈实现队列1、题目请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有 push to top, pe

2021-03-05 21:01:10 143

原创 每日一题:剑指 Offer 53 - I. 在排序数组中查找数字 I

每日一题:剑指 Offer 53 - I. 在排序数组中查找数字 I1、题目统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0限制:0 <= 数组长度 <= 500002、解法题目比较清晰,最简单暴力的方法是从左到右进行进行判断统计,时间复杂度为O(n),但是我们确忽略了数组是排序好的特点(这里

2021-03-03 23:24:00 170 3

原创 每日一题:581.最短无序连续子数组

每日一题:581.最短无序连续子数组1、题目给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。请你找出符合题意的 最短 子数组,并输出它的长度。示例 1:输入:nums = [2,6,4,8,10,9,15]输出:5解释:你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。示例 2:输入:nums = [1,2,3,4]输出:0示例 3:输入:nums = [1]输出:0

2021-03-01 23:28:35 245 2

原创 每日一题:剑指Offer 40.无序数组中最小的K个数

每日一题:剑指Offer 40.无序数组中最小的K个数1、题目输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。示例 1:输入:arr = [3,2,1], k = 2输出:[1,2] 或者 [2,1]示例 2:输入:arr = [0,1,2,1], k = 1输出:[0]限制:0 <= k <= arr.length <= 100000 <= arr[i] <= 1

2021-02-27 19:26:10 111

原创 每日一题:面试题01.07.旋转矩阵

面试题01.07.旋转矩阵1、题目给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。不占用额外内存空间能否做到?(可以使用临时变量)示例 1:给定 matrix = [ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2], [9,6,3]]示例 2:给定 matrix =[ [ 5, 1, 9,11], [ 2, 4,

2021-02-27 18:11:33 163

原创 每日一题:剑指Offer 29.顺时针打印矩阵

每日一题:剑指Offer 29.顺时针打印矩阵1、题目输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]限制:0 <= matrix.length <= 1000 &l

2021-02-27 17:12:23 77

原创 每日一题:3.无重复字符的最长子串

每日一题:3.无重复字符的最长子串1、题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,

2021-02-26 00:29:23 174 3

原创 每日一题:867.转置矩阵

每日一题:867.转置矩阵1、题目给你一个二维整数数组 matrix, 返回 matrix 的 转置矩阵 。矩阵的 转置 是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[1,4,7],[2,5,8],[3,6,9]]示例 2:输入:matrix = [[1,2,3],[4,5,6]]输出:[[1,4],[2,5],[3,6]]提示:m == matrix.lengthn == mat

2021-02-25 23:16:25 176

原创 每日一题:2.两数相加

每日一题:2.两数相加1、题目给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。`示例 1:``输入:l1 = [2,4,3], l2 = [5,6,4]``输出:[7,0,8]``解释:342 + 465 = 807.``示例 2:``输入:l1 = [0], l2 = [0]``输出:[0]``示

2021-02-25 00:49:42 143

原创 每日一题:1052. 爱生气的书店老板

每日一题:1052. 爱生气的书店老板1、题目今天,书店老板有一家店打算试营业 customers.length 分钟。每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开。在某些时候,书店老板会生气。 如果书店老板在第 i 分钟生气,那么 grumpy[i] = 1,否则 grumpy[i] = 0。 当书店老板生气时,那一分钟的顾客就会不满意,不生气则他们是满意的。书店老板知道一个秘密技巧,能抑制自己的情绪,可以让自己连续 X 分钟不生气,但却只能使用一

2021-02-23 09:01:15 160

原创 javascript学习基础要点(三)

JavaScript 正则表达式 和 变量提升语法/正则表达式主体/修饰符(可选)使用字符串方法在 JavaScript 中,正则表达式通常用于两个字符串方法 : search() 和 replace()。search() 方法 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。replace() 方法

2016-12-28 15:09:20 371

原创 javascript学习基础要点(二)

向未声明的 JavaScript 变量分配值如果您把值赋给尚未声明的变量(未声明),该变量将被自动作为全局变量声明。这条语句:carname="Volvo";将声明一个全局变量 carname,即使它在函数内执行。HTML 中的全局变量在 HTML 中, 全局变量是 window 对象: 所有数据变量都属于 window 对象。

2016-12-28 14:26:01 324

原创 javascript学习基础要点(一)

JavaScript 用法HTML 中的脚本必须位于 与 标签之间。脚本可被放置在 HTML 页面的 和 部分中。注:那些老旧的实例可能会在 标签中使用 type="text/javascript"。现在已经不必这样做了。JavaScript 是所有现代浏览器以及 HTML5 中的默认脚本语言。外部的 JavaS

2016-12-28 09:54:51 449

原创 css组合符

css组合符:包括各种简单选择符的组合方式。分类:后代选取器(以空格分隔),子元素选择器(大于号),相邻兄弟选择器(+),普通兄弟选择器(~)(1)后代选取器:div p{background-color:yellow;}既属于div又属于p的区域。(2)子元素选择器div>p{background-color:yellow;}注意:子元素只能作

2016-12-27 09:33:23 371

原创 回溯法案列总结

格雷码转换本来是由一定规律的,但这里使用回溯法实现,具体解释在代码中有。注意n输入的是有多少位。classSolution {public:    vector grayCode(int n) {        bitset bits;//32位,每一位默认为0。        vector result;        help(bits,resu

2016-08-28 16:00:32 530

原创 字符串实现大数相加

#include#include#include#includeusing namespace std;char int2char(int x){    stringstream s;    s    char res;    s>>res;    return res;}int main(){    string str1,st

2016-08-10 21:47:36 1004

原创 给定一个序列,输出所有满足栈规则的所有情况

1、列出全排列2、判断全排列是否可以是对应序列的满足栈规则的输出#include#includeusing namespace std;#includebool isstack(vector in, vector out){    bool res=true;    if(in.size()==out.size()){        stack help

2016-08-10 20:58:59 1593

原创 STL关联式容器之散列表——hashtable

以散列表为基础的关联式容器深受人们的喜欢,虽然它们目前还不是STL的标准,但是SGI的STL已经包含了这些内容。前面学习的关联式容器都是基于红黑树这样一种二叉搜索树,也正因为这样,如果要求搜索时间具有对数平均时间,那么需要数据有足够的随机性。而哈希表这种数据结构,在插入、删除、搜索等操作也具有“常数平均时间”的表现,而这种表现是以统计为基础的,不需要依赖数据输入的随机性。

2016-07-13 15:58:01 785

原创 STL关联式容器之映射表——map

1、map的特性和set一样,map的元素都会自动根据键值进行自动排列,map的所有元素都是pair类型,同时拥有实值和键值,pair的第一个元素为键值,第二个元素为实值,且map不允许两个键值相同的元素。在学习map之前,我们先学习一下pair。templatestruct pair{  typedef T1 first_type;  typedef T2 secon

2016-07-13 09:50:10 616

原创 STL关联式容器之集合set

这一节,我们将学习STL关联式容器集合——set。1、set的特性所有元素都会根据元素的键值自动排列,set的键值就是实值,并且set不允许两个元素相同的键值。2、我们可以通过set的迭代器改变set的元素值吗?答案是不行,因为set的元素值就是键值,因此这关系到排列规则,如果我们擅自修改元素值,会破坏set内部的排列规则。也正因为这样,STL的set的迭代器是const_iter

2016-07-13 09:28:40 475

原创 STL关联式容器之红黑树

这一节我们来学习红黑树,如果你能够自己实现一个红黑树,那么对它的理解将会更加深刻。1、树的总览根节点到任何节点之间有一条唯一路径。路径长度:指路径所经过的边数。节点的深度:根节点至该节点的路径长度。根节点的深度为0。节点的高度:该节点到其最深叶节点的高度。根节点的高度最大。注意高度和深度的区别。可以这么理解,高度是向上变大的,而深度是向下变大的。节点大小:该节点所有子代

2016-07-12 16:48:44 1399

原创 STL关联式容器之总览

在上一个系列中,我们学习了STL序列式容器,如vector,list,deque以及某些配接器如stack,queue等。前面我们提过,STL有两种容器,一种即STL序列式容器,另一种即我们即将学习的关联式容器。标准的STL关联式容器有集合(set)和映射表(map),并且还有他们的衍生物——multiset(多键集合)和multimap(多键映射表)。这些容器的底层结构均是红黑树rb-tre

2016-07-12 15:48:08 395

原创 STL序列式容器之优先队列——priority_queue

优先队列有一个有权值的队列,由于是一个队列,所以只支持在尾部插入元素,在头部弹出元素,弹出元素的权值最大。由于含有权值,所以优先队列中的元素并未按照被推入的次序进行排序,而是自动按照元素的权值进行排序,权值最高的排在最前面。因此,这就用到我们上一篇博文中学到的堆,STL缺省情况下,是用一个最大堆完成的。由于优先队列只有权值最高的元素才有可能被外界利用,因此优先队列不提供迭代器。由于优先队列

2016-07-12 10:55:02 804

原创 STL序列式容器之heap(注heap并不归属于stl组件)

在学习优先队列之前,我们有必要学习一下堆,heap。注:heap并不归属于STL组件,它是幕后英雄,扮演则有限队列priority_queue的助手。我们知道优先队列可以将元素以任意次序压入队列中,但是弹出队列元素时,总是弹出优先级最高的元素。最大堆就满足这样的性质。

2016-07-12 10:11:23 583

原创 STL序列式容器之队列——queue

上一节我们学习的stack是后入先出,这一节学的队列queue遵循先入先出的规则。同stack一样,queue的压入和弹出元素操作为push和pop操作。学习queue可以和stack进行对照,两者基本的框架和思路都是一样的。比如1、queue也没有迭代器。2、queue缺省情况下也是以双端队列deque为底层结构。3、queue也可以以list为底层结构,如#incl

2016-07-11 23:02:12 552

原创 STL序列式容器之堆栈——stack

stack其实是一个配接器(adapter),因为SGI的STL缺省情况下是以deque作为底层结构的,即修改某物接口,形成另一种数据结构。到目前为止,我们总结一下学过的容器的压入和弹出操作。vector:只能在尾端操作,push_back, pop_back;list:由于stl中的list是一个双向环状链表,可以在头部和尾部进入操作,push_front,push_back,pop

2016-07-11 22:56:00 522

原创 STL序列式容器之双端队列——deque

前面我们学习过序列容器vector,vector是占用一段连续内存空间,并且是单向开口的,只能在尾部进行压入或者弹出元素(其实从技术上讲,vector也可以实现在头部实现插入和删除操作,但是效率非常低,因此SGI的STL并不支持在头部操作元素)。现在我们要学习的双端队列也是占用一段连续内存空间(实际上是逻辑连续,实际内存不一定连续),但是是双向开口的。1、deque和vector的最大差异

2016-07-11 22:41:55 641

原创 STL序列式容器之list(双向链表)

和vector相比,list的实现更加复杂,因为它并不要求空间是连续存储的,它的好处是已知位置的元素插入和移除都是常数时间。1、list的节点由于list是双向链表,因此list的节点需要指向前驱节点的指针以及指向后继节点的指针。2、list的迭代器由于空间并不连续,因此list无法支持随机访问元素的能力,所以list使用的迭代器是双边迭代器,bidirectional itera

2016-07-10 23:53:01 616

原创 STL序列式容器之vector

首先我们需要对STL的容器有一个宏观的概念,然后在仔细讨论vector。STL容器分为两类:分别是序列式容器和关联式容器。序列式容器:vector, heap, priority_queue, list, slist, deque, stack, queue.需要说明的是,heap内含一个vector,priority_queue内含一个heap,stack内含一个deque,qu

2016-07-10 23:14:38 408

转载 STL源码解析——traits(特性)编程技巧

侯捷老师在《STL源码剖析》中说到:了解traits编程技术,就像获得“芝麻开门”的口诀一样,从此得以一窥STL源码的奥秘。如此一说,其重要性就不言而喻了。       之前已经介绍过迭代器,知道了不同的数据结构都有自己专属的迭代器,不同的迭代器也有不同的特性,由于算法的接口是统一的,通过迭代器的不同属性,算法自动选择正确的执行流程,在完全任务的同时,也尽可能提高算法的执行效率。那算法如何获知

2016-07-10 21:59:49 476

原创 STL空间配置器

本文是对STL源码解析第二章的学习总结,不足之处,欢迎批评指出。1、SGI标准的空间配置器,std::allocator虽然SGI也定义了一个部分标准的,名为allocator的配置器,但SGI自己从未使用过,主要原因是效率不佳。它只是将c++的operator new和operator delete做一层薄薄的封装而已。注意operator new只负责内存分配,而new还要复制构造。实

2016-07-10 21:42:20 257

原创 c风格的字符串

今天要实现一个自己的反转函数,反转char*字符串,发现对char写入时一直提示访问出错。重新学了一下c风格的字符串,总结一下c风格的字符串,以及出现这个问题的原因。重要:1、字符串字面值的类型是const char类型的数组,因此是不可以直接改变的。2、字符串字面值是以null为结束的字符数组。3、永远不要忘记char*是以null为结束的,因此分配内存大小时要多加1.因此这

2016-07-09 09:56:47 266

原创 cracking the code interview——c++实现

本系列是我对cracking the code interviews的c++实现和学习,不足之处欢迎批评指正。题目:实现一个算法,判断其中的字符是否都不相同。如果不能用数据结构,又该如何实现?解:首先得向面试官问清楚是Unicode还是ASCII编码,这里我们假设为ASCII编码。具体代码实现如下:#include#includeusing namespace std;

2016-07-09 09:03:53 812

原创 招商银行面试心得

本人小硕一枚,水平有限,望大神轻喷,若有不足之处,请毫不留情的指出。^_^慢慢地开始习惯用博客开始记录学习和生活的点点滴滴。今天是2016-6-30,参加了深圳总行的系统管理员面试,具体面试内容这里不详细讨论。主要想表达一下几点:1、面试官都很nice,三个领导以及北京方面有一个面试官用视频面试,到最后我才知道,镜头那边竟然还有一个面试官。是不是感觉有一种被窥视的感觉,其实感觉还好

2016-06-30 21:53:46 8563

原创 程序员面试(c++)——面向对象

本文是对《程序员面试宝典》第10章——面向对象的学习总结,不足之处,欢迎多批评指正。1、面向对象的三大原则:封装、继承和多态。什么是封装?就是将数据和对这些数据的操作统一到一个类里面。封装的思想很早之前就已经体现了,如通过头文件#include,将函数声明、定义等统统封装到某个头文件中。c++的namespace命名空间也是封装的一个典型例子。2、类中的成员变量静态成员变量是比

2016-06-29 21:49:57 462

原创 程序员面试(c++)——指针与引用

本文是对《程序员面试宝典》第七章——指针与引用的学习总结,不足之处,欢迎批评指正。1、指针和引用的区别?(1)指针可以指向空值,int* p=null;而引用则必须总是指向某个对象。(2)指针在使用之前应该总要被测试是否合法,而引用则不需要。(3)引用一旦指向某个对象,则不可以在指向其他对象,然而它指向对象的值是可以被修改的。(4)由于以上不同决定了,指针和引用的应用是不同的。

2016-06-29 20:55:18 917 1

空空如也

空空如也

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

TA关注的人

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