- 博客(153)
- 收藏
- 关注
原创 28. 实现 strStr()
题目实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。思路朴素模式匹配算法将主串中所有长度为m
2021-10-19 11:04:36
188
原创 647. 回文子串
题目给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。回文字符串 是正着读和倒过来读一样的字符串。子字符串 是字符串中的由连续字符组成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。思路class Solution { public int countSubstrings(String s) { int n = s.length(); int res = 0; //回文子串数
2021-10-19 10:59:43
187
原创 2. 两数相加
题目给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。思路链表逆序保存,那么直接遍历链表,将两个相应位置的节点值相加,如果有进位,则加入下一个节点的运算中。/** * Definition for singly-linked list. * public class ListNode { * int v
2021-10-18 09:35:55
184
原创 剑指 Offer 35. 复杂链表的复制
题目请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。思路迭代,复制数组,原地修改遍历链表,复制每个节点并将复制的节点到该节点后面。再次遍历链表,每次遍历两个节点。设cur为当前原链表节点,p为复制节点,将原链表节点的random属性值赋给复制的p节点,p.random = cur.random.next; 注意:复制节点的random属性指向的节点也要是
2021-10-17 21:55:08
94
原创 剑指 Offer 24. 反转链表
题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。思路迭代,依次遍历链表,将next指针指向前一个节点class Solution { public ListNode reverseList(ListNode head) { ListNode cur = head; ListNode prev = null; while(cur != null) { ListNode next = cur
2021-10-17 20:52:43
55
原创 剑指 Offer 06. 从尾到头打印链表
题目输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。思路使用快慢指针/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public int[] reversePrint(ListNod
2021-10-17 10:40:46
77
原创 1006. 笨阶乘
题目通常,正整数 n 的阶乘是所有小于或等于 n 的正整数的乘积。例如,factorial(10) = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1。相反,我们设计了一个笨阶乘 clumsy:在整数的递减序列中,我们以一个固定顺序的操作符序列来依次替换原有的乘法操作符:乘法(*),除法(/),加法(+)和减法(-)。例如,clumsy(10) = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1。然而,这些运算仍然使用通常的算术运算顺序:我们
2021-10-17 09:51:01
61
原创 逆波兰表达式——中缀表达式转后缀表达式
中缀表达式转后缀表达式中缀表达式转后缀表达式:创建num栈(数栈)和oper栈(操作符栈),从左往右扫描表达式如果是数字那么直接入num栈如果是操作符① 如果是左括号,直接入操作符栈② 如果是右括号,说明oper栈中有一个做括号与之对应,将操作符栈中的元素依次出栈,放入数栈中,直到找到对应的左括号。左括号不入数栈。③ 如果是运算符 + - * / 查找栈顶运算符的优先级 如果是空栈,直接入操作符栈 如果操作符栈的栈顶元素的优先级大于该运算符,将栈顶运算符出栈,放入数栈中 如果操
2021-10-15 16:10:23
131
原创 剑指 Offer II 036. 后缀表达式
题目根据 逆波兰表示法,求该后缀表达式的计算结果。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。思路后缀表达式计算:① 从左往右扫描下一个元素,直到处理完所有元素。② 若扫描到操作数则压入栈,并回到①;否则执行③③ 若扫描到运算符,则弹出两个栈顶元素,执行相应运算,运算结果压回栈顶,回到①代码一:class Solution { public int evalRPN(String[] tokens) { Stack<S
2021-10-15 11:58:12
62
原创 剑指 Offer 30. 包含min函数的栈
题目定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。思路使用一个辅助栈保存入栈元素的最小值。首先创建两个栈:栈A:数据栈。用于保存数据,保证栈的push()、pop()等功能正常实现。栈B:辅助栈。用于保存数据的最小值。操作:有数据入栈时,如果栈A为空,则直接入栈A、栈B;如果数据大于栈B的栈顶元素,数据入栈A;如果数据小于栈B的栈顶元素,此时数据为最小,入栈A、栈B;栈B将栈A的部分
2021-10-14 20:02:47
51
原创 剑指 Offer 09. 用两个栈实现队列
题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )思路队列是个尾进头出的结构,使用两个栈来描述队列,一个代表队头,一个代表队尾;class CQueue { //创建两个栈,栈一表示队尾,用于添加;栈二表示队头,用于删除 Stack<Integer> s1; Stack<Integ
2021-10-14 19:05:47
72
原创 剑指 Offer II 022. 链表中环的入口节点
题目给定一个链表,返回链表开始入环的第一个节点。 从链表的头节点开始沿着 next 指针进入环的第一个节点为环的入口节点。如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。思路使用哈希表Set集合特点,不允许存放相同的值。遍历链表,...
2021-10-14 14:53:14
96
原创 LeetCode 234.回文链表(Java)
题目给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。解答解法一:使用栈消耗空间判断/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } *
2021-10-04 17:11:40
104
原创 归并排序(Java实现)
归并排序给定一个数组,使用归并排序的方式对其进行排序。解:将这个数组对半分开,分别进行排序。排序后同时遍历,将元素有序存入一个新数组中,最后覆盖掉原数组。代码public class MergeSort { public static void main(String[] args) { int[] arr = {6, 2, 7, 2, 4, 1}; mergeSort(arr); for (int i = 0; i < arr.l
2021-09-24 15:36:10
108
原创 对数器(自己创建数据集检测代码是否通过)排序算法演示
对数器对数器可以在不使用oj平台的情况下创建测试样例测试代码。对数器的原理是创建大量随机样例对自己写好的方法进行测试,将这些结果与简单、效率低下的方法或系统写好的方法得出来的结果进行比对。如果大量测试之后没有错误,那基本可以确定代码正确。举例给定一个数组,用插入排序的方式排序。采用对数器的方式对写好的代码进行测试。解:每次取出一个元素,插入到已经排好序的序列中。编写一个可以测试数组排序的对数器。代码public class Checkout { //测试对数器 p
2021-09-22 19:51:57
177
原创 插入排序(Java实现)
插入排序给定一个数组,用插入排序的方式排序。解:每次取出一个元素,插入到已经排好序的序列中。代码public class InsertionSort { public static void main(String[] args) { int arr[] = {4,2,6,1,3}; insertionSort(arr); for (int i = 0; i < arr.length; i++) { Sy
2021-09-22 17:09:11
93
原创 冒泡排序(Java实现)
冒泡排序给定一个无序数组,用冒泡排序的方式对其进行排序。解:遍历数组,从左到右两两元素进行比较,若左边元素比右边元素大,则交换,将最大的数移到最后一个位置。同理,下一轮则将倒数第二大的数移到倒数第二个位置。长度为n的数组只需要遍历n-1次。代码交换方式1采用了异或运算的方式,使用前提是两个元素地址不能相同,但是值可以相同。已知:相同值进行异或计算为0,任何值与0进行异或操作都不变。剖析交换代码:a = a ^ b; // a = a ^ b; b = b;b = a
2021-09-17 11:19:00
98
原创 选择排序(Java实现)
选择排序给定一个无序数组,我们使用选择排序的方式对其进行排序。解:遍历数组。从数组第一个元素开始遍历数组,将最小的元素与第一个元素进行调换。下次遍历从下一个元素开始。遍历次数为数组长度减一次。代码public class SelectionSort { /** * 选择排序 */ public static void main(String[] args) { int arr[] = {4,2,5,7,8}; sor
2021-09-16 21:46:10
76
原创 IDEA整合tomcat后启动tomcat服务进入默认界面报404错误(后台已启动tomcat服务的情况下再启动另一个tomcat服务导致的端口占用问题)
问题使用IDEA整合tomcat服务后,启动tomcat服务进入默认网页提示404错误。下面是我的配置,检查过没有错误。页面情况如下:详细报错信息:31-Aug-2021 15:02:57.221 严重 [main] org.apache.catalina.core.StandardService.initInternal Failed to initialize connector [Connector[HTTP/1.1-8088]] org.apache.catalina.Lifecycle
2021-08-31 15:13:06
871
原创 Tomcat 电脑里有多个tomcat版本,启动时全都以一个固定版本启动
记录一个tomcat固定版本启动的问题。问题我的电脑中有两个版本的Tomcat,当我启动8.xx版本的tomcat时,却显示9.xxx版本的tomcat已被启动。解决经排查发现之前在系统中配置了tomcat的环境变量,默认以9.xx版本启动。只需要改动环境变量即可。...
2021-08-30 21:00:30
669
原创 前端基础 - ES6
前端基础 - ES6一、简介二、ES6内容1.let & var2.const声明常量3.解构表达式4.字符串扩展api字符串模板5.函数优化函数参数默认值不定参数一、简介ECMAScript 6.0是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布。 ECMAScript 是浏览器脚本语言的规范,而各种我们熟知的js语言,如JavaScript则是规范的具体实现。二、ES6内容1.let & varVS code 创建HTML页面快捷键 shift
2021-08-01 17:46:47
170
原创 P1303 A*B Problem(高精度乘法)
题目描述求两数的积。输入格式两行,两个整数。输出格式一行一个整数表示乘积。输入输出样例输入 #11 2输出 #12说明/提示每个数字不超过 10^{2000},需用高精。解析算法标签:高精度思路:数组模拟数字实现乘法运算。代码解析#include <iostream>#include <string>#define maxn 50010using namespace std;int A[maxn],B[maxn],C[maxn]
2021-03-13 18:54:49
287
原创 P1601 A+B Problem(高精)
题目描述高精度加法,相当于a+b problem,不用考虑负数.输入格式分两行输入。a,b \leq 10^{500}a,b≤10500输出格式输出只有一行,代表a+ba+b的值输入输出样例输入 #1112输入 #210019099输出 #210100解析:算法标签:高精度思路:用数组来模拟非常长的整数,用n位数组来记录一个n位数字。在这里使用了vector容器,更为方便。代码示例#include <iostream>#include <
2021-03-12 21:29:56
73
原创 P1563 [NOIP2016 提高组] 玩具谜题
题目描述小南有一套可爱的玩具小人, 它们各有不同的职业。有一天, 这些玩具小人把小南的眼镜藏了起来。 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外。如下图:这时singersinger告诉小南一个谜題: “眼镜藏在我左数第3个玩具小人的右数第11个玩具小人的左数第22个玩具小人那里。 ”小南发现, 这个谜题中玩具小人的朝向非常关键, 因为朝内和朝外的玩具小人的左右方向是相反的: 面朝圈内的玩具小人, 它的左边是顺时针方向, 右边是逆时针方向; 而面向圈外的玩具小人, 它的左边是逆
2021-03-12 20:59:50
180
原创 P1042 [NOIP2003 普及组] 乒乓球
题目描述华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在1111分制和2121分制下,双方的比赛结果(截至记录末尾)。比如现在有这么一份记录,(其中W表示华华获得一分,L表示华华对手获得一分):WWWWWWWWWWWWWWWWWWWWWWLW在1111分制下,此时比赛的结果是华华第一局1111比00获胜,第二局1111比00获胜,正在进行第三局,当前比分11比11。而在2121分制下,此时比赛结果是华华第一局2121比00获胜,正在进行第二局,比分22比11。如果一局比赛
2021-03-12 19:55:12
2514
原创 P2670 [NOIP2015 普及组] 扫雷游戏
题目描述扫雷游戏是一款十分经典的单机小游戏。在nn行mm列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。现在给出nn行mm列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。输入格式第一行是用一个空格隔开的两个整数nn和mm
2021-03-12 09:43:29
237
原创 AcWing 84. 求1+2+…+n
题目求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。样例输入:10输出:55题目模板:class Solution {public: int getSum(int n) { }};思路:这道题无思路,总结大佬思路。代码一:class Solution {public: int getSum(int n) { char a[n][n
2021-01-28 20:55:09
111
原创 acwing-753 平方矩阵 I
平方矩阵I输入整数N,输出一个N阶的回字形二维数组。数组的最外层为1,次外层为2,以此类推。输入格式输入包含多行,每行包含一个整数N。当输入行为N=0时,表示输入结束,且该行无需作任何处理。输出格式对于每个输入整数N,输出一个满足要求的N阶二维数组。每个数组占N行,每行包含N个用空格隔开的整数。每个数组输出完毕后,输出一个空行。数据范围0≤N≤100输入样例:123450输出样例:11 11 11 1 11 2 11 1 11 1 1 11 2
2021-01-28 14:25:42
215
原创 深度优先搜索:部分和问题
深度优先搜索(DFS, Depth-First Search) 是搜索的手段之一。它从某个状态开始,不断地转移状态直到无法转移,然后回退到前一步的状态,继续转移到其他状态,如此不断重复,直至找到最终的解。例如求解数独,首先在某个格子内填人适当的数字,然后再继续在下一个格子内填人数字,如此继续下去。如果发现某个格子无解了,就放弃前一个格子上选择的数字,改用其他可行的数字。根据深度优先搜索的特点,采用递归函数实现比较简单。题目:给定整数a1、a2、······、an,判断是否可以从中选出若干数,使它们的和.
2020-12-22 20:43:39
241
原创 shell编程
Shell是什么Shell 是一个命令解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。Shell脚本运行方式格式要求脚本以 #!/bin/bash 开头脚本需要有可执行权限脚本的常用执行方式方式一:输入脚本的绝对路径或相对路径首先赋予helloworld.sh 脚本 +x 权限执行脚本方式二:sh + 脚本说明:不用赋予脚本 +x 权限,直接执行即可Shell 的变量Shell
2020-12-06 15:33:34
99
原创 网络配置
Linux网络配置原理图(含虚拟机)查看网络IP和网关查看虚拟网络编辑器修改IP地址(修改虚拟网络的IP)查看网关linux网络环境配置自动获取缺点:linux启动后悔自动获取IP,缺点是每次自动获取的ip地址可能不一样。这不适合用于做服务器,因为我们的服务器ip需要是固定的。第二种方法(指定固定的ip)直接修改配置文件来指定IP,并可以连接到外网(程序员推荐),编辑 /etc/sysconfig/network-scripts/ifcfg-eth0修改后,一定要重启服务
2020-12-05 16:18:46
185
1
原创 HDOJ 2039 三角形
题目:给定三条边,请你判断一下能不能组成一个三角形。输入:输入数据第一行包含一个数M,接下有M行,每行一个实例,包含三个正数A,B,C。其中A,B,C <1000;输出:对于每个测试实例,如果三条边长A,B,C能组成三角形的话,输出YES,否则NO。思路:代码1是我想出来的,我觉得脑子问题很大。建议看代码2。只需要3种情况判断一下就可以了。代码1:import java.util.Scanner;public class Main { public static void m
2020-12-05 14:21:08
133
原创 HDOJ 2007 平方和与立方和
题目:给定一段连续的整数,求出他们中所有偶数的平方和以及所有奇数的立方和。输入:输入数据包含多组测试实例,每组测试实例包含一行,由两个整数m和n组成。输出:对于每组输入数据,输出一行,应包括两个整数x和y,分别表示该段连续的整数中所有偶数的平方和以及所有奇数的立方和。你可以认为32位整数足以保存结果。注意:m和n没有顺序,需要判断import java.util.Scanner;public class Main { public static void main(String[]
2020-12-05 10:27:55
57
原创 组管理和权限管理
组管理和权限管理概述文件/目录 所有者查看文件所有者修改文件所有者组的创建文件目录所在组查看文件/目录所在组修改文件所在的组其它组改变用户所在组改变用户所在组权限介绍rwx权限rwx作用到文件rwx作用到目录修改权限方式一:+、-、= 变更权限方式二:通过数字变更权限修改文件所有者概述在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件有所有者、所在组、其他组的概念。文件/目录 所有者一般为文件的创建者,谁创建了该文件,谁就是文件所有者。查看文件所有者语法:ls -
2020-12-04 16:45:23
88
原创 问题:小明对数位中含有 2、0、1、9的数字很感兴趣(不包括前导0),在1到40中这样的数包括1、2、9、10至32、39和40,共28个,他们的和是574。请问,在1到n中,所有这样的数的和是多少?
特别数的和问题:小明对数位中含有 2、0、1、9的数字很感兴趣(不包括前导0),在1到40中这样的数包括1、2、9、10至32、39和40,共28个,他们的和是574。请问,在1到n中,所有这样的数的和是多少?思路:上一题做的是数的分解,我在里面很困惑啊,想知道是啥的可以点击下方链接去看看。谁知道下一题就是这个,我立马就看出来了这两道题的相似点,然后还顺手把想测试的程序运行时间测了,就很棒。代码1使用indexOf()方法判断,方法二是我想的笨方法判断,我测试后发现我的方法比indexOf要快
2020-12-03 10:49:43
6570
2
原创 问题:把2019分解成3个各不相同的正整数之和,并且要求每个正整数都不包含数字2和4,一共有多少种不同的分解方法?
数的分解问题:把2019分解成3个各不相同的正整数之和,并且要求每个正整数都不包含数字2和4,一共有多少种不同的分解方法?注意:交换3个整数的顺序被视为同一种方法,例如 1000+1001+18和1001+1000+18被视为同一种。思路:这种题给人的感觉就是要循环,最直接的想法就是三层循环,找三个数加和等于2019。题目有要求:各不相同的整数和,不包含2,4,三个数不同的排序视为同一种。所以我加了很多麻烦的条件判断。要想三个数不重复,我让这三个数每个都比前一个大,这样就不会有重复了哈哈哈。详
2020-12-03 10:18:09
4675
原创 问题:给定数列 1,1,1,3,5,9,17,····,从第4项开始,每项都是前三项的和。求第 20190324 项的最后4位数字。
数列求值问题:给定数列 1,1,1,3,5,9,17,····,从第4项开始,每项都是前三项的和。求第 20190324 项的最后4位数字。思路:刚开始看这道题的时候我以为和斐波那契数列那样直接递归就完了,结果写出来报了个栈内存溢出异常,我查了一下,是递归太多次的问题,递归这条路走不通。递归不行的话,我想着用个循环遍历试试吧,就写出了下面的代码1。这时我的想法是这样的:弄个while循环,弄个指针变量,然后弄个数一遍遍更改。最后判断一下倒数第四位是不是0。结果做出来和答案不一样,我把N=1 -
2020-12-02 23:24:05
10400
2
原创 题目描述:设有一头小母牛,从出生第四年起每年生一头小母牛,按此规律,第N年时有几头母牛?
题目描述:设有一头小母牛,从出生第四年起每年生一头小母牛,按此规律,第N年时有几头母牛?输入:输入一个整数N。(1<= N <=50)输出:第N年时母牛的数量样例输入:5样例输出:3题目思路:对母牛进行编号,每一只母牛对应一个年龄,这刚好使用map容器进行存储。key为编号,value为年龄。使用循环模拟年份增长,每年母牛增加一岁,母牛年龄大于等于4时每年生一个小母牛。import java.util.HashMap;import java.util.Scanner;publ
2020-12-01 22:29:31
3319
原创 题目:一个字符串的非空子串是指字符串中长度至少为1的连续的一段字符组成的串。例如,字符串aaab有非空子串a,b,aa,ab,aaa,aab,aaab,一共七个。注意在计算时,只计算本质不同的串的个数
不同子串第十届蓝桥杯省赛题题目:一个字符串的非空子串是指字符串中长度至少为1的连续的一段字符组成的串。例如,字符串aaab有非空子串a,b,aa,ab,aaa,aab,aaab,一共七个。注意在计算时,只计算本质不同的串的个数。请问,字符串0100110001010001有多少个不同的非空子串?思路:我的第一想法是使用toCharArray将字符串存到一个字符数组中,对这个字符数组进行两次循环求得所有情况。这种方式很麻烦。substring() 可以截取字符串,就很方便。注:我直接将测试的字符串写
2020-12-01 20:47:55
3017
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人