自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 jdk动态代理和cglib动态代理

Spring AOP 中底层以代理模式实现,主要为JDK动态代理和cglib动态代理JDK动态代理(目标类实现了接口,spring中默认采用jdk动态代理): ①定义接口Personpublic interface Person { public void sing(); public void dance();} ②定义...

2019-08-08 01:02:44 197

原创 SSM秒杀项目(六)秒杀模块

秒杀页面展示:第一次点击秒杀,减库存下订单,再次点击造成重复秒杀,无法购买。秒杀逻辑:①为秒杀按钮绑定点击事件获取秒杀地址----------onclick="getSeckillPath()",当点击秒杀按钮,通过ajax异步提交获取秒杀地址; //获取秒杀地址 function getSeckillPath(){ var goodsId = ...

2019-08-07 23:22:10 555 1

原创 SSM秒杀项目(五)商品详情页

商品详情页展示:业务处理逻辑:①在秒杀商品列表页点击商品详情,根据uri路径参数"${goods.id}/to_detail"选择对应的controller进行逻辑业务处理;@RequestMapping("/{goods.id}/to_detail") public String detail(@PathVariable("goods.id") long id,Model ...

2019-08-06 21:17:18 740

原创 SSM秒杀项目(四)商品列表页

商品展示页效果:代码:这里仅仅在数据库中插入了一件商品进行展示,主要包括商品名称、商品图片展示、秒杀价以及详情按钮。<body> <!-- 表格数据 --> <div class="container"> <div class="row"> <div class="col-md-4 col-md-o...

2019-08-05 22:10:09 1400

原创 SSM秒杀项目(三)登录模块

登录页面:登录页面(没有注册)可以从网上下载一个简单模板,要修改的就是引用文件的路径。页面展示如下:数据库准备:在数据库中新建用户表,字段包括用户名和密码(两次MD5计算后的字符串),还有第二次MD5计算所用到的盐值。插入登录用户数据。登录逻辑:①为登录按钮设置点击函数;②获取用户名和密码,利用js函数对密码+盐值(不是数据库中的盐值)计算md5值,将生成的md5值作为...

2019-08-02 21:55:13 278

原创 SSM秒杀项目(二)项目基础配置

maven工程引入jar包本项目采用Maven工程构建,具体依赖如下<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0...

2019-08-01 22:29:11 131

原创 SSM秒杀项目(一)简介

本次秒杀项目是根据慕课网的秒杀视频项目做的,算是学完SSM后的一个实战。秒杀简介:电商平台经常做一些低价促销活动,吸引了许多顾客进行抢购。在同一时间开放购买页面,大量用户同时点击购买商品。秒杀业务特点:1.同一时间网站的访问流量瞬间激增;2.秒杀的商品库存一般远远低于访问购买的用户数量;3.秒杀逻辑一般就是减库存下订单,这是一个原子操作。秒杀系统设计思路:1....

2019-08-01 21:06:54 1454

原创 50.二叉搜索树第k小的结点

题目:给定一棵二叉搜索树,请找出其中的第k小的结点。解析:二叉搜索树的左子树的结点小于根节点,右子树的结点大于根节点。左右子树同样的满足该条件。其实中序遍历二叉树就是按照从小到大的顺序输出。①利用迭代对二叉搜索树进行中序遍历;②定义变量k,每访问一个节点就将--k,直到k=0,此时将要访问第k小的结点;TreeNode KthNode(TreeNode pRoot, int k)...

2019-07-11 12:48:25 209

原创 49.之字形打印二叉树

题目:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 解析:在层次遍历二叉树的基础上改变不同行的打印顺序 ①层次遍历二叉树; ②在层次遍历二叉树的基础上对层数进行判断该层是奇数层还是偶数层; ③...

2019-07-10 12:51:23 119

原创 48.对称二叉树

题目:请实现一个函数,用来判断一颗二叉树是不是对称的。注意如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的解析:其实用递归很简单,递归判断二叉树的左右子树是否为对称的(画个图就知道了)boolean isSymmetrical(TreeNode pRoot){ if (pRoot == null) return true; return doSymmetri...

2019-07-09 13:04:50 156

原创 47.二叉树下一结点

题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。解析:给出二叉树的当前结点,获取中序遍历顺序中当前结点的下一结点①首先判断当前结点是否有当前结点;②如果当前结点有右结点,则以该右结点为根节点,遍历根节点直到最左节点;③如果当前结点没有右结点:(有两种情况)a.如果当前结点是根节点,那么中序遍历后的...

2019-07-08 13:04:04 119

原创 46.二叉树的深度

以下三题都是关于二叉树深度的问题题目1:输入一棵二叉树,求该树的深度(最大)。注意:从根结点到叶结点依次经过的结点(含根、叶结点),形成树的一条路径,最长路径的长度为树的深度解析:1.递归(左右子树的最大深度+1即为此二叉树的深度)public int TreeDepth(TreeNode root) { if (root == null) return 0; int leftD...

2019-07-04 13:03:35 395

原创 45.二叉树转链表

题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解析:二叉搜索树:左子树结点值大于右子树结点值①定义一个转换函数convertnode将root结点传进去做转换树为链表的操作;②在convertnode函数中,判断root是否有左子树,有则继续调用convertnode函数将root.left传进去将左子树转化为链表;同...

2019-07-03 12:32:59 664

原创 44.二叉树中和为某一值的路径

题目:输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)解析:①从根节点开始递归访问左子树同时将给出的整数减去访问的结点值,当叶子结点的值等于剩余整数时,说明该路径满足条件,将其保存到List中;②不管满不满足条件,都对访问过的结点后退一步...

2019-07-01 13:15:25 124

原创 43.二叉树后序遍历的结果

题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。解析:二叉搜索树为二叉树左节点小于根节点,右节点大于根节点;①[5, 7, 6, 9, 11, 10, 8]数组中最后一位元素8为二叉搜索树的根节点,从后往前找到所有连续比根节点8大的数即为根节点8的右子树,记录此时的位置索引index;②如果该数组...

2019-06-28 13:03:06 726

原创 42.二叉树的镜像

题目:操作给定的二叉树,将其变换为源二叉树的镜像。解析:二叉树的镜像只要交换二叉树的左右结点就行。public void Mirror(TreeNode root) {  if (root != null){   TreeNode node = root.left;//保存左节点   root.left = ...

2019-06-28 12:38:15 114

原创 41.二叉树的子结构

题目:输入两棵二叉树A,B,判断B是不是A的子结构。解析:①从二叉树A的根节点root开始,判断此时二叉树B是否以root开始且以下结点与二叉树A是否相等,用变量ret保存返回的布尔变量(为什么不直接return,因为B可能从A根节点的右孩子开始为其子结构或左孩子开始为其子结构);②如果A树有右孩子,将右孩子当做B树的根节点,判断B树是否以此节点为开始是A树的子结构;同样的如果A树有左孩子,...

2019-06-27 12:50:15 300

原创 40.前序和中序遍历重建二叉树

题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解析:①首先根据前序遍历可知,前序序列的第一个元素为根节点,即1为根节点;②在中序遍历序列中找到1所在的位置,1之前的序列为左子树,即{4,7,2}为...

2019-06-26 12:59:43 196

原创 39.二叉树的后序遍历

题目:二叉树的后序遍历解析:1.递归遍历public List<Integer> postorderTraversal1(TreeNode root) { List<Integer> list = new ArrayList<Integer>(); if (root == null) return list; postorder(root,l...

2019-06-25 13:10:53 170

原创 38.二叉树的中序遍历

题目:中序遍历二叉树解析:1.递归遍历public List<Integer> inorderTraversal1(TreeNode root) { List<Integer> list = new ArrayList<Integer>(); if (root == null) return list; inOrder1(root,list);...

2019-06-24 13:07:22 216

原创 37.二叉树的前序遍历

题目:前序遍历二叉树解析:1.递归遍历public List<Integer> preorderTraversal1(TreeNode root) { List<Integer> list = new ArrayList<Integer>(); if (root == null) return list; preOrder(root,list)...

2019-06-21 13:03:30 135

原创 36.层次遍历二叉树

题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。解析:1.所有节点全部放入一个List中①创建队列Queue,开始将根节点add进队里中;②取出队列中的结点,将该节点加入List中;③再将该节点的左、右结点add进Queue队列中;④循环②③步骤,直到Queue队列为空,所有节点全部被添加进List中;public ArrayList<Integer> Pri...

2019-06-20 13:16:34 126

原创 35.奇偶链表

题目:给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。解析:①新建两个链表结点p1和p2分别连接单链表中奇数结点和偶数结点;②定义计数count,遍历链表,如果当前结点计数count为奇数,将该节点连接到p1后,如果该当前结点计数为偶数,将该节点连接到p2后;③链表遍历完成后,p1和p2后分别挂着奇数结...

2019-06-19 12:54:49 148

原创 34.两两交换链表中的结点

题目:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。解析:①用递归的做法,先交换当前两个结点;②将交换后的尾结点指向下个要交换的结点;③重复上述步骤①②,直到后面只有一个节点或没有结点。 public ListNode swapPairs(ListNode head) {   if (head == null)   return nu...

2019-06-18 13:16:52 145

原创 33.删除链表的倒数第 n 个节点

题目:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。例如:给定一个链表: 1->2->3->4->5, 和 n = 2当删除了倒数第二个节点后,链表变为 1->2->3->5.解析:前面有一题是输出倒数第k个结点。稍微变一点就可以。1.常规做法①首先遍历链表,获取链表的长度len;②删除倒数第n个结点转换成删除顺数第le...

2019-06-14 13:20:52 149

原创 32.回文链表

题目:请判断一个链表是否为回文链表。解析:1.利用栈求解①首先遍历链表获取链表的长度len;②根据链表的长度,将链表的前半部分压入栈,将后半部分依次与弹栈的元素比较看是否一致,一致则为回文链表;③这里注意的是链表的后半部分的开始位置(链表长度的奇偶)。public boolean isPalindrome1(ListNode head) { if (head == null) r...

2019-06-13 12:55:20 132

原创 31.删除链表中重复元素

题目:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点。解析:1.保留重复的结点例:1->1->2①比较当前结点的值与下一结点的值,如果相同,则当前结点指向下一结点的下一结点;②如果当前结点的值与下一结点的值不同,则当前结点移动到下一结点。③根据上述思路,由于当前结点的值1和下一结点的值1相同,则当前结点指向下一结点的下一节点,即1->2。public ...

2019-06-12 13:01:46 169

原创 30.合并两个有序的链表

题目: 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。解析:递归①比较两个有序链表p1和p2的当前结点值,如果p1的结点值大于p2的结点值,将当前p2的结点指向当前p1结点,否则当前p1结点指向当前p2结点;②接下来在比较p1结点的下一结点和p2结点或比较p2结点的下一结点和p1结点;③重复①②直到递归条件结束。 public ListNo...

2019-06-11 12:12:49 804

原创 29.链表中倒数第k个结点

题目:输入一个链表,输出该链表中倒数第k个结点解析:这里提供两种解法,还有一种用栈的解法解法1:①遍历一遍链表,获取链表的长度len;②用链表长度len减去k,此时变成输出顺数第len-k+1个节点了; public ListNode FindKthToTail1(ListNode head,int k) { if (head == null) return null; in...

2019-06-05 13:14:11 126

原创 28.反转链表

题目:输入一个链表,反转链表后,输出新链表的表头。解析:①定义一个当前指针head指向当前结点,一个前向指针pre指向前一结点;②初始的当前指针为头结点,前向指针为null,因为链表反转后头结点指向null;③遍历链表,将当前结点head指向前向结点pre,此时pre需要作为下一个节点的前向结点,因此赋为当前结点head。当前结点head移动到下个结点,重复上述操作,知道链表遍历完。pu...

2019-06-05 12:32:25 126

原创 27.两个链表的第一个公共结点

题目:输入两个链表,找出它们的第一个公共结点。解析:这题严谨的做法应该是先判断两个链表相交是否有环,下面两种做法是可以合并一起的,即有环选1,没换选2。1.有环的做法①定义一个快指针(一次移动一个结点)指向第一个链表和一个慢指针(一次移动两个结点)指向第二个链表,同时从链表头移动;②如果链表相交后结点成环,快慢指针一定会在环里相遇,记录此时相遇的结点;③定义另一指针指向其中一链表的头部,...

2019-06-03 12:43:42 169

原创 26.从尾到头打印链表

题目:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。解析:这个就利用Stack先进后出的思想来做。简单代码如下:public ArrayList<Integer> printListFromTailToHead(ListNode listNode){ ArrayList<Integer> arrayList = new ArrayList&l...

2019-05-31 13:00:08 108

原创 25.数组中第三大的数

题目:给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。示例 1:输入: [3, 2, 1]输出: 1解释: 第三大的数是 1.示例 2:输入: [1, 2]输出: 2解释: 第三大的数不存在, 所以返回最大的数 2 .示例 3:输入: [2, 2, 3, 1]输出: 1解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。存在两个值为2的...

2019-05-30 13:05:01 396

原创 24.数组中的K-diff数对

题目:给定一个整数数组和一个整数 k, 你需要在数组里找到不同的 k-diff 数对。这里将 k-diff 数对定义为一个整数对 (i, j), 其中 i 和 j 都是数组中的数字,且两数之差的绝对值是 k。输入: [3, 1, 4, 1, 5], k = 2输出: 2解释: 数组中有两个 2-diff 数对, (1, 3) 和 (3, 5)。尽管数组中有两个1,但我们只应返回不同的数对的...

2019-05-29 13:11:17 315

原创 23.合并两个有序数组

题目:给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = ...

2019-05-28 13:04:31 154

原创 22.旋转数组

题目:给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。例:输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4]解析:类似于字符串的左移算法①先将整个数组翻转过来;②翻转0-k-1的数组;③翻转k-array,length-1的数组; public void rotate(int[] nums, int k) {...

2019-05-28 12:45:20 139

原创 21.杨辉三角形

题目:给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。例:输入: 5输出:[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]①观察杨辉三角形的特点,发现其首位和末尾元素始终为1;②除了第一行,当前行数组元素=前一行每一个数组对应下标的元素+前一下标的元素;③根据这个特点写出程序即可。//当前行数组元素=前一行每一个数...

2019-05-27 12:56:08 205

原创 20.连续子序列和

题目:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。解析:(动规)以当前元素结束的最大连续和=max(前一元素结束的最大连续和+当前元素值,当前元素值)//dp[i]=max(dp[i-1]+nums...

2019-05-24 13:08:02 1803

原创 19.删除排序数组中的重复项

题目描述: 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。你不需要考虑数组中超出...

2019-05-23 12:46:27 105

原创 18.求1+2+3+...+n

题目:求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)解析:①1+2+3+…+n的算法中公式法包含乘除法,递归法中的递归结束语句包含if条件语句;②这里考虑能否替换if条件,递归结束语句为if (n==0) return n;③我们知道&&运算为短路操作符,当前面表达式...

2019-05-23 12:29:36 274

空空如也

空空如也

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

TA关注的人

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