自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 spring整合mybatis所需要导入的jar包

<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.15</version> </dependency> .

2022-03-05 08:57:01 619

原创 16.使用数组实现链表

思想:一个数组存放值,另一个数组存放的是索引。这样与正常链表结构中的val ,next 相对应。定义一个indx ,表示的是插入元素的顺序(第几个插入的元素)。单链表:定义头节点为 -1,indx 为 0;核心操作为 addToHead(), add(int k, int x), remove(int k)addTohead:public static void addToHead(int x) { e[inx] = x; ne[inx] = h

2021-10-22 14:47:01 362

原创 15.区间和问题

概述:区间和是在无限长度的数轴上,稀疏的排布若干点,点的总数与数轴的范围相差甚大。求任意一个区间内所有点的和即位区间和。思路:采用映射的思想。将数轴上的每个点都映射到一个连续的空间内,然后使用二分的方法去查找到映射的索引,使用前缀和的思想去存储区间内的值。具体步骤如下:代码如下:package cn.liyi.day08;import java.util.*;public class Demo802 { public static void m...

2021-10-12 14:15:20 329

原创 14.二进制中1的个数

基础知识:以 5 举例原码:0000 0000 0000 0000 0000 0000 0000 0101反码:1111 1111 1111 1111 1111 1111 1111 1010(原码取反)补码:1111 1111 1111 1111 1111 1111 1111 1011 (反码基础上 + 1)思路:lowbit 操作是返回最后一个 1。n & -n如下(5举例):n :0000 0000 0000 0000 0000...

2021-10-12 14:07:47 118

原创 13.判断子序列

题目:给定一个长度为 n 的整数序列,一级一个长度为 m 的整数序列,判断 a 序列是否为 b 序列的子列。子序列指序列的一部分项按原有次序排列。思路:使用双指针算法,两个指针分别指向 a 和 b 的首部。一次检查 a [ i ] 是否等于 b [ j ],若相等,则 i 和 j 均加 1。若不相等则 i 不动,j 加1。最后判断 i 与 a 的长度是否相等。若相等则为子序列,反之则不是。代码如下:package cn.liyi.day08;import java.util.S

2021-10-12 13:54:18 221

原创 12.数组元素的目标和

思想:两个有序的数组,i 指针从a 数组的头开始遍历,j 指针从b 数组的尾开始遍历,这样可以保证两个数组至多遍历一遍,时间复杂度为O(n)代码如下:package cn.liyi.day07;import java.util.Scanner;public class Demo800 { public static int N = 10010; public static int[] a = new int[N]; public static int[] b =

2021-10-12 13:40:34 71

原创 11.最长连续不重复子序列的长度

思想:使用双指针法模板:for(int i = 0, j = 0; i < n; i ++){ while(j < i && compare(i, j)){ //... }}个人总结:此时没有学习哈希,可以定义一个数组表示子序列中数字出现的次数,每一次进入for循环,对应数字的数组 s 中的索引位置会加1。然后在while 中进行判断。代码如下:package cn.liyi.day06;import java.

2021-10-06 15:09:36 183

原创 10.差分和差分矩阵

思想:就是前缀和的逆运算。一个数组 a ,需要假象一个数组 b , a[ i ] = b[ 1 ] + b[ 2 ] + b[ 3 ] + ... + b[ i ];例子:方法1:加入需要在数组 a 的 [ l ~ r ] 范围内加 c ,按照以往的思维,遍历输入,然后在 l 到 r 的范围内一次加 c 。时间复杂度是O(n)方法2:运用差分的思想就是,在 b[ l ] 加上 c , b[ r + 1 ] 减去 c 。由于数组 a 是数组 b 的前缀和。思考一下就是得到了方法1所得到..

2021-09-29 17:18:25 112

原创 9.子矩阵的和

思想:前缀和思想相同,只不过子矩阵的和转化为二维。重点:首先了解s [ i ][ j ] 指的是什么?找到二维矩阵的第 i 行,第 j 列。其左上角所有元素的和即为 s [ i ][ j ]。怎么计算s [ i ][ j ] ?以下图举例:1.首先计算 s[ i - 1 ][ j ] 为绿色部分2.再加上 s [ i ][ j - 1 ] 的绿色部分3.得到的图像深绿色部分为相加重复的部分,需要减去,深绿色部分为 s [ i - 1 ][ j - 1 ]..

2021-09-28 13:12:16 697

原创 8.前缀和计算

思想:运用数学知识数列的前N项和s[ i ] = s[ i - 1 ] + a[ i ];注意事项:数组的存储从索引为1的位置开始存储。因为s0 = 0代码如下:package cn.liyi.day05;import java.util.Scanner;public class Demo795 { public static final int N = 100010; public static int[] a = new int[N]; publ

2021-09-28 10:18:16 52

原创 7.高精度加法

思路:1.将两个大整数看成是两个字符串2.将两个字符串存入到数组中,按照高位在后,低位在前的方式存储3.使用遍历的方法,将两个数组按位相加并且进位,存放在数组C中4.最后将数组C按照倒序输出得到最终结果代码如下:package cn.liyi.day04;import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class Demo791 { public

2021-09-27 16:32:40 119

原创 6.求一个数的三次方根

思想:使用二分的方法判断package cn.liyi.day03;import java.util.Scanner;public class Demo190 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); double x = sc.nextInt(); double l = -10000, r = 10000;

2021-09-26 15:22:42 115

原创 5.有序数组内查特定数字的范围

思路:1.首先找到需要查找数字x的左边界2.其次查到到x的又边界重点:查到边界的方法使用二分注意事项:在查找x右边界时,mid = (l + r + 1) / 2,是为了防止陷入while的死循环在查找x左边界时:while(l < r) { int mid = (l + r) / 2; if(num[mid] >= x) r = mid; else l = mid + 1;}在查找x右边界时:

2021-09-26 14:41:54 182

原创 4.求逆序对的个数

思路:使用归并排序的方法逆序对的个数可以看成三个部分组成1.全部在分界点左边的逆序对的个数2.全部在分界点右边逆序对的个数3.分别在分界点左右的逆序对的个数可以使用方法mergeSort (int l, int r)。前两种情况的逆序对的总数为:ans = mergeSort(l, mid) + mergeSort(mid + 1, r)第三种情况思路:归并排序的思想使用双指针 i 指针指向左边的数组,j 指针指向右边的数组,当遇到 j 指向的大于 i 指向的时候,恰好i 左

2021-09-24 20:21:36 1109

原创 3.归并排序

思想:使用双指针,将数组从中间分开,递归排序,然后归并。1.确定分界点2.递归3.归并代码如下:package cn.liyi.day02;public class Demo787 { public static int[] p = {2, 5, 7, 8, 4}; public static int[] temp = new int[5]; public static void main(String[] args) { mergeS

2021-09-24 15:37:59 67

原创 2.找到第K小的数字

思想:首先使用快速排序判断第K个数字在快速排序递归中处于分界点的左侧还是右侧。从所在侧继续进行递归package cn.liyi.day01;import java.util.Scanner;/*找到第K小的数字* */public class Demo786 { public static int[] num = {1, 3, 5, 8, 2}; public static void main(String[] args) { int k;

2021-09-23 20:36:59 77

原创 1.快速排序

快速排序思想:1.先确定一个分界点x2.排序: x左边都是小于等于x的 x右边都是大于等于x的3.递归方法1:建立两个数组,p , q确定x后遍历原始数组num,小于x的放入p,大于x的放入q;再重新放入num中方法2:确认两个指针l , r分别指向num的头和尾,确认一个分界点x当num[l] < x 时,l++,不满足条件则停止当num[r] > x时,r--,不满足条件则停止交换num[l],num[r]...

2021-09-23 19:51:56 60

空空如也

空空如也

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

TA关注的人

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