自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

沿海奔跑的少年

记录自己的成长过程,每天更新一篇博客。

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

转载 一、原码反码补码的相互转换

1、首先,正数的原码,反码,补码相同。我们在这里不讨论。2、 我们来讨论负数的原码反码补码的相互转换。1. 负数原码和反码的相互转换 负数原码转化为反码:符号位不变,数值位按位取反。原码 1100 0010反码 1011 1101 负数反码转化成原码:符号位不变,数值位按位取反。反码 1011 1101原码 1100 00102、负数的原码和补码的相互转换...

2019-09-02 13:36:52 838

原创 22、hash表的介绍(上)

一、简答介绍一、hash 函数的三个设计要素1. 散列函数计算得到的散列值是一个非负整数;2. 如果 key1 = key2,那 hash(key1) == hash(key2);3. 如果 key1 ≠ key2,那 hash(key1) ≠ hash(key2)。二、举例一个hashmap 的底层实现1. 初始大小HashMap 默认的初始大小是 16,当然这个默认值是可...

2019-04-11 21:48:23 279

原创 21、基于链表实现的LRU算法

一、简单介绍1、LRU 中文意思是 最近最少访问缓存淘汰,在我们的生活中到处可见。当我们用链表实现是需要O(n)时间复杂度。2、我们需要维护一个按照访问时间从大到小有序排列的链表结构。因为缓存大小有限,当缓存空间不够,需要淘汰一个数据的时候,我们就直接将链表头部的结点删除。(1)、当要缓存某个数据的时候,先在链表中查找这个数据。如果没有找到,则直接将数据放到链表的尾部;(2)、如果...

2019-04-11 21:28:47 525

原创 20、redis底层实现跳表

一、简单介绍1、我们为什么要使用跳表?当我们使用对一个链表进行查找的时候,我们需要的时间复杂度是O(n)。我们没有办法对一个有序的链表进行二分查找。当我们使用跳表实现,我们查找效率会很高,是O(logn)。2、跳表的时间复杂度分析每两个结点会抽出一个结点作为上一级索引的结点,那第一级索引的结点个数大约就是 n/2,第二级索引的结点个数大约就是 n/4,第三级索引的结点个数大约就...

2019-04-09 17:20:56 476

原创 19、二分查找

一、简单介绍二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。O(logn) 惊人的查找速度。我们二分查找可以分成两个情况,一种是不存在重复元素。另外一种是出现重复元素的情况。二、代码实现1、不存在重复元素的二分查找 /** * 二分查找 ...

2019-04-08 20:17:33 265

原创 18、基数排序

1、简单介绍1、对电话号码进行排序我们这里也可以借助相同的处理思路,先按照最后一位来排序手机号码,然后,再按照倒数第二位重新排序,以此类推,最后按照第一位重新排序。经过 11 次排序之后,手机号码就都有序了。2、基数排序:根据每一位来排序,我们可以用刚讲过的桶排序或者计数排序,它们的时间复杂度可以做到O(n)。如果要排序的数据有 k 位,那我们就需要 k 次桶排序或者计数排序,总的时间复杂...

2019-04-08 20:05:39 222

原创 17、桶排序

1、简单介绍核心思想是将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行排序。桶内排完序之后,再把每个桶里的数据按照顺序依次取出,组成的序列就是有序的了。1、稳定性:桶排序是稳定的排序。2、时间复杂度:O(n)3、它不是原地排序,需要额外的空间是O(n+m) m 表示的是 桶的个数。2、代码实现public static void bucketSort(int...

2019-04-08 19:46:53 252

原创 16、计数排序

1、简单介绍1.计数排序的特点,计数排序最大的特点是稳定,并且排序的元素,之间的值差别不大。2、计数排序是一个稳定的排序,我们需要了解既然它只能够对整数进行排序,为什么还要保证其稳定性。3、既然如果保证稳定性,并且不只是对整数进行排序,它还能够对什么类型进行排序?4、计数排序的时间复杂度和空间复杂度,时间复杂度都是O(n+k) n表示的是元素的个数 k 表示数据之间的范围。5...

2019-04-05 23:03:07 189

原创 15、快速排序和归并排序

1、简单的介绍1、归并排序的核心思想:我们将把数组中的元素分成两部分,对左边元素进行排序,对右边元素进行排序。然后对左右两边元素,进行归并操作。1、归并排序是稳定的。归并的过程,如果两个元素相等,先把左边的元素进行归并。2、归并排序不是原地排序,需要额外的内存空间。O(n)T(N)=2T(N/2)+O(N);3、master公式的使用T(N) = a*T(N/b) + O(N^d)...

2019-04-04 19:37:10 708

原创 14、简单的排序算法

一、算法时间复杂度分析1、我们考虑一个排序算法的好坏,我们首先是应该考虑的点, 有最好时间复杂度,最坏时间复杂度,平均时间复杂度。2、时间复杂度的系数,常数 和低阶。3、比较的次数和交换的次数。4、额外空间复杂度。(原地排序)5、稳定性。冒泡排序的核心思想:我们进行相邻的元素进行比较,把最大的元素往后移动,直到全部有序。1、冒泡排序是一个原地排序,不需要额外的空间。2、冒...

2019-04-03 10:09:19 150

原创 13、递归代码的书写

一、简单介绍1、递归的本质递归的本质:将原来的问题,转换成更小的同一个问题。2、递归的实现条件一个问题的解可以分解成几个子问题的解。这个问题与与分解的子问题,除了数据规模不同,求解完全一样。存在递归终止条件。3、递归的两个重要属性 终止条件和递推公式。二、代码案例1、利用递归实现数组元素的相加。 public static int getSu...

2019-03-31 21:42:37 630

原创 12、最大堆和最小堆 的实现(下篇)

一、简单介绍1、我们前面已经用最大堆得例子,已经讲了所有的最大堆的操作。里面包过添加操作,用到我们shiftUp()操作。包过删除操作,我们用到sihftDown操作。然后就是通过一个数组,我们能够构建一个堆。也就是我们说的heapify 操作。2、最小堆的操作和上面的类似,只是比较的时候不一样。二、所有的代码实现1、最大堆的实现package com.ipp.d...

2019-03-30 23:27:35 221

原创 11、堆的删除操作(中篇)

一、堆得删除操作的简单思路1、首先我们判断堆是不是为空,然后获取我们的堆顶元素,和我们的最后一个元素,进行交换。2、我们删除我们的最后一个元素,删除的元素,就是我们的堆顶元素,如果是最大堆,是最大元素,如果最小堆,就是最下元素。3、我们对第一个元素,进行shift'Down操作。因为堆得定义,比如最大堆,就是堆中的任意节点都会下于等于它的父亲节点。我们第一个元素,必须进行和它的孩子节点...

2019-03-30 23:19:56 2464

原创 10、堆的实现(上篇)

一、堆的简单介绍1、堆在我们的实际生活中,我们用的比较多,想到堆,我们就想起了优先队列。优先队列,我们进队列的时候,我们使用的正常的进队列的方式,但是我们出队列的时候,我们出队列的时候,我们会根据某个优选规则,来出队列。我们是根据优先级的不同,来进行操作。我们不管是在我们玩游戏的时候,是或者cpu处理进程,或者多个线程竞争资源的时候,我们都是使用优先队列的实现。而优先队列的实现底层是使用的可能...

2019-03-28 22:54:18 97

原创 9、二分搜索树的删除(下篇)

一、简单介绍。1、二分搜索树的删除操作,其实并不简单,我们需要找到我们要删除的元素。然后分情况考虑。第一种,没有左孩子,我们直接获取一个节点,保持其右孩子,然后进行让要删除的节点的右孩子至于空,然后返回其右孩子。第二种,没有右孩子,我们直接获取一个节点,保存其左孩子,然后进行让要删除节点的左孩子至于空,然后返回其左孩子。第三种,左右孩子都为空,我们直接返回空。第四种,如果左右孩...

2019-03-28 22:05:39 123

原创 8、二分搜索树便利(中篇)

一、二分搜索树便利的介绍 在我们实现二分搜索树中,我们学习了好多的知识,二分搜索树当中,我觉得最重要的是实现树的便利和查找操作。实现二分搜索树的便利,我们有两种不同的实现方式。1、第一种,递归实现。(1)、先序便利,我们可以通过先输出根节点,然后便利左子树,最后便利右子树。(2)、中序便利,我们可以先便利左子树,然后输出根节点,最后输出右子树。(3)、后续便利,我们...

2019-03-26 22:06:25 266

原创 7、二分搜索树(上篇)

一、二分搜索树的简单概念。什么是二分搜索树,顾明思议,我们这棵二叉树是左子树元素,小于根节点的元素,小于右子树的元素。当我们进行插入或者查找元素的时候,我们首先通过在根元素,查找。如果当前元素比它大,就去右子树找。如果当前元素比它小,我们就去左子树找。如果相等,就说明找到。并且如果相等元素,我们在进行二分搜索树,插入的时候,我们不进行插入。然后,我们说一说二分搜索树的前序中序后序便...

2019-03-25 22:53:02 133

原创 6、利用链表实现队列和栈

一、利用链表实现栈。 因为栈是先进后出的基本原则。我们使用栈可以在链表的首部插入元素和删除元素。package com.ipp.list;public interface Stack<E> { int getSize(); boolean isEmpty(); void push(E e); E pop(); E peek();...

2019-03-24 21:58:28 249

原创 5、链表的实现

一、链表的简单介绍链表的实现,在我看来它的实现,是有两种不同的实现方式。第一种实现方式是带头指针的实现方式。第二种实现方式是不带头指针的实现方式。当我们考虑使用不带头指针的会比较复杂些。因为你要考虑插在链表头部插入和其他位置的插入式有区别的。每次的链表的插入要考虑是不是头部插入和头部删除。进行分情况处理。二、链表的基本实现。1、不带头指针的链表实现。定义的抽象接口...

2019-03-23 23:22:10 147

原创 4、队列的实现

一、队列的简单介绍1、队列在我们的生活中到处可见,比如食堂排队打饭,银行排队办理业务等等。2、队列是一种先进先出的设计原则。3、队列是一种特别常用的数据结构,我们在我们的操作系统中,我们有用到优先队列。二、队列的基本实现。1、底层的接口实现定义的方法。package com.ypl.demo;public interface Queue<E> { i...

2019-03-22 22:33:15 266

原创 3、栈的应用

一、栈的应用的实现栈的应用很广,函数的调用的底层实现,和实现表达式值得计算,可以实现括号的匹配,和浏览器的前进和后退的实现。1、栈的表达式的计算。package com.ypl.app;import org.junit.Test;import com.ypl.demo.ArrayStack;/** * * 遇到数字直接压人栈中。 左括号在进入栈中之前元素优先级最高。...

2019-03-21 20:38:26 507

原创 2、动态数组实现栈的实现

一、栈的简单介绍1、栈是一种线性结构。我们可以通过数组和链表实现。它依赖的原则是先进后出的原则。2、栈可以实现括号匹配,表示式计算等功能。3、我们在在平常的函数调用中,都可能用到栈和队列。二、栈的数组实现方式。1、利用我们前面学的动态数组的实现方式。package com.ypl.demo;public interface Array<T> { pu...

2019-03-20 10:03:10 500

原创 1、java 实现一个动态扩容的数组

我今天到大家实现的是一个动态扩容的数组,它是基于数组实现。一、数组的所有实现方法package com.ypl.demo;public interface Array<T> { public int getCapciaty(); public int getSize(); public boolean isEmpty(); public void ...

2019-03-19 16:57:43 1827

原创 6、const 用法

void testConst(){ const char * p = "abcd"; //表示不能够修改指针指向的数据 const data char * const q = "bcda"; //表示的是不能够 修改这个指针指向其他对象。 const point const string a("marray"); // const ...

2018-11-06 22:05:53 189

原创 5、AVL树的实现

1、我们首先要计算节点的高度和平衡因子。 // 计算每个节点的高度 int getHeight(Node&lt;K, V&gt; * node){ if (node == NULL) return 0; return node-&gt;height; } // 获得节点node的平衡因子 int getBalanceFactor(No...

2018-11-06 17:14:40 918

原创 5、红黑树的学习

1、红黑树满足的性质。1、所有节点非红即黑;2、根节点为黑;3、最后的NULL节点为黑;4、红节点的孩子一定为黑;5、黑平衡:任意一个节点到最后的NULL节点的任意路径黑色节点的个数相同。2、2-3 树添加元素的过程2-3树是一颗满足二分搜索树的性质。我们要掌握红黑树,我们必须先了解红黑树。节点可以存放一个元素和两个元素。2-3树咋样维护平衡的?1、添加节点,不能够...

2018-11-06 16:37:33 195

原创 4、hash函数的代码实现

#ifndef HASHTABLE#define HASHTABLE#include&lt;vector&gt;#include&lt;map&gt;using namespace std;template&lt;class K,class V&gt;class HashTable{private: const static int upperTol = 10; co...

2018-11-05 19:48:56 695

原创 3、hash 函数的设计

1、hash 函数对整数和大整数的处理 对于整数的hash函数,我们设计hash 函数,我们可以用取模的方式来获得。2、对于浮点型 设计hash 函数处理3、对于字符串hash 函数的处理  4、对于复合类型的处理 5、我们设计哈希函数的原则? ...

2018-11-05 10:27:59 5595

原创 2、hash 表解析

1、什么是 hashtable?2、hashtable 主要解决的问题?1、当我们的元素,是32位,而不是16位,我们需要准备的空间是4GB.空间会不够用。2、如果元素的类型是字符串而非整数,我们咋样获取一个元素的索引。3、我们咋样解决hash冲突问题。 3、hash表设计的思想理念是什么? ...

2018-11-05 09:50:10 150

原创 1、一个万能的 hash 函数

template&lt;class T&gt;inline void hash_combine(std::size_t &amp; seed, const T &amp; val){ seed ^= hash&lt;T&gt;()(val)+0x9e3779b9 + (seed &lt;&lt; 6) + (seed &gt;&gt; 2);}template&lt;class T...

2018-11-05 09:23:12 2957

原创 47、打印杨辉三角

#include&lt;iostream&gt;#include&lt;iomanip&gt;using namespace std;int main(){ int a[11][11] = {0}; for (int i = 1; i &lt; 11; i++) { a[i][i] = 1; //表示的是斜边全部是1 a[1][i] = 1;//第一列全部是 1; }...

2018-08-11 15:41:45 114

原创 46、求矩阵的最大值

#include&lt;iostream&gt;using namespace std;int main(){ int a[3][4] = { { 1, 3, 4, 6 }, { 2, 4, 6, 8 }, { 1, 3, 4, 5 } }; int max = a[0][0]; int row = 0; int colnum = 0; for (int i = 0; i...

2018-08-11 15:25:41 566

原创 45、矩阵的行列互换

#include&lt;iostream&gt;using namespace std;int main(){ int a[2][3] = { { 1, 2, 3 }, { 3, 4, 5 } }; int b[3][2]; cout &lt;&lt; "a 数组的元素值" &lt;&lt; endl; for (int i = 0; i &lt; 2; i++){ ...

2018-08-11 11:27:16 3488

原创 44、求分数的精确值

#include&lt;iostream&gt;using namespace std;/*1、求分数的精确值? 问题描述:精确计算两个100之间的整数相除。 如果是有限小数,直接输出。如果是无限循环,则输出循环的起始和结束位置。解题思路:1.利用一个数组 quotient[]存放商的数组。2、然后将余数乘以10,然后计算商的下一位。重复操作。3、当余数某次为 0 的...

2018-08-11 11:16:43 486

原创 43、神秘图案

  问题描述:神秘图案 外圈 有 10个 按钮,编号为 1-10 ;  破解神秘图案的方法:第一次按第1个按钮; 第二次按第 3个按钮;第三次按第6个按钮 直到按了1000 下,最后没有按的那个按钮。  思路:我们可以定义一个数组  有 10个元素 ;数组中的每一个元素,相当于一个按钮。初始化时,均为0. 表示没有按这个按钮。  然后循环1000次,凡是按过的按钮 标记为 1;最后把没...

2018-08-11 10:18:08 505

原创 42、统计不同数据的个数

#include&lt;iostream&gt;using namespace std;int main(){ FILE * in = fopen("in.txt", "rb"); FILE * out = fopen("out.txt", "wb"); int temp = 0; int b[21] = { 0 }; int sum = 0; while (!feof(in...

2018-08-11 09:53:53 1240

原创 41、冒泡排序改进版

#include&lt;iostream&gt;using namespace std;#define _CRT_SECURE_NO_WARNINGS int main(){ freopen("sort.in","r",stdin); freopen("sort.out", "w", stdout); int n = 0; cin &gt;&gt; n; int a[100

2018-08-11 09:28:16 237

原创 16、构造函数和析构函数使用

#define _CRT_SECURE_NO_WARNINGS#include&lt;iostream&gt;using namespace std;class Test{private : int x; char *p;public: Test() { x = 10; p = (char *)malloc(100); //初始化操作 strcpy(p, ...

2018-08-05 16:53:07 125

原创 15、成员函数的分离

1、头文件的声明  ​#pragma once //表示的是只包含一次 //#ifndef A_H意思是"if not define a.h" 如果不存在a.h//接着的语句应该#define A_H 就引入a.h//最后一句应该写#endif 否则不需要引入//#ifndef _TEACHER2_H_ //#define _TEACHER2_H_cl...

2018-08-04 22:46:56 123

原创 14、类的封装

#include&lt;iostream&gt;using namespace std;/*1、类的封装:(1)、类封装了成员变量和成员函数。(2)、对属性和成员函数的访问控制。(3)、类的内部和类的外部。(4)、类的访问关键字。 public protected private */class Circle{private: double r; //成员函数 dou...

2018-08-04 21:51:58 120

空空如也

空空如也

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

TA关注的人

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