自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 数据库 -- 内连接、外连接和自然连接

自然连接  自然连接作用于两个关系(也可理解为两个表),并产生一个关系作为结果。  相比于笛卡尔积,它会将第一个关系和第二个关系的所有出现的元组(即数据表的行)都进行连接。而自然连接只考虑哪些在两个关系模式中都出现的且取值相同的元组对。&   另外需要注意的是,自然连接不会重复列出在两个关系都出现的属性。而且结果的顺序也是有规定的:先是两个关系模式中的共同属性,然后是只出现在第一个关系的属性,最后是只出现在第二个关系模式的属性。Sql 格式如下:select A1, A2, ... An

2020-11-18 14:09:20 2221

原创 动态规划原理 -- 最优子结构&&子问题重叠

适合应用动态规划方法求解的最优化问题应该具备两个要素:最优子结构和子问题重叠1. 最优子结构判断依据  如果一个问题的最优解包含其子问题的最优解,此问题具有最优子结构性质。发掘最优子结构性质的通用模式证明问题最优解的第一个组成部分是做出一个选择,做出这次选择会产生一个或多个问题;对于一个给定的问题,在其可能的第一步选择中,假定知道哪种选择是最优的;给定可获得最优解的选择后,确定本次选择会产生的子问题,以及如何最好的刻画子问题空间。作为构成原问题最优解的组成部分,每个子问题的解就是它本身的最

2020-11-16 11:18:25 2915

原创 计数排序 -- GoLang实现

前提假设  假设 n 个输入元素中每一个都是在 0 到 k 区间内的一个整数,其中 k 为某个整数。基本思想  对每一个输入元素 x,确定小于 x 的元素个数。然后利用这个值,可以直接把 x 放到它在输出数组中的位置。例如  对数组 [ 2, 5, 3, 0, 2, 4, 0, 3 ] 进行计数排序,其中小于 4 的元素有 6 个,那么 4 应该放在第 7 个输出位置上。伪代码实现:说明:假设输入是一个数组 A[ 1 … n ], A.length = n。还需要另外两个数组  B[ 1…n

2020-11-07 14:32:34 508

原创 Erlang -- Efficiency Guide构造和匹配二进制

4 构造和匹配二进制二进制可以像如下例子一样高效地构造:建议my_list_to_binary(List) -> my_list_to_binary(List, <<>>).my_list_to_binary([H|T], Acc) -> my_list_to_binary(T, <<Acc/binary,H>>);my_list_to_binary([], Acc) -> Acc.二进制也可以像如下例

2020-11-05 16:43:25 159

原创 Erlang -- Efficiency Guide 常见的警告

3 常见的错误本节罗列出几个需要注意的模块和NIF,不仅仅是从性能的角度。3.1 定时器模块使用 erlang:send_after/3 和 erlang:start_timer/3 接口创建定时器比使用 STDLIB 里的 timer 模块提供的timer接口创建定时器更加高效。timer模块使用一个单独的进程管理定时器。如果许多进程频繁地创建和取消计时器(特别是在使用SMP仿真器时),则该定时器管理进程很容易过载。在 timer 模块有一些函数(例如 timer:tc/3 和 timer:sle

2020-11-04 23:36:32 113

原创 Erlang -- Efficiency Guide Erlang 性能的七个误区

2 Erlang 性能的七个误区有一些真理存活的时间太长了,远远超出了其最佳的存在时期。这或许是因为人与人之间"信息"的传递速度比一篇单一的声明(例如:非尾递归变得更快了。)发布速度要快。本文尝试消除这些已经成为神话的旧真理(或者半真理)。2.1 误区:尾递归比非尾递归快的多根据"真理",使用尾递归构造一个逆序的列表然后再调用 lists:reverse/1 函数比直接使用非尾递归构建一个正序的列表要快。原因是非尾递归比尾递归消耗更多的内存。在R12B版本之前,这在某种程度上来说是正确的。在R7B

2020-11-04 19:16:09 185

原创 Erlang -- Efficiency Guide 简介(译文)

1 简介1.1 目的“过早的优化是万恶之源” (D.E.Knuth)第一,高效的代码是结构清晰和整洁的,它基于良好的整体架构和优良的算法。第二,高效的代码可以绕过文档化的接口,并利用当前已实现的且不具有明显缺陷的代码来高度实现。理想情况下,你的代码只包含上述的第一种类型的代码。如果这样做程序的运行速度还是太慢,你可以对程序进行概要分析,找出性能的瓶颈所在的代码位置,并只对瓶颈代码进行优化,让其他代码尽可能保持整洁。本指南不能教你如何写高效的代码,且不包括适用于任何语言的通用优化技巧,比如将公共的

2020-11-04 17:25:22 97

原创 erlang节点通讯

参照Erlang程序设计(第2版)174页第2阶段:客户端在一个节点,服务器在相同主机的另一个节点服务器代码kvs.erl-module(kvs).-export([start/0, store/2, lookup/1]).start() -> register(kvs, spawn(fun() -> loop() end)).store(Key, Value) -> rpc({store, Key, Value}).lookup(Key) -&

2020-06-20 11:32:24 353

原创 Erlang源码阅读方法和file:consult函数源码级解析

一、查找erlang源代码方法:code:which(module)例子:code:which(file)运行结果:1> code:which(file)."d:/erl9.3/lib/kernel-5.4.3/ebin/file.beam"二、file:consult/1 函数源码阅读:%%%-----------------------------------------------------------------%%% The following functions,

2020-05-18 11:09:14 629

原创 [Erlang] count_characters更正

在 《Erlang 程序设计》书中第五章第63页,函数count_characters/1 编译出现错误。课本源码:-module(count_chars).-export([count_characters/1]).count_characters(Str) -> count_characters(Str, #{}).count_characters([H|T]...

2020-05-06 11:52:16 310

原创 [Erlang 习题] 4.11

ErLang程序设计第2版, 4.11 练习题答案(2) 内置函数 tuple_to_list(T) 能将元组 T 里的元素转换成一个列表。请编写一个名为 my_tuple_to_list(T) 的函数来做同样的事情,但不要使用相同功能的内置函数。内置函数 tuple_to_list(T) 示例:erlang:tuple_to_list/1把一个元组转为一个列表用法:tuple_to...

2020-05-03 11:37:43 269

原创 位运算的妙用

位级运算的一个常见用法是实现掩码运算。这里掩码运算是一个位模式,表示从一个字中选出的位的集合。让我们来看一个例子:掩码 0xFF(最低的 8 位为 1 )表示一个字的低位字节。位级运算 x & 0xFF 生成一个由 x 的最低有效字节组成的值,而其他的字节就被置为 0。比如,对于 x = 0x89ABCDEF,其表达式将得到 0x000000EF。表达式 ~0 将生成一个全 1 的掩...

2020-04-08 23:43:07 860 3

原创 位运算表示集合运算

位向量一个很有用的应用就是表示有限集合。原理:位向量[ aw-1, ……, a1, a0 ] 编码任何子集 A ⊆ { 0, 1, ……, w - 1 },其中 ai = 1 当且仅当 i ∈ A。例子:集合A = {0, 3, 5, 6},那么可以用向量a = [ 01101001 ] 表示。原理通俗解释:集合中出现了数 0,就将向量最右边数起第 0 位置为 1,同理, 第 3 位置为 ...

2020-04-08 14:19:28 1542

原创 大小端问题——多字节对象的存储规则

一、多字节对象的存储方式。对于跨越多字节的程序对象,我们可以建立两个规则:① 这个对象的地址是什么?② 在内存中如何排列对象的这些字节?在几乎所有的机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中最小的地址。例子:假设一个类型为 int 的变量 x 的地址为 0x100,也就是说,地址表达式 &x 的值为 0x100。那么,(假设数据类型 int 为32位表...

2020-04-07 00:53:06 590

原创 Hello world 程序的编译过程 (C语言描述)

示例代码 hello.c#include <stdio.h>int main() { printf("hello, world\n"); return 0;}程序被其他程序翻译成不同格式hello程序的生命周期是从一个高级C语言程序开始的,因为这种形式能够被人读懂。然而,为了在系统上运行hello.c程序,每条C语句都必须被其他程序转化为一系列的低级 机器语言指令。然...

2020-04-06 12:03:05 1337

原创 [剑指offer] 不用加减乘除做加法(C++解法)

写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。示例:输入: a = 1, b = 1输出: 2提示:a, b 均可能是负数或 0结果不会溢出 32 位整数位运算思路:将加法拆分为 (无进位加法 + 进位值)例如:123 + 789 = 802 + 110 = 912。其中802为无进位加法得来的结果(3 + 9 = 12,去...

2020-03-30 22:40:55 114

原创 2020届校招网易雷火笔试源码

第一题源码:#include<iostream>#include<string>using namespace std;int a[26], b[26];int fibonacci(int f1, int f2, int n) { int fn = 0; if (n == 1) { return f1; } else if (n == 2) { ...

2020-03-29 19:39:08 545

原创 Shopee 2019校招部分编程题汇总(C++解法)

第一题:[编程题]Shopee的办公室(二)时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M题目描述:shopee的办公室非常大,小虾同学的位置坐落在右上角,而大门却在左下角,可以把所有位置抽象为一个网格(门口的坐标为0,0),小虾同学很聪明,每次只向上,或者向右走,因为这样最容易接近目的地,但是小虾同学不想让自己的boss们看到自己经常在他们面前出...

2020-03-28 12:50:59 338

原创 [剑指offer] 圆圈中最后剩下的数字(C++解法)

0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。示例 1:输入: n = 5, m = 3输出: 3示例 2:输入: n = 10, m = 17输出: 2限制:1...

2020-03-27 22:59:58 272

原创 [剑指offer] 对称的二叉树(C++解法)

请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3示例...

2020-03-26 22:33:42 92

原创 数据结构——图

一、什么是图表示多对多的关系包含一组顶点:通常用V(Vertex)表示顶点集合一组边:通常用E(Edge)表示边的集合边是顶点对:(v, w)∈E,其中 v, w ∈ V有向边<v, w>表示从v指向w的边(单行线)不考虑重边和回路二、抽象数据类型定义类型名称:图(Graph)。数据对象集:G(V, E)由一个非空的有限顶点集合V和一个有限边集合E组成。...

2020-03-25 11:54:33 106

原创 [剑指offer] 平衡二叉树(C++解法)

输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 ...

2020-03-23 18:04:28 126

原创 [剑指offer] 连续子数组的最大和(C++解法)

输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。提示:1 <= arr.length <= 10^5-100 <= arr[i] &...

2020-03-23 17:11:34 309

原创 [剑指offer] 第一个只出现一次的字符(C++解法)

在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。示例:s = "abaccdeff"返回 "b"s = "" 返回 " "限制:0 <= s 的长度 <= 50000哈希法思路:因为C++没有可以按照插入的先后排序的哈希容器,所以就自己利用vector + pair设计了一个简单的顺序map, 其中键为char型,值为int型;首先顺序遍历...

2020-03-22 15:37:37 469

原创 [剑指offer] 构建乘积数组(C++解法)

给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B 中的元素 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。示例:输入: [1,2,3,4,5]输出: [120,60,40,30,24]提示:所有元素乘积之和不会溢出 32 位整数a.length <= 100000对称遍历法思路:由B[...

2020-03-22 12:41:51 131

原创 [剑指offer]包含min函数的栈(C++解法)

定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -...

2020-03-21 22:09:23 136

原创 [剑指offer] 最小的k个数(C++解法)

输入整数数组 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 <= 10000...

2020-03-21 21:04:50 358

原创 [剑指offer] 两个链表的第一个公共节点(C++解法)

输入两个链表,找出它们的第一个公共节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两...

2020-03-21 19:31:43 192

原创 [剑指offer] 和为s的两个数字(C++解法)

输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10]限制:1 ...

2020-03-21 15:17:18 128

原创 [剑指offer] 二叉树的最近公共祖先 (C++解法)

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1...

2020-03-21 14:31:44 569

原创 [剑指offer] 数组中出现次数超过一半的数字 (C++解法)

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2限制:1 <= 数组长度 <= 50000C++解法思路:因为出现次数大于数组长度的一半,则两两相邻的数若不相同,则可以一起抵消,最后剩下的数就是目标值。初始化一个计数...

2020-03-20 23:52:48 384

原创 [剑指offer] 二叉搜索树的最近公共祖先 (C++ 解法)

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [6...

2020-03-20 22:48:47 157

原创 [剑指offer] 和为s的连续正数序列 (C++解法)

输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]限制:1 <= target <= 10...

2020-03-20 01:12:40 230

原创 [剑指offfer] 从上到下打印二叉树 II (C++解法)

从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]提示:节点总数 <= 1000C++解法思路:使用队列层次遍历访问二叉树...

2020-03-19 21:36:55 94

原创 [剑指offer] 二叉搜索树的第k大节点(C++解法)

给定一棵二叉搜索树,请找出其中第k大的节点。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2输出: 4示例 2:输入: root = [5,3,6,2,4,null,null,1], k = 3 5 / \ 3 6 / \ 2 4 / 1输出...

2020-03-19 20:58:40 532

原创 [剑指offer] 二叉树的深度(C++解法)

输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。提示:节点总数 <= 10000C++递归解法/** * Definition...

2020-03-19 19:46:38 339

原创 [剑指offer] 左旋转字符串 (C++解法)

面试题58 - II. 左旋转字符串字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = “abcdefg”, k = 2输出: “cdefgab”示例 2:输入: s = “lrloseumgh”, k = 6...

2020-03-19 19:36:17 232

原创 进程同步机制四大基本准则

实现进程同步的代码需要满足一下四个基本准则空闲让进当无进程处于临界区,可允许一个请求进入临界区的进程立即进入自己的临界区忙则等待当已有进程进入自己的临界区,所有企图进入临界区的进程必须等待有限等待对要求访问临界资源的进程,应保证该进程能在有限时间内进入自己的临界区让权等待当进程不能进入自己的临界区,应释放处理机...

2020-03-18 23:49:25 12401 2

原创 UNIX进程控制描述与控制概要

一、UNIX进程控制使用的数据结构二、进程映像进程是进程映像的执行过程,进程映像则是正在运行进程的实体。用户级上下文用户程序(正文区、数据区)、用户栈区、共享存储区寄存器上下文PC、PSW、栈指针、通用寄存器系统级上下文进程表项、U区、本进程区表、系统区表项、页表核心栈、若干层寄存器上下文三、进程控制fork系统调用创建新进程0号(对换)进程 => 1号(始祖)进...

2020-03-18 16:27:01 189

原创 第一章、操作系统引论

一、计算机系统的组成二、操作系统的设计目标方便性:提供用户接口,使计算机系统更方便使用。有效性:通过有效管理和分配软、硬件资源及合理组织计算机工作流程来改善资源利用率,提高系统吞吐量。可扩充性:适应计算机硬件和体系结构的迅猛发展及其所对应的更高功能和性能要求。开放性:适应不同厂家与不同类型的计算机及其设备的网络化集成和协同工作,实现适应程序可移植性和互操作性。三、操作系统的作用...

2020-03-17 21:30:32 202

空空如也

空空如也

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

TA关注的人

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