自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 剑指 Offer 13. 机器人的运动范围

题目描述地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?示例 1:输入:m = 2, n = 3, k = 1输出:3示例 2:输入:m =

2022-05-17 09:30:00 99

原创 剑指 Offer 15. 二进制中1的个数

题目描述编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在 Java 中,编译器使用 二进制补码 记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。示例 1:输入:n = 11 (控

2022-05-16 10:00:00 90

原创 剑指 Offer 14- I. 剪绳子

题目描述给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 ×

2022-05-15 12:00:00 113

原创 剑指 Offer 12. 矩阵中的路径

题目描述给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。例如,在下面的 3×4 的矩阵中包含单词 “ABCCED”(单词中的字母已标出)。示例 1:输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,

2022-05-14 11:15:00 74

原创 剑指 Offer 11. 旋转数组的最小数字

题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一次旋转,该数组的最小值为 1。注意,数组 [a[0], a[1], a[2], …, a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], …, a[n-2]] 。示例 1:输入:n

2022-05-13 09:00:00 111

原创 剑指 Offer 10- II. 青蛙跳台阶问题

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21示例 3:输入:n = 0输出:1提示:0 <= n <= 100分析因为青蛙一次可以跳1级台阶或者2级台阶,可以当作动态规划问题,f[n]表示青蛙跳上一个n级台阶的总跳法数,那么最后一步有两

2022-05-12 13:45:00 48

原创 剑指 Offer 10- I. 斐波那契数列

题目描述写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:1示例 2:输入:n = 5输出:5

2022-05-11 11:03:28 225

原创 剑指 Offer 09. 用两个栈实现队列

题目描述用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:[“CQueue”,“deleteHead”,“appendTail

2022-05-07 09:15:00 41

原创 Java数学处理类

1,数学运算Math类:在Math类中提供了众多数学函数方法,主要包括三角函数方法、指数函数方法、取整函数方法、取最大值、最小值以及平均值函数方法,这些方法都被定义为static形式,所以在程序中应用比较简便。可以使用如下形式调用:Math.数学方法三角函数方法:public static double sin(double a):返回角的三角正弦。public static double cos(double a):返回角的三角余弦。public static double tan(do

2022-05-06 20:29:29 362 1

原创 Java字符串

字符串1.1,声明:String sString:字符串类型; s:字符串变量名1.2,创建:方法1:String(char a[])用一个字符数组a创建String对象:char a[] = {'h','e','l','l','o'};String s = new String(a);String s1 = new String("hello");//s和s1是一样的方法2:String(char a[], int offset, int length)提取字符数组a中

2022-05-05 09:24:36 96

原创 剑指 Offer 06. 从尾到头打印链表

题目描述输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000分析题目要求从尾到头返回,但是链表是从头到尾开始遍历,我们可以将链表先正序保存到数组中,然后再将数组反转。还有一种方法是将链表按顺序压入栈中,然后在弹出,因为栈是后进先出,所以刚好满足题意代码/** * Definition for singly-linked list. * struct L

2022-05-05 09:23:50 48

原创 剑指 Offer 07. 重建二叉树

题目描述输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。示例 1:Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]Output: [3,9,20,null,null,15,7]示例 2:Input: preorder = [-1], inorder = [-1]Output: [-1]限制:0 <= 节点个数 <= 5000分析在二

2022-05-04 09:13:16 41

原创 Java数组

数组1,一维数组声明:数组元素类型 数组名字[];数组元素类型[] 数组名字;分配内存:数组名字 = new 数组元素的类型[数组元素的个数];//使用new关键字为数组分配内存时,整型数组中各个元素的初始值都为0声明同时分配内存:数组元素的类型 数组名 = new 数组元素的类型[数组元素的个数];初始化:int arr[] = new int[]{1, 2, 3, 4, 5};int arr2[] = {1, 2, 3};2,二维数组声明:数组元素类型 数组名字[]

2022-05-03 10:39:53 51

原创 剑指 Offer 05. 替换空格

题目描述请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”限制:0 <= s 的长度 <= 10000分析题目要求把空格替换成“%20”,如果s的长度为n,那么输出字符串的长度为n + 2 * m ,m为空格的个数首先统计空格的个数,记为m改变s的长度为n + 2 * m使用两个指针p1,p2,分别指向原始字符串的尾部,和现在字符串的尾部判断p1指向的值是不是为空

2022-05-03 09:49:18 52

原创 Java流程控制

1,复合语句也称为块语句,以整个块区为单位的语句,由开括号“{” 开始,闭括号”}“结束。复合语句中还可以嵌套复合语句。2,条件语句根据不同的条件执行不同的语句,包括if条件语句和switch多分支语句。2.1 if条件语句简单if条件语句:if (表达式) { 语句序列}表达式返回的是一个布尔值,如果为真,执行大括号内的语句序列,如果为假,不执行。if…else语句:if (表达式) { 语句序列1}else { 语句序列2}表达式返回的是一个布尔值,如

2022-05-02 17:50:34 330

原创 剑指 Offer 04. 二维数组中的查找

题目描述在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 target = 5,返回 true。

2022-05-02 08:21:45 64

原创 剑指 Offer 03. 数组中重复的数字

题目描述找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000分析数据范围:n≤100000 => O(nlogn) => 各种sort,线段树、树状数组、set/map、heap、拓扑排序、d

2022-05-01 11:34:53 64

原创 Java数据类型转换

类型转换由于Java是强类型语言,所以进行有些运算的时候,需要用到类型转换低------------------------------------------------------------>高byte, short, char -> int -> long -> float -> double强制转换(类型)变量名 高->低自动转换低->高注意:不能对布尔值进行转换不能把对象类型转换为不相干的类型在把高容量转换到低容量的时候,需要强制

2022-05-01 11:03:34 62

原创 Java基本类型

基本类型java是一门强类型语言:要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用1. 数值类型整数类型:byte占1个字节范围:-128~127short占2个字节范围:-32768~32767int占4个字节范围:-2147483648~2147483647long占8个字节范围:-9223372036854775808~9223372036854775807为了区分long类型要在数字后面加L浮点类型:float占4个字节double占8个

2022-05-01 10:26:08 78

原创 Windows常见DOS命令

打开CMD的方式开始+系统+命令提示符Win键+R 输入cmd在任意的文件夹下面,按住shift键+鼠标点击:在此处打开命令行窗口资源管理器的地址栏前面加上cmd+空格+路径常用DOS命令#盘符切换直接出入磁盘+冒号:#查看当前目录下的所有文件dir#切换目录 change directorycd返回上一级目录 cd ..#清理屏幕 clear screencls#退出终端exit#查看电脑ipipconfig#打开应用打开计算器:calc打开画图工具:mspa

2022-04-30 14:59:15 765

原创 Markdown基本语法

一级标题:一个 井号#+空格+标题名字二级标题:两个 井号##+空格+标题名字三级标题:三个 井号###+空格+标题名字四级标题:四个 井号####+空格+标题名字最多六级标题字体粗体:两边各加两个星号**hello world斜体:两边各加一个星号hello world斜体并加粗:两边各加三个星号hello world删除线:两边个加两个~~hello world引用大于号> + 空格hello world分割线三个—或三个***图片感叹号!+中括号[

2022-04-30 14:27:26 219

转载 【第二章】队列

文章目录一、队列二、具体操作实例一、队列先进先出二、具体操作1,在队尾插入元素,在队头弹出元素int q[N], hh, tt = -1;2,插入q[ ++ tt] = x;3,弹出hh ++ ;4,判断队列是否为空hh <= tt ? "NO" : "YES"5,取队头元素q[hh];实例实现一个队列,队列初始为空,支持四种操作:push x – 向队尾插入一个数 x;pop – 从队头弹出一个数;empty – 判断队列是否为空;query – 查询

2022-01-19 10:22:47 121

原创 【第二章】栈

文章目录一、栈二、具体操作3.实例一、栈先进后出二、具体操作1,压栈stk[++tt]=x2,弹出tt–3,栈顶stk[tt]4,栈是否为空if(tt>0) not emptyelse empty3.实例(1)实现一个栈,栈初始为空,支持四种操作:push x – 向栈顶插入一个数 x;pop – 从栈顶弹出一个数;empty – 判断栈是否为空;query – 查询栈顶元素。现在要对栈进行 M 个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。输入格

2022-01-18 10:11:02 125

原创 【第二章】链表

文章目录前言一、单链表1,具体操作二、双链表前言链表可以使用结构体+指针的方式实现,但是这种方式的效率很低,所以这里分别介绍了使用数组来实现单链表和双链表的方法。提示:以下是本篇文章正文内容,下面案例可供参考一、单链表单链表中最常用的是邻接表(n个链表),邻接表的作用主要是存储树和图。1,具体操作单链表需要两个数组来分别存储节点的值和节点的next指针。实现一个单链表,链表初始为空,支持三种操作:向链表头插入一个数;删除第 k 个插入的数后面的数;在第 k 个插入的数后插入一个数。

2021-12-18 17:15:44 86

原创 【第一章】区间合并

文章目录前言一、具体操作二、使用案例前言区间合并是指多个有交集的区间合并成一个区间实际采用的是贪心算法。提示:以下是本篇文章正文内容,下面案例可供参考一、具体操作(1)按区间左端点排序(2)扫描整个区间,将有交集的区间进行合并如何合并:1,假设每个区间为【l,r】2,如果前一个区间是下一个区间的子集,则第一个区间左右端点不变3,如果前一个区间和下一个区间有交集,则 r 更新为第二的区间的 r4,如果前一个区间和下一个区间无交集,则前一个区间左右端点不变,找到一个无法合并的区间,并把

2021-12-14 09:22:56 558

原创 【第一章】整数离散化

文章目录前言一、具体操作二、使用案例前言整数离散化主要用于对于值域很大,而数目很少的数组,将这样的数组映射到一个值域也差不多的数组中。提示:以下是本篇文章正文内容,下面案例可供参考一、具体操作例如有一个数组a[]=[1,3,100,2000,50000],我们要将这个数组映射到b[]=[1,2,3,4,5]。1)a[]中可能有重复元素(去重)2)如何算出a[i]离散化之后的值(二分)具体的代码模板:vector <int> alls;//存储所有待离散化的值sort(al

2021-12-11 22:09:51 175

原创 【第一章】位运算

文章目录一、位运算常用操作二、使用案例一、位运算常用操作1,求n的二进制表示(最右边为第0位)中第k位是几1)先把第k位移到最后一位:n>>k2)看个位是几:x&1综上:n>>k&12,lowbit(x):返回x的最后一位1(最右边的1)1)lowbit(1010)=10;lowbit(101000)=10002)实现:x&(-x)=x&(~x+1)例如:x=1010…10…0;~x=0101…01…1;~x+1=0101…10

2021-12-11 17:46:43 400

原创 【第一章】双指针算法

文章目录前言一、代码模板二、简单使用例一:最长连续不重复子序列例二: 数组元素的目标和总结前言双指针算法应用的非常广泛,前面讲到的快速排序、归并排序其实都是一种双指针算法。双指针算法包括:两个指针分别指向两个不同的序列;两个指针指向一个序列(这种是比较常见的情况)。提示:以下是本篇文章正文内容,下面案例可供参考一、代码模板一般双指针算法都会有以下形式:for(int i=0,j=0;i<n;i++){ while(j<i&&check(i,j)) j++;

2021-12-10 09:52:09 127

原创 【第一章】差分

文章目录前言一、一维差分例一二、二维差分例二:前言差分相当于前缀和的逆运算。提示:以下是本篇文章正文内容,下面案例可供参考一、一维差分有数组A[a1,a2,a3…an],构造数组B[b1,b2,b3…bn],使得ai=b1+b2+b3+…+bi,易知b1=a1,b2=a2-a1,b3=a3-a2…bn=an-a(n-1);不用考虑如何构造,只要每次进行差分就行。此时B就称为A的差分,A就称为B的前缀和。差分可以用于求一个数组的一部分区间[l,r]的每个数加上一个数c。这时我们让b(l)+=c

2021-12-08 22:14:15 77

原创 【第一章】前缀和

文章目录前言一、后缀和前言比如一个数组里面的元素有[a1,a2,a3,a4…an],前缀和Si=a1+a2+…+ai;注意要让下标从1开始,S0=0;前缀和可以用来计算从[l,r]之间元素的和:Sr-Sl-1。提示:以下是本篇文章正文内容,下面案例可供参考一、后缀和输入一个长度为 n 的整数序列。接下来再输入 m 个询问,每个询问输入一对 l,r。对于每个询问,输出原序列中从第 l 个数到第 r 个数的和。输入格式第一行包含两个整数 n 和 m。第二行包含 n 个整数,表示整数数列。

2021-12-08 08:14:29 152

原创 【第一章】高精度

文章目录前言一、高精度加法二、高精度减法三、高精度乘法总结前言高精度主要是对c++语言而言,比如两个1e6相加减,一个数的长度为1e6和一个数为1e9相乘除,java里面有大整数类和python里面默认无穷大不需要考虑,而且高精度不常考,所以这里只介绍一些模板。提示:以下是本篇文章正文内容,下面案例可供参考一、高精度加法vector<int> add(vector<int> &A,vector<int> &B){ vector&l..

2021-12-07 19:46:39 975

原创 【第一章】二分

文章目录前言一、整数二分二分出left区间:二分出right区间:如何选择上述两个模板二、浮点数二分总结例1:例二:前言二分的本质并不是单调性,面对单调性的题目可以二分,但是二分也可以用到非单调的题目。二分的本质是边界。提示:以下是本篇文章正文内容,下面案例可供参考一、整数二分如果存在一个性质,使得一个区间的左边不满足(下面即为left区间),而右边满足(下面即为right区间),左右区间不重合,那么我们可以使用二分来找到这个边界。二分出left区间:选定一个中间值:mid=(l+r+..

2021-12-05 20:03:36 58

原创 【第一章】归并排序

文章目录前言一、基本思路1.确定分界点x2.递归排序3.归并总结前言归并排序的思想也是分治提示:以下是本篇文章正文内容,下面案例可供参考一、基本思路1.确定分界点x这里的分界点为中间下标 mid=(l+r)/2 ,快速排序选的是值,而归并排序选取的下标。2.递归排序递归排序左右两边3.归并采用双指针算法合二为一采用两个指针分别指向左右两个区间的初始下标,即 l 和 mid 比较两个值q[l]和q[mid]的大小,把较小的值放到新的数组tmp中,并且较小值的下标加一,最后将没有搜..

2021-12-05 16:45:54 125

原创 【第一章】快速排序

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、基本思路1.确定分界点x2.调整区间3.递归总结前言快速排序采用的是分治的思想提示:以下是本篇文章正文内容,下面案例可供参考一、基本思路1.确定分界点x可以是数组的左右边界、中间值或随机。2.调整区间使得第一个区间的值都小于等于x,第二个区间的值都大于等于x。###方法一:额外使用两个数组a,b,如果原数组q中的值小于x,放到数组a中,如果原数组q中的值大于x,放到数组b中,最后把a,b数组合并到原数

2021-12-05 14:10:28 1134

空空如也

空空如也

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

TA关注的人

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