- 博客(45)
- 收藏
- 关注
原创 【进程和线程】
进程状态转移图:所有运行状态必须是从就绪状态变过去的,因为进程的CPU必须经过OS系统分配才能得到。在同一时刻,处于不同状态下的进程不止一个。处于新建、就绪、堵塞、结束状态的可以有多个,但单核cpu情况下,同一时刻运行状态的只能有一个。通过上下文切换:保护上一个进程的上下文 + 恢复下一个进程的上下文 上下文:以PC寄存器所代表的一组寄存器中的值。保护上下文:把寄存器中的值,保存到内存的某个位置。 恢复上下文:把内存中之前保护的值,写入寄存器中并行:进程真的同时在执行,既微观角度的同一时刻,是有多个指令在执
2022-06-22 17:59:55
767
1
原创 使用单调栈解题
何为单调栈?栈中元素从栈顶到栈底,要么单调递增排列,要么单调递减排列。如单调递增栈就是从栈顶到栈底的元素值依次增大,下面是几个单调栈的应用。目录1.力扣第496题—下一个更大元素2. 力扣第503题—下一个更大元素II(循环数组)3.力扣第42题——接雨水 4.力扣第456题——132模式下一个更大元素 I这个问题我们实际上只需要观察 nums2 即可,我们倒着从 nums2 的最后一个元素开始,找到 nums2 中的每个元素的下一个最大元素。在遍历的时候,维护一个单调递增的栈,当栈为空时返回-1,表明当前
2022-06-21 19:20:00
505
7
原创 认识计算机
目录冯诺依曼体系认识计算机 数据在内存的存储问题CPU的基本工作原理 电路门算术逻辑单元ALU(Arithmetic & Logic Unit)算术单元 逻辑单元ALU 符号寄存器(Register)控制单元 CU(Control Unit)CPU的中断模式(Interrupt Mode)操作系统OS(Operating System) 操作系统的定位 什么是程序(program),什么是进程(Process)CPU 分配 —— 进程调度/进程管理进程控制块抽象(PCB Process Control Bl
2022-06-19 18:00:42
1109
8
原创 【Lambda表达式】
Lambda表达式引例interface IMessage { void printMessage(String msg);}class MessageImpl implements IMessage{ @Override public void printMessage(String msg) { System.out.println(msg); }}public class LambdaTest { public static v
2022-06-12 17:08:18
484
5
原创 哈希表和HashMap的源码解析
哈希表是一个天然的查找和搜索实际上是通过数组衍生出来的,它高效查找的奥秘就在于数组的随机访问特性。例:假设现有一个数组 arr = [ 9,5,2,7,3,6,8],需要判断 3 这个元素是否存在。这时我们创建一个 boolean 数组,这个数组的长度取决于原数组中最大值是谁。arr中最大值是9,则创建一个长度为10的boolean数组,遍历原数组,出现一个元素,就在该元素值对应于新数组的位置记为true这时要查询原数组是否有3,就直接返回新数组索引为3的值,若为true就代表有,若为f.
2022-05-29 17:05:19
294
原创 【Java异常】
前言平时写代码时,经常出现编译时一切正常,运行时就出现错误了,例如下面这段代码 public static void main(String[] args) { int[] arr = {1,2,3}; System.out.println(arr[10]); }程序编译时没有报错,而运行时就出现了异常,这就是常见的数组越界异常,由于数组中只有三个元素,索引10是不存在的。我们探讨的异常就是运行时抛出的程序错误,而不是编译时的错误基本语法.
2022-05-22 14:13:49
576
原创 【基础算法题】数组中出现次数超过一半的数字
数组中出现次数超过一半的数字_牛客题霸_牛客网 (nowcoder.com)方法1将数组排序,数组长度的一半的位置一定就是我们要找的数,但是这种方法效率是比较低的代码实现: public int MoreThanHalfNum_Solution(int [] array) { Arrays.sort(array); return array[array.length/2];}方法2使用 map 存储数字及每个字符出
2022-04-18 17:35:57
216
原创 【java反射详解】
什么是反射定义反射是所有第三方框架的基础,Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到,那么我们就可以修改部分类型信息;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射(reflection)机制。动态获取类信息以及动态调用该对象的属性和方法的功能称之为反射。(此处的动态,指的是运行时获取,javac 生产 class文件,反射就存在于java运行一个主类时)
2022-04-16 11:35:05
812
原创 【基础算法题】替换空格
题目要求:将一个字符串中的每个空格替换成“%20”。示例:输入:s = "We are happy."输出:"We%20are%20happy."方法一调用String类中的 replaceAll 方法,将所有空格替换成 %20 public String replaceSpace(String s) { String res = s.replaceAll(" ","%20"); return res; }方法二从空格变成 %
2022-04-15 19:15:50
197
原创 【基础算法题】调整数组顺序使奇数位于偶数前面
1.不要求相对位置2.要求相对位置这里我们可以使用索引 left 指向数组第一个元素,right指向数组最后一个元素,left 向后走,遇到偶数就和 right 交换代码实现:public class Offer21_oddeven { public int[] exchange(int[] nu.
2022-04-13 17:43:44
620
原创 【基础算法题】旋转数组中的最小数字
旋转数组的最小数字_牛客题霸_牛客网 (nowcoder.com)题目要求:有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。示例:输入:[3,4,5,1,2]返回:1这道题我们可以遍历数组挨个查找最小元素,也可以调用JDK中Arrays的sort方法将数组排序,输出第一个元素,但是这
2022-04-11 19:32:28
738
5
原创 七大排序详解
排序的稳定性七大排序总览测试类代码1.1选择排序1.2双向选择排序2.1插入排序2.2折半插入排序3.冒泡排序4.希尔排序5.堆排序6.归并排序归并排序的两点优化归并排序的非递归写法海量数据的排序处理7. 快速排序快速排序的优化二路快排三路快排挖坑法快排的非递归实现
2022-04-09 10:03:01
1033
40
原创 【基础算法题】杨氏矩阵(二维数组)的查找
题目要求:在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。二维数组中的查找_牛客题霸_牛客网 (nowcoder.com)首先我们先了解一下二维数组arr的长度的表示:arr.length //表示一共有多少行arr[ i ].length //表示第 i 行一共有多少列分析:这一题,我们要明白查找的过程,本质就是排除的过程。根..
2022-04-04 21:38:08
695
5
原创 【二分搜索树BST】
在BST中找最小值可以看到,二分搜索时的最小值一直在左树的最左侧,是中序遍历的第一个。也就是不断向左树递归查找,找到的第一个左子树为空的节点一定是最小值。同理,在BST中找最大值,一定在右树的最右侧,就是右树的最大值删除操作删最值...
2022-04-03 22:33:15
993
13
原创 【力扣第138题—复制带随机指针的链表】巧用Map解题
给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝,复制这个链表,复制链表中的指针都不应指向原链表中的节点 。返回复制链表的头节点。也就是说,原链表和新链表除了存储的地址不同,其他的对应关系完全一致。示例:输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]本题我们借助M..
2022-04-01 09:42:36
893
10
原创 【堆的应用——topK问题】
topK问题是什么1.力扣面试题17.14号问题——求最小的k个数2.LeetCode 第347问题——前 K 个高频元素3.力扣第373号问题——查找和最小的 K 对数字
2022-03-31 16:05:19
1608
10
原创 【堆和优先级队列】
二叉堆堆的代码实现最大堆代码实现向最大堆中添加一个元素—siftUp操作删除堆顶元素—siftDown操作测试代码方法heapify 堆化优先级队列自定义类型的优先级队列实现Comparator接口——比较器
2022-03-29 21:00:10
6638
14
原创 【二叉树第四弹】— 进阶面试题
1.二叉树的最长直径—力扣第543题2.根据二叉树创建字符串——力扣第606题3.二叉树的构建及遍历—牛客4.根据一棵树的前序遍历与中序遍历构造二叉树—力扣105题5.二叉树的最近公共祖先—力扣236题6.二叉树搜索树转换成排序双向链表—牛客JZ36
2022-03-27 08:57:46
1874
10
原创 【二叉树第三弹】— 使用迭代实现遍历及解题
初识迭代利用迭代解题使用迭代实现层序遍历—力扣102题计算二叉树的节点个数计算叶子节点个数判断是否为对称二叉树—力扣101题判断一棵树是否是完全二叉树—力扣958题求二叉树最大宽度—力扣662题前中后序的迭代实现1.前序遍历—力扣144题2.中序遍历—力扣94题3.后序遍历—力扣145题
2022-03-23 17:16:09
2086
17
原创 【二叉树第二弹】— 基础面试题
统计二叉树中节点的个数求一颗二叉树中叶子节点的个数判断一个元素在二叉树中是否存在求二叉树的高度求二叉树第k层节点的个数二叉树的前序遍历(使用List输出)-- 力扣144号问题判断两棵树是否相同—力扣第100号问题力扣https://leetcode-cn.com/problems/same-tree/判断一棵树是否是另一棵树的子树—力扣第572号问题判断平衡二叉树—力扣第110号问题 记忆化搜索法优化重复递归对称二叉树—力扣第101号问题
2022-03-21 16:12:49
1268
5
原创 【二叉树第一弹】基础知识详解及遍历代码实现
树结构树结构顾名思义,是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看 起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下特点:有一个特殊的节点,称为根节点,根节点没有前驱节点 除根节点外,其余节点被分成M(M > 0)个互不相交的集合T1、T2、......、Tm,其中每一个集合 Ti (1 <= i <= m) 又是一棵与树类似的子树。每棵子树的根节点有且只有一个前驱,可以有0个或多个后继 树是递归定义
2022-03-16 14:04:42
1085
8
原创 【初识Java泛型】
序言当我们要创建一个坐标类Point,输入经度和纬度时,要将它定义为什么类型呢?10.1,30.2 —都是double类型 东经100度,北纬38度—都是字符串 10 , 50—都是整型Object 可以接收所有类型,这时我们能想到使用包装类的自动拆装箱,基本类型自动装箱变为Integer或者Object接收代码示例:public class Point { private Object x; private Object y; public Objec
2022-03-14 22:19:44
1301
8
原创 【集合类List、Map、Set的简单用法】
集合类用来存储元素,集合类中若用到基本数据类型,必须使用包装类。List、Map、Set的简单用法List接口List接口是一个线性表接口, 常用ArryList(动态数组) :要保存的元素个数不确定,动态变化时使用LinkedList(链表)List的增删改查增加:add(任意数据类型 新值)、add(int index , 任意数据类型):在索引为index的位置插入新元素查找: get(int index ):返回 index位置的元素值 、 boolean contain
2022-03-10 15:37:29
995
15
原创 【Object类和包装类】
Java中一个特殊类:Object类,和包装类详解查看源代码方法Object类定义及应用1. toString()2. equals( )包装类定义及应用装箱和拆箱自己实现包装类通过包装类让Object类接收基本数据类型包装类的对象比较包装类和String的相互转换
2022-02-10 19:33:57
995
39
原创 抽象类和接口
Java抽象类和接口详解抽象类抽象方法抽象类三大原则接口接口使用原则JDK两大内置接口java.lang.Comparable 比较接口java.lang.Cloneable 克隆接口对象的深浅拷贝抽象类和接口的区别
2022-02-09 11:26:04
772
19
原创 【栈和队列的相互转换】
我们之前讲述过栈和队列,链接放在这里可以去康康哦https://blog.youkuaiyun.com/m0_58672924/article/details/122647558https://blog.youkuaiyun.com/m0_58672924/article/details/122647558栈和队列的本质是相同的,都只能在线性表的一端进行插入和删除。因此,栈和队列可以相互转换。用栈实现队列—力扣232题题目要求:仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作使用双栈来实现队
2022-02-08 03:00:00
836
3
原创 【循环队列 和双端队列队列】—Java实现
之前,我们使用链表实现了基础队列,链接放在这里可以去康康哟https://blog.youkuaiyun.com/m0_58672924/article/details/122647558https://blog.youkuaiyun.com/m0_58672924/article/details/122647558之所以没有选择数组来实现,是因为每有一个元素出队,数组中所有剩下的元素都需要向前移动一次,因此没有链表高效。此时,我们就引出了循环队列的概念。循环队列,逻辑上是一个环,物理上依然是线性表。head-指
2022-02-07 20:03:43
839
9
原创 力扣第118题—杨辉三角
题目要求:给定一个非负整数numRows,生成「杨辉三角」的前numRows行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。杨辉三角特点:每一行的元素个数和行数是相同的,第一行一个元素,第二行两个元素...... 每一行的第一个元素和最后一个元素都是1 第三行的第二列等于第二行的第一列加第二列:[ 3,2 ] = [ 2,1 ] + [ 2,2 ]以此类推我们能得出下图规律这个过程我们可以通过下面的动图直观的理解代码实现:import java...
2022-02-02 23:10:58
6823
1
原创 初识JAVA内部类
目录一.成员内部类特点:内部类的使用方法成员内部类对象的创建:二.静态内部类定义特点对象创建方法三.方法内部类(局部内部类)定义特点四.匿名内部类定义特点内部类就是将类结构的定义套在另一个类的内部,内部类的例子在我们现实生活中其实处处可见。汽车里面的发动机,衣服里面的棉花等等,发动机类就套在汽车类的内部,棉花类也是如此。内部类也属于一种封装,它体现了一种保护性,例如发动机不能裸露在汽车的外部,这样就失去了安全性,在编程中也是同样的道理。...
2022-01-22 22:18:00
209
7
原创 【详细了解String类】——Java基础
目录一.字符串的创建字面量二.字符串的内存布局三. equals方法比较字符串是否相等四.字符串的常量池使用intern() 手工入池五.字符串的不可变性① 例② 例修改字符串本身SrtingBuilder的一些特殊方法六.String与char [ ] 类型和byte[ ]的转换七.字符串常用操作字符串的比较字符串查找字符串替换字符串拆分字符串截取其他操作方法一.字符串的创建直接赋值 String str = " hel.
2022-01-20 22:37:20
813
9
原创 方法的使用
目录1.方法的定义2.方法的调用3.形参与实参的关系4.方法重载overloadJava中的方法类似于c语言中的函数,每个方法都表示一种能力或行为。方法就是一个代码片段,为了让这段代码被重复使用,我们将它抽象为方法。1.方法的定义public static 方法返回值 方法名称 (参数类型 参数名称 ....){方法体代码;return 返回值;}2.方法的调用数据类型 变量 = 方法名称 (参数) ;代码示例:public class ...
2022-01-14 21:42:25
160
4
原创 Java实现一个猜数字小游戏
▲游戏规则:系统随机生成一个范围0——100的数,用户输入数字,判断该数字是大于,小于,还是等于随机生成的数字,等于的时候退出程序。▲实现思路:我们首先要解决的的是随机数,若这个数是我们人为设置的就没有意思了。在Java中的java.util包中提供了一个Random类,可以实现系统输入。随机数解决之后就成功了一半了,接下来看代码如何执行吧。import java.util.Random;import java.util.Scanner;public class Game {。 pu..
2022-01-13 16:21:40
2751
4
原创 判断1到100和1到1000中,数字9出现的次数——Java代码实现
目录思路1到100出现9的次数--代码实现1到1000出现9的次数--代码实现思路首先判断个位出现9的次数num % 10 =9;再判断十位出现9的次数num / 10 =9;判断百位出现9的次数:去掉个位和十位之后,将百位变成最后一位数字int a = num / 100;a % 10 = 9;1到100出现9的次数--代码实现public static void main(String[] args) { int j.
2022-01-08 23:18:46
1058
原创 打印九九乘法口诀表——Java代码实现
public class Chengfabiao { public static void main(String[] args) { for (int i = 1; i <= 9; i++) { for (int j = 1; j <=i; j++) { System.out.print(j+"*"+i+"="+i*j+" "); } System.out.pr..
2022-01-08 22:24:01
4724
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人