自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 常见的八大排序算法

概念我们平常说的排序,通常都是按照从小到大的顺序,而且指的是原地排序(in place sort)。排序又分内部排序和外部排序:内部排序——将数据拉到内存中进行排序外部排序——将数据放到磁盘排序,数据量太大,导致在内存当中不可存放以下介绍的排序都是内部排序:标准判断排序的标准:时间复杂度、空间复杂度、稳定性这里重点说稳定性:如果一个序列中有若干相等的数据,排序之后其相对位置没有发生改变排序就是稳定的。比较快速判断是否稳定的方法:如果在排序过程中没有发生跳跃式交换(隔几个数地去交换),就是稳

2020-11-09 19:58:44 309

原创 快排为什么必须先从右往左查找(排升序)

这个问题感觉很多人在学快排的时候总是会忽略掉,我第一次学的时候也没有注意这个点,在网上看到的很多讲快排的博客里也没有提到这个问题,有些甚至是按照错误顺序来的。 while (i < j && arr[j] >= pivot) { j--; } while (i < j && arr[i] <= pivot) { i++; }上述代码,比较的顺序不能改变。假如排序序列为以下数组,两种顺序下

2020-11-07 23:31:57 1026

原创 Map和Set的知识总结

MapMap时用来搜索查找数据的,当元素和元素之间存在一一对应关系时,常用到Map它的核心操作时根据Key来获取值Map底层是哈希表,应用的模型是Key-Value模型,即通过Key可以找到唯一的Value在Map中,有几点需要注意的:不同的Key对应的Value值可能相等Key不能重复,重复的话会覆盖掉之前的KeyKey的值可以为nullMap中的常用方法总结:特别地,要...

2020-02-20 20:17:13 125

原创 【Leetcode】——有效的括号

题目描述:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例1:输入: “()”输出: true示例2:输入: “()[]{}”输出: true示例3:输入: “(]”输出: false示例4:...

2019-12-11 00:07:11 105

原创 项目中常用的两个接口——Comparable、Cloneable

Comparable适用于:给对象数组排序时,如果给自定义类型排序,需要手动实现Comparable接口用法:拿以下代码举例(给一个学生类按照名字/年龄/分数进行排序)首先定义一个Student类:class Student { public String name; public int age; public double score; //提供构造方...

2019-11-26 00:11:17 282

原创 Java基础知识——抽象类、接口

抽象类不想让方法在类内实现,用abstract修饰。如果一个类包括抽象方法,这个类也必须是抽象类抽象类和普通类 最大的区别 是抽象类中有抽象方法抽象类是不能被实例化的,不能new抽象类存在的意义 -》肯定要被继承的抽象类一旦被继承,就要重写抽象方法一个类继承了抽象类,如果不想重写抽象类的方法,那么当前类需要设置为抽象类(可以选 择重写,也可以不重写)...

2019-11-22 23:30:31 130

原创 Java基础知识——继承、多态

继承概念:继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。关键字: extends特点:继承意味着扩展,否则毫无意义。要明确子类不是父类的子集这一概念子类继承父类以后,父类中声明的属性、方法,子类就可以获取到子类除了通过继承,获取父类的结构之外,还可以定义自己的特有的成分Java中只有单继承...

2019-11-22 15:38:42 121

原创 相交链表 【Java-力扣】

编写一个程序,找到两个单链表相交的起始节点。分析:两个链表在某一结点相交,即为地址相同,可以分别遍历各链表,看在哪一个结点相交。考虑到两个链表的长度可能不一样,所以不能同步遍历,所以可以先求出链表长度的差值,让长链表先走差值个结点,然后再同步各自去遍历。代码如下:public ListNode getIntersectionNode(ListNode headA, ListNode h...

2019-11-17 17:18:15 154

原创 链表的回文结构 【Java-牛客】

题目描述 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。 回文结构示例:1 - 2 - 2 - 1分析:1、先找到链表的中间结点2、将中间结点之后的部分反转3、定义两个结点,一个从前往后走,一个从后往前走,看两结点的val...

2019-11-17 13:45:16 157

原创 删除链表中重复的结点 【Java-牛客】

题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表1->2->3->3->4->4->5 处理后为 1->2->5分析过程如下图:还有细节需要注意:代码如下:public ListNode deleteDuplication(ListNode pHead){ ...

2019-11-16 23:13:28 126

原创 链表分割 【Java-牛客】

题目描述 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。分析见下图:要注意这种情况:大致思路就是这样,还有一些需要注意的情况,当链表为空或链表只有一个结点时,都没办法分割,直接返回null就行。还要注意到bs或as...

2019-11-16 22:02:43 164

原创 反转链表 【Java-力扣】

反转一个单链表。 示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL分析:画图解释:上述反转过程是个循环才能将链表整体反转,循环结束的条件是cur == null 即将整个链表遍历完时。要注意,在curNext == null时,此时cur所指的结点就是新的头结点,所以...

2019-11-16 00:06:44 176

原创 链表中第k个结点——【Java牛客】

题目描述:输入一个链表,输出该链表中倒数第k个结点。分析:最直接、最先想到的方法肯定是先求出链表长度,然后让链表从开始向后走(k-1)个结点。但是这种方法会遍历链表两遍,下面我说的这种方法只需遍历一遍就能找出对应结点。定义两个结点fast和slow。让fast先向后走(k-1)个结点,然后slow和fast同时向后走,直到fast走到头,slow对应的结点即为所求结点,这个过程画图更直观...

2019-11-15 23:17:02 220

原创 链表的中间结点 【Java-力扣】

给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。 示例: 输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.nex...

2019-11-14 23:47:48 153

原创 合并两个有序链表 【Java-力扣】

题目:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4分析:需要合并的两个链表是有序的,所以合成的新链表也需要是有序的,这就需要我们在合并过程中对链表中的各节点进行排序。我的思路是这样的:因为链表是有序...

2019-11-13 00:35:30 204

原创 无头单向非循环链表实现的一些方法

开始前一点小经验分享给大家:学习链表一定要多画图,逻辑搞不懂的时候就画图一、头插法分情况:假如链表为空,只需将node = head即可;假如链表不为空,那么node.next = head 将node插入链表头部,然后head = node 调整链表的头部public void addFirst(int data) { ListNode node = new ListNode(d...

2019-11-05 00:29:37 100

原创 移除链表元素 【Java-力扣】

删除链表中等于给定值 val 的所有节点。 示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5分析:要像实现删除指定内容项,可以将删除项的prev.next改为删除项的下一项的引用。链表问题画图解决比较容易,整体逻辑如下图所示:要注意的是,1、判断prev.nex...

2019-11-03 17:38:22 269

原创 Java知识——数组篇

数组的定义和使用数组是存放相同类型数据的集合。内存是连续的。数组的创建数组的创建方式一共有三种: //静态初始化 int[] array1 = {1,2,3,4,5}; //有new的话,是动态初始化 int[] array2 = new int[]{1,2,3,4,5}; //array3数组:只是定义了一个数组,默认值为0 ...

2019-10-20 22:24:33 110

原创 汉诺塔问题

先看问题: 汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?分析:这个问题的...

2019-10-20 20:02:33 188

原创 位运算求两数的平均值

分析:用二进制求两数的平均值的话,大致思路在于找出二进制种对应位相同的和对应位不同的,分别求解平均值再求和。相同位的平均值即为相同的位本身,不同位的平均值还需除以2,即二进制右移一位。取7和6为例:7&6的结果取出二进制中相同的位7^6的结果去除二进制中不同的位所以7和6的平均值为7&6 + (7^6)>>1故a与b的平均值为 (a&b + (...

2019-10-20 14:05:58 522

原创 多位数的水仙花数——Java篇

水仙花数问题相信大家都不陌生,今天写的这篇博客中的方法可以求多位数的水仙花数。 ps:感觉百科中对“水仙花数”的定义挺有意思,分享给大家: 一位自幂数:独身数两位自幂数:没有三位自幂数:水仙花数四位自幂数:四叶玫瑰数五位自幂数:五角星数六位自幂数:六合数七位自幂数:北斗七星数八位自幂数:八仙数九位自幂数:九九重阳数十位自幂数:十全十美数分析:  其实多位数的求解方...

2019-10-17 23:24:08 560

原创 给定一个十进制整数, 将其转成二进制形式和十六进制形式

将十进制转换为二进制用的思想是 除2取余法我画图来表示:23对应的二进制是 10111,即将余数按箭头方向排列出来的值。定义一个 i 变量,每除 2 一次,i++,对应的余数乘 10^(i-1),到商为0时,循环结束,将余数做乘法之后的值相加,和即为二进制表示。...

2019-10-14 19:29:37 754

原创 Java中变量和运算符的基本知识点

一、变量和类型变量指的是程序运行时可变的量. 相当于开辟一块内存空间来保存一些数据.类型则是对变量的种类进行了划分, 不同的类型的变量具有不同的特性.数据类型可以这样划分:其中8种基本类型(内置类型)为:...

2019-10-14 13:03:53 80

原创 青蛙跳台阶问题

问题:一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法 已知:n == 1时:有1种跳法n == 2时:有2种跳法n == 3时:有3种跳法n == 4时:有5种跳法分析:当n>2时,第一次跳的时候有两种选择:如果第一次只跳一级,此时跳法数目等于后面剩下的 n-1 级台阶的跳法数目,即为f(n-1);如果第一次跳两级,...

2019-10-12 23:15:06 92

原创 斐波那契数列问题求解

求解斐波那契额问题有两种方法:递归和循环一、递归//递归 public static int fib(int n) { if((n == 1) || (n == 2)) { return 1; } return fib(n-1) + fib(n-2); }用递归方法求解,当我们求 fib(40) 的时候发现, 程序执行速度极慢. 原因是进行了大量的重复运算....

2019-10-12 20:31:23 279

原创 用程序判断机器字节序存储的两种方法

首先我们来了解下什么是大小端:  大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;  小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。大小端模式  为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。但是在C语言中除了8bit的ch...

2019-10-01 22:05:10 266

原创 简谈冯·诺依曼体系结构

@TOC欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全...

2019-09-28 00:00:56 342

原创 对memcpy函数和memmove函数的理解和实现

  两个函数都是将某一内存区域中的指定内容复制到目标内存中去,因此,拷贝的类型便不在受限制,不仅可以拷贝字符串内容,也可以拷贝整形,浮点数。首先看看memcpy函数的用法:void *memcpy( void *dest, const void *src, size_t count );返回类型是void *;参数 dest,src的类型都是void *(可以接收任何类型参数的地址,不限制...

2019-09-02 15:54:07 140

原创 杨氏矩阵问题

杨氏矩阵有一个二维数组.数组的每行从左到右是递增的,每列从上到下是递增的.在这样的数组中查找一个数字是否存在。时间复杂度小于O(N);数组:      1  2  3          4  5  6          7  8  9思路:从右上角(或左下角)元素p开始判断若p<该数字,p所在行不再考虑,row++,接着从右上角开始判断;若p>该数字,p所在列不...

2019-08-24 16:57:36 98

原创 C语言简单三子棋游戏(多少行都可以的那种)

思路:      整个代码分为test.c和game.c和game.h三部分。而所有代码又是从test.c开始的,进入主函数后调用test函数就可以开始测试。      下面是游戏的大致流程:打印菜单打印棋盘并初始化玩家走(走完一步后就判断输赢,打印棋盘,并让数据保留...

2019-05-12 23:54:55 207

原创 C语言实现两个整形变量的交换的三种方法

第一种方法:引入一个中间变量(最经典也是我们以后开发过程中经常使用的方法)int main(){ int a = 5; int b = 10; int tmp = 0; tmp = a; a = b; b = tmp; return 0;}第二种方法:不创建临时变量,交换两个数int main(){ int a = 5; int b = 10; a = a+b;...

2019-05-12 22:21:00 2140

原创 博客第一篇:自我介绍

博客第一篇:自我介绍 现在还是一名大一的小菜鸟,但是对编程充满了兴趣,就以此篇博客为大学的新起点,希望日后能在编程上有所建树。(第一次写我自己的博客,内心还是很激动的,虽然没有什么技术含量吧,但是还是好开心吖,吼吼吼) 现阶段想把c语言这个基本工具学好,以后在学习算法啦,数据结构这些,“路漫漫其修远兮”,踏踏实实地从基础开始学吧。 我学习编程的方式主要是看书和看网上的课程,当然也要多多...

2019-04-13 16:41:34 213

空空如也

空空如也

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

TA关注的人

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