![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试
文章平均质量分 69
Xiami2019
这个作者很懒,什么都没留下…
展开
-
经典DP 完全背包问题
完全背包是01背包的扩展,即每个物品是无限量供应的。LeetCode322 零钱兑换比较经典的完全背包问题。定义子问题:组成金额i所需要的最小硬币数状态:T(i) = 组成金额i所需要的最小硬币数,如果不能组成则用amount + 1表示,初始数组全部初始化成amount + 1T(i) = min(T(i - k) + 1) (k为不同面值的硬币)class Solution {public: int coinChange(vector<int>& coins,原创 2021-01-19 15:35:26 · 214 阅读 · 0 评论 -
数据库基础概念
数据库:是保存有组织的数据的容器。关系数据库指由表构成的数据库,一张表就代表了一个关系。数据库软件称为数据库管理系统(DBMS),数据库是通过DBMS创建和操纵的容器。表(table):某种特定类型数据的结构化清单。数据库中的每个表都有一个名字用来标示自己。此名字是唯一的,数据库中没有其它表具有相同的名字。模式:关于数据库和表的布局以及特性的信息。可以用来描述数据库中特定的表以及整个数据库和其中表的关系。换句话说,数据库模式是数据库的逻辑设计,而数据库实例是给定时刻数据库中数据的一个快照。列:表中原创 2021-01-18 20:58:40 · 195 阅读 · 0 评论 -
Linux I/O多路复用
IO多路复用(multiplexing)本质是通过系统内核缓冲IO数据,让单个进程可以监视多个文件描述符,一旦有某个描述符就绪(读就绪或写就绪),进程就可以进行相应的操作。select、epoll、poll是Linux提供的IO多路复用API。Linux五种IO模型:阻塞IO Blocking IO非阻塞IO Nonblocking IOIO多路复用 IO Multiplexing信号驱动IO Signal Driven IO异步IO asynchronous IO前四种都属于同步IO,原创 2021-01-16 15:22:05 · 163 阅读 · 0 评论 -
Linux五种I/O模型
《Unix网络编程》中提到的五种I/O模型有Blocking I/O 阻塞I/O;NonBlocking I/O 非阻塞I/O;I/O Multiplexing I/O多路复用;Signal Driven I/O 信号驱动I/O;Asynchronous I/O 异步I/O;前四种属于同步I/O,即进程在等待相关IO操作时要进入阻塞态。异步I/O指进程等待I/O操作时可以不处于阻塞态。I/O的两个阶段:等待数据准备;进程通过CPU将数据拷贝到内存(不使用DMA的情况);...原创 2021-01-16 10:55:24 · 86 阅读 · 0 评论 -
字节跳动高频:缺失的第一个正数
给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。示例1:输入: [1,2,0]输出: 3示例2:输入: [3,4,-1,1]输出: 2示例3:输入: [7,8,9,11,12]输出: 1提示:算法的时间复杂度应该为O(n),并且只能用常数级别的额外空间。寂寞围绕这电视,垂死坚持,在两点半消失索引作为哈希键值易证,缺失的最小正数一定小于或等于n+1...原创 2020-04-20 21:47:36 · 208 阅读 · 0 评论 -
LeetCode笔记:最长有效括号
给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例1:输入: “(()”输出: 2解释: 最长有效括号子串为 “()”示例2:输入: “)()())”输出: 4解释: 最长有效括号子串为 “()()”法一:动态规划这个问题可以通过动态规划解决。定义一个dp数组,其中第i个元素表示以下标为i的字符结尾的最长有效子字符串的长度。将dp数...原创 2020-04-18 12:09:04 · 173 阅读 · 0 评论 -
二叉树的前、中、后序遍历(递归与迭代写法)
二叉树的前序遍历二叉树的前序遍历指先访问头结点,再访问左子树,再访问右子树。递归写法class Solution { vector<int> ans; void preorder(TreeNode* root) { if (root == NULL) return; ans.emplace_back(root->val); ...原创 2020-04-17 14:25:17 · 443 阅读 · 0 评论 -
每日一题:Jump Game
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到...原创 2020-04-17 11:49:38 · 136 阅读 · 0 评论 -
每日一题:矩阵
给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。两个相邻元素间的距离为 1 。示例1:输入:0 0 00 1 00 0 0输出:0 0 00 1 00 0 0/*方法一:多源广度优先搜索对于矩阵中的每一个元素,如果它的值为0,那么离它最近的0就是它自己。如果它的值为1,那么我们就需要找出离它最近的0,并且返回这个距离值。可以从0的位置...原创 2020-04-15 13:27:23 · 489 阅读 · 0 评论 -
面试题:字典序的第K小数字
给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字。注意:1 ≤ k ≤ n ≤ 109。示例1:输入:n: 13 k: 2输出:10解释:字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9],所以第二小的数字是 10。号称是字节跳动最爱考的题之一,得好好学学。字典序:就是根据字符串的前缀进行排序。...原创 2020-04-14 16:36:39 · 521 阅读 · 0 评论 -
每日一题:两数之和(链表版)
给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。示例:输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)输出:...原创 2020-04-14 11:34:24 · 292 阅读 · 0 评论 -
每日一题:求两线段的交点
给定两条线段(表示为起点start = {X1, Y1}和终点end = {X2, Y2}),如果它们有交点,请计算其交点,没有交点则返回空值。要求浮点型误差不超过10^-6。若有多个交点(线段重叠)则返回 X 值最小的点,X 坐标相同则返回 Y 值最小的点。示例1:输入:line1 = {0, 0}, {1, 0}line2 = {1, 1}, {0, -1}输出: {0.5, ...原创 2020-04-14 11:30:00 · 404 阅读 · 0 评论 -
每日一题:鸡蛋掉落
你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N 共有 N 层楼的建筑。每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。你知道存在楼层 F ,满足 0 <= F <= N 任何从高于 F 的楼层落下的鸡蛋都会碎,从 F 楼层或比它低的楼层落下的鸡蛋都不会破。每次移动,你可以取一个鸡蛋(如果你有完整的鸡蛋)并把它从任一楼层 X 扔下(满足 1 <= X &...原创 2020-04-11 16:35:17 · 132 阅读 · 0 评论 -
每日一题:翻转字符串里的单词
给定一个字符串,逐个翻转字符串中的每个单词。示例1:输入: “the sky is blue”输出: “blue is sky the”示例2:输入: " hello world! "输出: “world! hello”解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例3:输入: “a good example”输出: “exam...原创 2020-04-11 10:47:38 · 170 阅读 · 0 评论 -
每日一题:括号生成
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:输入:n = 3输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]方法一:暴力枚举枚举出括号的所有排列。为了生成所有的序列,可以使用递归的方法。长度为n的序列就是在长度为n-1的序列后面加一个“(”或“)”。class S...原创 2020-04-09 16:14:17 · 467 阅读 · 0 评论 -
每日一题:机器人的运动范围
剑指Offer上的原题地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19...原创 2020-04-08 16:58:32 · 233 阅读 · 0 评论 -
合并K个排序链表
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例1:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6方法一:K阶归并/*方法1:k阶归并*/class Solution {public: ListNode* ...原创 2020-04-07 20:01:56 · 89 阅读 · 0 评论 -
每日一题:数组旋转
给你一幅由 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]...原创 2020-04-07 14:04:18 · 141 阅读 · 0 评论 -
每日一题:编辑距离
给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删...原创 2020-04-06 21:17:45 · 144 阅读 · 0 评论 -
搜索旋转排序数组
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例1:输入: nums = [4,5,6,7,0,1,2], tar...原创 2020-04-05 23:18:53 · 149 阅读 · 0 评论 -
K个一组翻转链表
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2-&...原创 2020-04-05 20:44:55 · 122 阅读 · 0 评论 -
操作系统笔记:内存管理
操作系统内存部分的知识点总结存储器的层次结构:高速缓存Cache:KB~MB级、少量、高速、昂贵、易失;内存:GB级、中等速度、中等价格、易失;SSD:?00G级、较高速、价较高、非易失;磁盘/外村:GB~TB级、低速、价廉、非易失;内存:系统区:存放操作系统;用户区:存放用户程序和数据;存储管理的任务主要工作:将程序载入内存以让CPU执行;目的:将内存区域进行划分以...原创 2020-04-05 16:49:12 · 607 阅读 · 0 评论 -
LFU缓存机制实现
刚学完LRU就来LFU。。。设计并实现最不经常使用(LFU)缓存的数据结构。它应该支持以下操作:get 和 put。get(key) - 如果键存在于缓存中,则获取键的值(总是正数),否则返回 -1。put(key, value) - 如果键不存在,请设置或插入值。当缓存达到其容量时,它应该在插入新项目之前,使最不经常使用的项目无效。在此问题中,当存在平局(即两个或更多个键具有相同使用...原创 2020-04-05 14:35:20 · 447 阅读 · 0 评论 -
LRU缓存机制实现
运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的...原创 2020-04-04 23:51:22 · 349 阅读 · 0 评论 -
每日一题:排序数组(冒泡,插入,选择,快排,归并,堆排)
给你一个整数数组 nums,请你将该数组升序排列。简单的排序题,顺便总结一下常用的排序算法。快速排序最常见的排序,面试也比较喜欢问。注意快排中的partition操作可以用来求第K大的数字。快排的思路是每次迭代把小于(大于)某个元素的数全部放在它前面,把大于(小于)某个元素的数全部放在它后面。快速排序是不稳定排序/*快速排序*/class Solution {public...原创 2020-04-04 15:16:58 · 388 阅读 · 0 评论 -
每日一题:三维形体的表面积
在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体。每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。请你返回最终形体的表面积。实例1:输入:[[2]]输出:10实例2:输入:[[1,2],[3,4]]输出:34实例3:输入:[[1,0],[0,2]]输出:16实例4:输入:[[1,1,1],[1...原创 2020-03-26 09:52:42 · 104 阅读 · 0 评论 -
每日一题:按摩师
一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。示例1输入: [1,2,3,1]输出: 4解释: 选择 1 号预约和 3 号预约,总时长 = 1 + 3 = 4。示例2输入: [2,7,9,3,1]输出: 12解释...原创 2020-03-26 00:41:27 · 133 阅读 · 0 评论 -
二分查找
“不管是用循环还是用递归,面试官都期待应聘者能够信手拈来写出完整正确的二分查找代码,否则可能连继续面试的兴趣都没有” ——《剑指Offer》int binarySearch(int* a, int arraySize, int target){ if (a == NULL || arraySize == 0){ return -1; } int lo...原创 2020-03-17 22:10:52 · 55 阅读 · 0 评论 -
替换空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。实例1:输入:s = “We are happy.”输出:“We%20are%20happy.”限制:0 <= s 的长度 <= 10000看似很无脑的一道题目,但是如果从前往后替换的话会造成字符串的频繁移动,所以应该预估好填充后字符串的长度,然后从后往前替换。class Solution {publi...原创 2020-03-17 21:27:12 · 109 阅读 · 0 评论 -
每日一题:单词拼写
给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。注意:每次拼写时,chars 中的每个字母都只能用一次。返回词汇表 words 中你掌握的所有单词的 长度之和。实例1:输入:words = [“cat”,“bt”,“...原创 2020-03-17 20:48:30 · 347 阅读 · 0 评论 -
二叉树的下一个节点
题目:给定一棵二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左、右子节点的指针,还有一个指向父节点的指针。如果一个节点有右子树,那么它的下一个节点就是它的右子树中的最左子节点。也就是说,从右子节点出发一直沿着指向左子节点的指针,就能找到它的下一个节点。当一个节点没有右子树时,如果节点是它父节点的左子节点,则它的下一个节点就是它的父节点。如果一个节点...原创 2020-03-16 15:28:11 · 135 阅读 · 1 评论 -
每日一题:压缩字符串
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。输入:“aabcccccaaa”输出:“a2b1c5a3”输入:“abbccd”输出:“abbccd”解释:“abbccd"压缩后为"a1b2c2d1...原创 2020-03-16 10:28:38 · 270 阅读 · 0 评论 -
C++中的sizeof问题
《剑指Offer》笔记,关于sizeof对于自定义类型的问题。首先注意,sizeof是在编译阶段完成计算的。定义一个空的类型,里面并没有任何成员函数和成员变量。对该类型求sizeof,得到的结果是0。因为虽然空类型的实例中不包含任何信息,但是当我们声明该类型的实例的时候,它必须在内容中占有一定的空间,否则无法使用这些实例。具体占多少内存由编译器决定。在Visual Studio中,每个空类...原创 2020-03-15 21:47:17 · 253 阅读 · 0 评论 -
每日一题:岛屿的最大面积
给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)实例1:[[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,...原创 2020-03-15 21:29:08 · 189 阅读 · 0 评论 -
每日一题:最长上升子序列
给定一个无序的整数数组,找到其中最长上升子序列的长度。实例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n^2) 。进阶:你能将算法的时间复杂度降低到 O(n log n) 吗?很容易想到动...原创 2020-03-14 23:11:56 · 150 阅读 · 0 评论 -
约瑟夫环问题
约瑟夫环问题是一个经典的问题,题目的大概意思如下:0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。实例输入: n = 5, m = 3输出: 3输入: n = 10,...原创 2020-03-13 15:05:04 · 278 阅读 · 0 评论 -
面试题博客总结(不定期更新)
记录几个写的比较好的有关数据库OS等的面试题博客,复习复习基础知识~MySQL数据库面试题Linux面试题线程和进程SQL约束操作系统计算机网络面试题集锦计算机网络常见面试题...原创 2020-03-13 13:37:47 · 182 阅读 · 0 评论 -
Boyer-Moore 投票算法
刷题过程中遇到的一个非常巧妙的算法。是出现在“求数组中出现超过一半的数字”这道题中。数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。实例1输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 21 <= 数组长度 <= 50000思路:如果把数组中的众数(即题目中的出现超过一半...原创 2020-03-12 14:21:03 · 113 阅读 · 0 评论 -
快速排序(C++)
快速排序是一种常见的排序方法,主要采用递归分治的思想实现快速排序快速排序的主要思想是分治,通过每次选取一个基准点,将比这个点数据小的元素全部放在左边,比这个点大的元素全部放在右边,此时这个基准点已经位于正确的位置上了。换句话说,经过一趟排序,将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小。然后再对被分割出来的这两部分数据进行递归处理。最终就可以得到一个...原创 2020-03-12 14:08:51 · 118 阅读 · 0 评论 -
每日一题:字符串的最大公因子
对于字符串 S 和 T,只有在 S = T + … + T(T 与自身连接 1 次或多次)时,我们才认定 “T 能除尽 S”。输入:str1 = “ABCABC”, str2 = “ABC”输出:“ABC”输入:str1 = “ABABAB”, str2 = “ABAB”输出:“AB”输入:str1 = “LEET”, str2 = “CODE”输出:""法1:字符串1和字...原创 2020-03-12 11:38:19 · 127 阅读 · 0 评论