- 博客(32)
- 收藏
- 关注
转载 利用AOP加注解将代码解耦
转载自利用AOP加注解为代理模式优雅解耦 ,原文解释更为详细。 解耦是指一定程度的解决非必要性的耦合。 高耦合一般是指程序和程序之间存在着强依赖联系,导致一方的变化会时刻影响另外一方。 应用到程序编码里面耦合可以从系统、业务、模块、代码等多个不同的维度来看待程序的耦合性,而这里我们主要解决的是代码层面的耦合。 高耦合的代码通常会带来几个问题:可读性差、复用性差、可维护性差、易变更性差 我们通过一段代码来分别了解这些问题。 业务场景:通过用户ID查询用户信息 @Resource private UserInf
2021-05-18 20:41:22
718
原创 栈的压入、弹出序列(java)
(本文参考栈的压入、弹出序列,原文解释更为详细) 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 输入:[1,2,3,4,5],[4,3,5,1,2] 输出:false 解题思路: 根据入栈顺序,遍历这个数组,使其依次入栈,但每个元素入栈前,先判
2021-04-29 17:07:42
406
原创 链表中倒数第k个结点(java)
题目描述 输入一个链表,输出该链表中倒数第k个结点。 如果该链表长度小于k,请返回空。 输入:{1,2,3,4,5},1 输出:{5}
2021-04-29 11:09:01
360
转载 调整数组顺序使奇数位于偶数前面(java)
本文转载于调整数组顺序使奇数位于偶数前面 ,原文解释更为详细。 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 输入:[1,2,3,4] 输出:[1,3,2,4] 输入:[2,4,6,5,7] 输出:[5,7,2,4,6] 在并不要求奇数和奇数,偶数和偶数之间相对位置不变,可以利用两个指针left和right,分别指向数组头和数组尾,从前遍历整个数组,是奇数就保存在array[
2021-04-28 22:43:20
777
原创 数值的整数次方(java)
题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 保证base和exponent不同时为0。不得使用库函数,同时不需要考虑大数问题,也不用考虑小数点后面0的位数。 输入:2.00000,3 输出:8.00000 输入:2.10000,3 输出:9.26100 输入:2.00000,-2 输出:0.25000 ...
2021-04-28 21:50:55
507
转载 springboot中get post put delete 请求
本文转载于springboot中get post put delete 请求 ,原文更为详细 组合注解(RequestMapping的变形) @GetMapping = @RequestMapping(method = RequestMethod.GET) @PostMapping = @RequestMapping(method = RequestMethod.POST) @PutMapping = @RequestMapping(method = RequestMethod.PUT) @DeleteM
2021-04-28 16:23:37
493
原创 二进制中1的个数(java)
题目描述 输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。 输入:10 输出:2 解法1:异或 N与(N取反+1),即N&(~N+1),可以提取出int整型数中最右边的1。先找到最右侧1的位置,再与该数异或,则消掉了右侧第一个1,不断循环,知道没有1。 举例: 整型数n的二进制011011010000,n&(~n+1)后的到000000010000,n在和这个数异或(相同得0相异为1),这时与0异或的位置都不变,异或后的数消掉了原数的最后一个1。 public clas
2021-04-22 22:21:33
397
转载 矩形覆盖(java)
题目描述 我们可以用2×1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2×1的小矩形无重叠地覆盖一个2×n的大矩形,总共有多少种方法? 比如n=3时,2*3的矩形块有3种覆盖方法: 输入:4 输出:5 (此题原帖解释得更为详细:原帖地址) 解题思路: 要覆盖2×n的大矩形,有两种选择:竖着放或者横着放。 1、当竖着放的时候,如下图所示,即先覆盖2×1的矩形,再覆盖2×(n-1)的矩形。放的方法数1×f(n-1) 2、当横着放的时候,如下图所示,当2×1的小矩形横放在左上角的时候,左下角必须横放一个
2021-04-22 21:41:03
262
原创 跳台阶(java)
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 这道题在【剑指offer-简单】 JZ9、变态跳台阶(java)中已经做过,详情见链接JZ9、变态跳台阶。此处直接贴java代码。 public class Solution { //类似于斐波拉契数列 //最后一次跳跃可以跳1阶,也可以跳2阶。 // 跳1阶,前面n-1阶的跳法dp(n-1)数就是这种情况总的跳法; // 跳2阶,前面n-2阶的跳法dp
2021-04-22 21:01:41
327
原创 重建二叉树(java)
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 输入:[1,2,3,4,5,6,7],[3,2,4,1,6,5,7] 输出:{1,2,5,3,4,6,7} 1 / \ 2 5 / \ / \ 3 4 6 7 前置知识:如果右重复数字,则前序
2021-04-22 16:57:00
449
转载 二维数组中的查找(java)
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 [ [1,2,8,9], [2,4,9,12], [4,7,10,13], [6,8,11,15] ] 给定 target = 7,返回 true。 给定 target = 3,返回 false。 输入:7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]] 输出:
2021-04-22 15:30:49
455
原创 二叉搜索树的第k小的结点(java)
题目描述 给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点。 输入: {5,3,7,2,4,6,8},3 输出: {4} 解法1: (先说通用方法:这种求第k小的元素用大根堆,同理第k大的元素用小根堆) 利用大根堆(最大的元素在堆顶),遍历每个节点,每次都将元素加入大根堆,当堆中元素的个数大于K个时,就弹出堆顶元素 既让堆中最多保留K个元素,那么遍历结束后,堆中就剩K个元素,则堆顶就是我们要找的第K大元素。 /* public class TreeNode { int val = 0;
2021-04-22 00:04:44
537
转载 构建乘积数组(java)
题目描述 给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];) 对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。 输入:[1,2,3,4,5] 输出:[120,60,40,30,24] 思路: 我们可以拆分成两部分计算:
2021-04-21 22:00:44
223
转载 数组中重复的数字(java)
题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任一一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1 输入: [2,3,1,0,2,5,3] 输出: 2或3 解法1: 长度为n的数组中所有数字都在0到n-1范围内,数组元素大小有较为明确的范围,可以使用计数数组,统计每个元素出现的次数。 1、所有数字都在0~n-1之间
2021-04-21 21:12:26
579
原创 不用加减乘除做加法(java)
题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 输入: 1,2 输出: 3 注意: a,b均可能是负数或0 结果不会一32位整数 补充: “&”按位与:0011 & 0101 = 0001 (两个都是1结果才是1) ; “|”按位或:0011 | 0101= 0111 (有一个是1结果就是1) ; “^”按位异或:0011 ^ 0101= 0110 (相同为0,相异为1) ; “~”按位取反: ~0011 = 1100; “<<
2021-04-21 16:23:38
167
转载 平衡二叉树(java)
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树 平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 输入: {1,2,3,4,5,6,7} 输出: true 1 / \ 2 3 / \ / \ 4 5 6 7 思路: 先序遍历每一个节点(根->
2021-04-21 14:39:17
137
转载 二叉树的深度(java)
题目描述 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 输入: {1,2,3,4,5,#,6,#,#,7} 返回值: 4 1 / \ 2 3 / \ \ 4 5 6 / 7 思路: 二叉树的深度就是根节点的左子树与右子树中深度较大者+1,之所以+1,是因为加上父节点自身。 既 res = Math.max(maxDept
2021-04-21 14:19:27
132
原创 第一个只出现一次的字符位置(java)
题目描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置,如果没有则返回-1(需要区分大小写)。(从0开始计数) 输入: “google” 输出: 4 解法1: 直接遍历一遍字符串,用Map保存这个字符出现了多少次,再次遍历字符串,找到第一个只出现一次的字符即可。 import java.util.HashMap; import java.util.Map; public class Solution { public int
2021-04-21 13:29:37
650
转载 连续子数组的最大和(java)
题目描述 输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n)。
2021-04-21 10:46:18
2545
原创 数组中出现次数超过一半的数字(java)
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 输入: [1,2,3,2,2,2,5,4,2] 输出: 2 解法1: 使用map<array[i],count>统计数组中每个元素出现的次数,次数超过数组长度的一半,返回array[i] import java.util.Arrays; import java.util.Has
2021-04-20 22:40:17
385
原创 二叉树的镜像(java)
题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 比如: 源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5 输入: {8,6,10,5,7,9,11} 输出: {8,10,6,11,9,7,5} 思路: 先序(根->左->右)遍历这棵树访问的每个节点,若当前节点有孩子,就交换两个孩子节点。 在这里插入代码片 ...
2021-04-20 21:24:15
107
原创 合并两个排序的链表(java)
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 输入: {1,3,5},{2,4,6} 输出: {1,2,3,4,5,6} 思路: 归并排序,两个有序子序列,归并为一个有序子序列。 两个子序列各自取出一个元素比较,小的加入新的链中。 /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = v
2021-04-20 20:56:44
231
原创 变态跳台阶(java)
题目描述(跳台阶)JumpFloorI 只青蛙一次可以跳 上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有 多少种跳法(先后次序不同算不同的结果) 递归: 斐波拉契数列的应用,n是台阶数,n=0输出1,n=1输出1,n=2输出1,n=3输出2…(0 <= n <= 100,这里台阶数是0时,也输出1) 青蛙跳到终点的最后一次跳跃有两种情况: 1、最后再跳1个台阶刚好到达终点 2、最后再跳2个台阶刚好到达终点 总的跳法:第一种情况的跳法+第二种情况的跳法 最后跳1个台阶,JumpFlo
2021-04-20 17:08:01
210
原创 旋转数组的最小数字(java)
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 输入:[3,4,5,1,2] 输出:1 举例: 元素组:[1,2,3,4,5] (从小到大已经有序) 某个旋转数组:[3,4,5,1,2] (两个有序子序列,且前一个子序列最小值3也必然大于或等于后一个子序列最大值) 解法1: 旋转数组(n>=2)中必然是两个递增的有序子序列 遍历数组,当后一个元素小
2021-04-20 15:20:01
263
原创 用两个栈实现队列(java)
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 对于栈: 入栈顺序1,2,3,4 出战顺序4,3,2,1 对于队列 入队顺序1,2,3,4 出队顺序1,2,3,4 satck1入栈依次保存入队的数据,stack1依次弹出数据并入栈到statck2中,此时statck2出栈顺序与入队顺序相同。 import java.util.Stack; public class Solution { Stack<Integer> stack1 = n
2021-04-20 11:31:18
114
原创 斐波那契数列(java)
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。 n≤39 递归写法 public static int Fibonacci(int n) { if (n == 0 || n == 1) { return n; } return Fibonacci(n - 1) + Fibonacci(n - 2); } 非递归写法 //考虑到第 i 项只与第 i-1
2021-04-20 10:42:00
135
原创 【数据结构与算法】04(java)堆、堆排序、比较器
比较器 1)比较器的实质就是重载比较运算符 2)比较器可以很好的应用在特殊标准的排序上 3)比较器可以很好的应用在根据特殊标准排序的结构上 4)写代码变得异常容易,还用于范型编程 堆结构 1)堆结构就是用数组实现的完全二叉树结构 2)完全二叉树中如果每棵子树的最大值都在顶部就是大根堆 3)完全二叉树中如果每棵子树的最小值都在顶部就是小根堆 4)堆结构的heaplnsert与heapify操作 5)堆结构的增大和减少 6)优先级队列结构,就是堆结构. i(i下标从0开始,根节点)的左孩子在数组中2i+1位置上
2021-04-18 23:06:51
179
1
原创 【数据结构与算法】02排序(java)快排、计数、基数、桶
6、快速排序 O(nlog2n)、不稳定 原理:比轴小的放左边,比轴大的放轴右边 实现:从数组左右两边开始遍历,左边遇到比轴大的,右边遇到比轴小的,交换直接交换两个元素的位置。 package com.algorithm; public class QuickSort { public static void main(String[] args) { int[] a = {7, 3, 2, 8, 1, 9, 5, 4, 6}; sort(a, 0, a.lengt
2021-04-13 00:21:29
127
原创 【数据结构与算法】01排序(java)选择、冒泡、插入、希尔、归并
重点记住平均时间复杂度、稳定性。 重点记住插入排序、堆排序、归并排序、快速排序。 1、选择排序 O(n2)、不稳定 public static void sort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { int minPos = i; //每次查找i之后的数组中,最小的值 for (int j = i + 1; j < arr.leng.
2021-04-10 23:53:45
120
原创 机器学习入门 笔记(二) 机器学习基础概念
第二章 机器学习基础概念1、机器的数据2、机器学习的主要任务3、监督学习和非监督学习4、批量、在线学习、参数、非参数学习5、哲学思考6、环境的搭建 1、机器的数据 2、机器学习的主要任务 3、监督学习和非监督学习 4、批量、在线学习、参数、非参数学习 5、哲学思考 6、环境的搭建 ...
2019-09-11 22:42:47
334
原创 机器学习入门 笔记(一) 机器学习准备
第一章 机器学习简介1、什么是机器学习?新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 1、什么是机器学习? ...
2019-09-11 21:05:17
464
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人