- 博客(29)
- 收藏
- 关注
原创 剑指 Offer 52. 两个链表的第一个公共节点
题目输入两个链表,找出它们的第一个公共节点。有两种情况:有相交结点和无相交结点题解双指针法(思路如图,但是图放不上来)双指针法与哈希法相比,降低了空间复杂度public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { ListNode node1 = headA, node2 = headB; while( node1!=node
2022-01-25 18:48:50
396
原创 【无标题】
题目输入两个链表,找出它们的第一个公共节点。有两种情况:有相交结点和无相交结点题解双指针法双指针法与哈希法相比,降低了空间复杂度public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { ListNode node1 = headA, node2 = headB; while( node1!=node2 ) {
2022-01-25 18:47:04
348
原创 剑指 Offer 48. 最长不含重复字符的子字符串
题目请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。临界情况考虑aaaaaa 此时最长子字符串长度为1pwwkew 此时最长子字符串为kew,长度为3题解实现思路代码public int lengthOfLongestSubstring(String s) { Map<Character, Integer> dictionary = new HashMap<>(); int res = 0, pre
2022-01-25 00:08:11
261
原创 剑指 Offer 35. 复杂链表的复制
题目请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。示例 1:输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]示例 2:输入:head = [[1,1],[2,1]]输出:[[1,1],[2,1]]示例 3:输入:head =
2022-01-08 23:35:27
74
原创 数据结构-树(下)
堆堆:优先队列——取出元素的顺序依照元素的优先权(关键字)大小堆的两种特性·结构性:用数组表示的完全二叉树·有序性:任意结点的关键字是其子树所有结点的最大(小)值最大堆的操作最大堆的定义typedef struct HeapStruct *MaxHeap;struct HeapStruct { ElementType *Elements;//存储堆元素的数组 int size;//数组当前元素个数 int Capacity;//堆的最大容量 };最大堆的创建MaxHeap
2021-12-15 20:19:15
55
原创 数据结构-排序
希尔排序增量元素不互质,小增量可能不起作用void ShellSort( ElementType A[], int N ){ /* 希尔排序 - 用Sedgewick增量序列 */ int Si, D, P, i; ElementType Tmp; /* 这里只列出一小部分增量 */ int Sedgewick[] = {929, 505, 209, 109, 41, 19, 5, 1, 0}; for ( Si=0; Sedgewic
2021-12-15 20:18:46
56
原创 三十天自制操作系统-day1
BIOS主导BIOS —— 基本输入输出系统计算机启动过程: BIOS按照“启动顺序”,把控制权转交给排在第一位的存储设备:硬盘。然后在硬盘里寻找主引导记录的分区,这个分区告诉电脑操作系统在哪里,并把操作系统被加载到内存中,然后你就能看到经典的启动界面了,这个开机过程也就完成了。内存映射利用内存映射文件技术,系统可以在内存空间中为文件保留一部分空间,并将文件映射到这块保留空间,一旦文件被映射后,操作系统将管理页映射缓冲以及高速缓冲等任务,而不需要调用分配、释放内存块和文件输入/输出的API函数,也不
2021-11-13 22:31:00
704
原创 数据结构-图
图表示 多对多的关系包含:一组顶点(V:Vertex)一组边(E:Edge)边是顶点对有向边表示单行线不考虑重复边、自回路邻接矩阵表示法对于无向图:用n*(n+1)/2的一维数组存储,节省空间好处:方便检查任意一对顶点间是否存在边方便找任意顶点的所有“邻接点”...
2021-06-02 09:58:54
66
原创 数据结构-树(中)
二叉搜索树二叉搜索树/二叉排序树/二叉查找树满足的性质非空左子树所有键值小于根结点键值非空右子树所有键值大于根结点键值二叉搜索树的查找查找从根结点开始,若树为空,返回NULL若搜索树非空,将根结点关键字与X进行比较若x小于根结点键值,只需在左子树继续搜索若x大于根结点键值,只需在右子树继续搜索若二者相等,搜索完成,返回指向此结点的指针(非递归函数执行效率高,故将尾递归改为迭代函数,查找效率取决于树的高度)查找最大/小元素:左/右分支的端点二叉搜索树的插入二叉搜索树的删除
2021-05-19 11:03:15
143
原创 数据结构-树(上)
树与树的表示树的定义树:n个结点构成的有限集合n=0时,成为空树由一个根节点和子树组成注意:子树是不相交的除了根结点外,每个结点有且只有一个父节点(故一棵有n个结点的树有n-1条边)树的基本术语结点的度:结点的子树个数树的度:树的所有结点中最大的度数叶结点:度为0的结点父结点(孩)子结点兄弟结点路径和路径长度:从结点n1到n2的路径是一个结点序列,路径所包含边的个数为路径长度祖先结点子孙结点结点的层次树的深度树的表示儿子兄弟表示法空间利用率较高Elemen
2021-05-06 23:34:14
91
原创 数据结构-队列及实现
队列定义:具有一定操作约束的线性表插入和删除操作:一端插入(入队),一端删除(出队)先进先出队列的顺序存储实现(循环队列)一个一维数组,一个头元素位置变量,一个为尾元素位置变量如何判断队列的空/满?使用额外标记 / 仅使用n-1个空间(判断头尾是否相遇)#define ERROR -1;typedef int Position;typedef int ElementType; struct QNode { ElementType *Data; /* 存储元素的数组 */
2021-03-31 20:53:05
156
原创 数据结构2.2 堆栈
栈的类型定义栈:限定在表的一端(栈顶)进行插入和删除操作的线性表表中没有元素时:空栈栈的存储表示和操作的实现顺序存储/链式存储堆栈的顺序存储实现要事先为它分配一个可以容纳最多元素的存储空间栈顶指针:指示栈顶元素在栈中的位置,值是栈中元素的个数栈的顺序存储结构通常由一个一维数组和一个记录栈顶元素位置的变量组成栈的顺序存储实现代码如下struct SNode { int *Data; /* 存储元素的数组 */ int Top; /* 栈顶指针 */
2021-03-27 20:01:10
125
原创 数据结构2.1 线性表及其实现
2.1线性表及其实现线性表的抽象数据类型描述操作集:线性表∈List,元素X∈ElementType,线性表的基本操作有:List MakeEmpty () :初始化空线性表ElementType FindKth ( int k, List l )int FindElement ( Element x, List l)void InsertElement ( Element x, int i, List l)void DeletElement ( int i, List l)int get
2021-03-21 23:00:24
114
原创 PTA乙级1055 C语言实现
PTA乙级 1055 集体照 (25 分)题目拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下:每排人数为 N/K(向下取整),多出来的人全部站在最后一排;后排所有人的个子都不比前排任何人矮;每排中最高者站中间(中间位置为 m/2+1,其中 m 为该排人数,除法向下取整);每排其他人以中间人为轴,按身高非增序,先右后左交替入队站在中间人的两侧(例如5人身高为190、188、186、175、170,则队形为175、188、190、186、170。这里假设你面对拍照者,所以
2021-03-17 23:36:27
161
原创 java接口
Java接口(以角色创建项目为例)1.接口定义类·接口不是类,而是希望符合这个接口的类满足的需求(类比为图纸)·接口命名格式public interface XxxService—表示定义了一个依赖于Xxx类的接口·接口主体格式:返回值类型+方法名+(参数);注意:(1)接口中所有方法自动是public方法,所以声明方法时不必强调public关键字(2)接口绝不会是实例字段,不需要提供方法体,即无括号package service;import model.Role;import ja
2021-03-11 14:57:22
170
2
原创 继承——类、超类、子类
继承——以工资管理系统为例1.定义子类用extends定义子类子类自动继承超类中的所有方法,比超类封装更多的代码一般将普遍的功能放在超类,更特殊的方法放在子类2.覆盖方法覆盖超类中对子类不适用的方法关键字super.getSalary()表示调用超类中的getSalary()方法3.子类构造器子类的构造器不能访问超类的私有字段,故必须通过一个构造器来初始化这些私有片段使用super调用构造器的语句必须是子类构造器的第一条语句若子类构造器未显式调用超类的构造器,将自动调用超类的无参数构造
2021-03-01 21:20:17
464
2
原创 用户自定义类——以雇员工资系统为例
用户自定义类——以雇员工资系统为例自定义类以工资系统的java实现为例一个源文件只能有一个公共类,但可以有无数个非公共类,但文件名必须与public类的名字相匹配public表示可以被任何方法调用,private表示只有Employee类的方法可以访问这些实例字段import java.time.*;//源文件名是EmployeeTest.java因为文件名必须与public类的名字相匹配//该程序含有两个类:Employee类以及带public修饰词的EmployeeTest类//一个
2021-02-22 18:02:26
229
3
原创 应用LocalDay类实现显示当月日历
应用LocalDay类实现显示当月日历Java代码实现import java.time.*;public class CalenderTest { public static void main(String[] args) { LocalDate date = LocalDate.now(); //第一个LocalDate表示数据类型(返回值类型),第二个LocalDate表示构造函数 int month = date.getMonthValu
2021-02-21 22:50:21
303
5
原创 PTA乙级 1048 C语言实现
PTA乙级 1048题目本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。输入格式:输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。输出格式:在一行中输出加密后的结果。输入样例:1
2020-12-26 12:50:21
134
原创 PTA乙级1045 C语言实现
我的#include<stdio.h>int main(){ int n,cnt=0,flag1,flag2,max=0,min=10000000; scanf("%d",&n); int a[n],b[n]; for(int i=0;i<n;i++){ scanf("%d",&a[i]); if(a[i]>max) max=a[i]; if(a[i]<min) min=a[i]; } for(int i=0;i<n;i++
2020-12-25 15:55:39
107
原创 PTA乙级 1044
PTA乙级 1043 C语言实现题目火星人是以 13 进制计数的:地球人的 0 被火星人称为 tret。地球人数字 1 到 12 的火星文分别为:jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, dec。火星人将进位以后的 12 个高位数字分别称为:tam, hel, maa, huh, tou, kes, hei, elo, syy, lok, mer, jou。例如地球人的数字 29 翻译成火星文就是 hel mar;而火星文 el
2020-12-23 22:09:05
96
原创 PTA乙级1032 C语言实现
PTA乙级 1032题目为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。输入格式:输入在第 1 行给出不超过 105 的正整数 N,即参赛人数。随后 N 行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从 1 开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。输出格式:在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。C语言实现#include<st
2020-12-15 11:20:48
156
1
原创 PTA乙级 1030
PTA乙级 1030题目给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列。现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列。输入格式:输入第一行给出两个正整数 N 和 p,是输入的正整数的个数,p是给定的参数。第二行给出 N 个正整数。输出格式:在一行中输出最多可以选择多少个数可以用它们组成一个完美数列。C语言实现来自大佬的智慧#include<stdio.h>#include<
2020-12-14 16:21:42
67
原创 PTA乙级1028 人口普查
PTA乙级 人口普查 1028题目某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。输入格式:输入在第一行给出正整数 N,取值在(0,105 ];随后 N 行,每行给出 1 个人的姓名(由不超过 5 个英文字母组成的字符串)、以及按 yyyy/mm/dd
2020-12-13 14:05:30
142
原创 PTA 乙级 1023 组个最小数
PTA乙级1023 组个最小数题目给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意 0 不能做首位)。例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的最小的数就是 10015558。现给定数字,请编写程序输出能够组成的最小的数。输入格式:输入在一行中给出 10 个非负整数,顺序表示我们拥有数字 0、数字 1、……数字 9 的个数。整数间用一个空格分隔。10 个数字的总个数不超过 50,且至少拥有 1 个非 0 的数字。输出
2020-12-07 18:28:49
75
原创 PTA乙级 1004 成绩排名
PTA乙级 1004 成绩排名题目读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。输入格式:每个测试输入包含 1 个测试用例,格式为第 1 行:正整数 n第 2 行:第 1 个学生的姓名 学号 成绩第 3 行:第 2 个学生的姓名 学号 成绩… … …第 n+1 行:第 n 个学生的姓名 学号 成绩其中姓名和学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。输出格
2020-11-22 19:15:40
103
原创 PTA乙级 1003 我要通过!
PTA乙级 1003题目“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。得到“答案正确”的条件是:字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符;任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a、 b、 c 均或者是空字符串
2020-11-22 15:39:00
61
原创 PTA乙级 1002
PTA乙级1002 写出这个数文章目录一、题目二、C语言实现1.第一次失败2.second attempt3.third attempt一、题目1002 写出这个数 (20分)读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。输入格式:每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10^100输出格式:在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。输入样例:1234...
2020-11-20 10:34:37
206
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人