<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_43284433的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_43284433</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_43284433]]></copyright><item><title><![CDATA[利用AOP加注解将代码解耦]]></title><link>https://blog.youkuaiyun.com/qq_43284433/article/details/116996044</link><guid>https://blog.youkuaiyun.com/qq_43284433/article/details/116996044</guid><author>qq_43284433</author><pubDate>Tue, 18 May 2021 20:41:22 +0800</pubDate><description><![CDATA[转载自利用AOP加注解为代理模式优雅解耦 ，原文解释更为详细。
解耦是指一定程度的解决非必要性的耦合。
高耦合一般是指程序和程序之间存在着强依赖联系，导致一方的变化会时刻影响另外一方。
应用到程序编码里面耦合可以从系统、业务、模块、代码等多个不同的维度来看待程序的耦合性，而这里我们主要解决的是代码层面的耦合。
高耦合的代码通常会带来几个问题：可读性差、复用性差、可维护性差、易变更性差
我们通过一段代码来分别了解这些问题。
业务场景：通过用户ID查询用户信息
@Resource
private UserInf]]></description><category></category></item><item><title><![CDATA[栈的压入、弹出序列（java）]]></title><link>https://blog.youkuaiyun.com/qq_43284433/article/details/116271463</link><guid>https://blog.youkuaiyun.com/qq_43284433/article/details/116271463</guid><author>qq_43284433</author><pubDate>Thu, 29 Apr 2021 17:07:42 +0800</pubDate><description><![CDATA[（本文参考栈的压入、弹出序列，原文解释更为详细）
题目描述
输入两个整数序列，第一个序列表示栈的压入顺序，请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列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
解题思路：
根据入栈顺序，遍历这个数组，使其依次入栈，但每个元素入栈前，先判]]></description><category></category></item><item><title><![CDATA[链表中倒数第k个结点（java）]]></title><link>https://blog.youkuaiyun.com/qq_43284433/article/details/116245541</link><guid>https://blog.youkuaiyun.com/qq_43284433/article/details/116245541</guid><author>qq_43284433</author><pubDate>Thu, 29 Apr 2021 11:09:01 +0800</pubDate><description><![CDATA[题目描述
输入一个链表，输出该链表中倒数第k个结点。
如果该链表长度小于k，请返回空。
输入：{1,2,3,4,5},1
输出：{5}

]]></description><category></category></item><item><title><![CDATA[调整数组顺序使奇数位于偶数前面（java）]]></title><link>https://blog.youkuaiyun.com/qq_43284433/article/details/116244403</link><guid>https://blog.youkuaiyun.com/qq_43284433/article/details/116244403</guid><author>qq_43284433</author><pubDate>Wed, 28 Apr 2021 22:43:20 +0800</pubDate><description><![CDATA[本文转载于调整数组顺序使奇数位于偶数前面 ，原文解释更为详细。
题目描述
输入一个整数数组，实现一个函数来调整该数组中数字的顺序，使得所有的奇数位于数组的前半部分，所有的偶数位于数组的后半部分，并保证奇数和奇数，偶数和偶数之间的相对位置不变。
输入：[1,2,3,4]
输出：[1,3,2,4]
输入：[2,4,6,5,7]
输出：[5,7,2,4,6]
在并不要求奇数和奇数，偶数和偶数之间相对位置不变，可以利用两个指针left和right，分别指向数组头和数组尾，从前遍历整个数组，是奇数就保存在array[]]></description><category></category></item><item><title><![CDATA[数值的整数次方（java）]]></title><link>https://blog.youkuaiyun.com/qq_43284433/article/details/116057049</link><guid>https://blog.youkuaiyun.com/qq_43284433/article/details/116057049</guid><author>qq_43284433</author><pubDate>Wed, 28 Apr 2021 21:50:55 +0800</pubDate><description><![CDATA[题目描述
给定一个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

...]]></description><category></category></item><item><title><![CDATA[springboot中get post put delete 请求]]></title><link>https://blog.youkuaiyun.com/qq_43284433/article/details/116234971</link><guid>https://blog.youkuaiyun.com/qq_43284433/article/details/116234971</guid><author>qq_43284433</author><pubDate>Wed, 28 Apr 2021 16:23:37 +0800</pubDate><description><![CDATA[本文转载于springboot中get post put delete 请求 ，原文更为详细
组合注解(RequestMapping的变形)

@GetMapping = @RequestMapping(method = RequestMethod.GET)
@PostMapping = @RequestMapping(method = RequestMethod.POST)
@PutMapping = @RequestMapping(method = RequestMethod.PUT)
@DeleteM]]></description><category></category></item><item><title><![CDATA[二进制中1的个数（java）]]></title><link>https://blog.youkuaiyun.com/qq_43284433/article/details/116033665</link><guid>https://blog.youkuaiyun.com/qq_43284433/article/details/116033665</guid><author>qq_43284433</author><pubDate>Thu, 22 Apr 2021 22:21:33 +0800</pubDate><description><![CDATA[题目描述
输入一个整数，输出该数32位二进制表示中1的个数。其中负数用补码表示。
输入：10
输出：2
解法1：异或
N与（N取反+1），即N&amp;（~N+1），可以提取出int整型数中最右边的1。先找到最右侧1的位置，再与该数异或，则消掉了右侧第一个1，不断循环，知道没有1。
举例：
整型数n的二进制011011010000，n&amp;（~n+1）后的到000000010000，n在和这个数异或(相同得0相异为1），这时与0异或的位置都不变，异或后的数消掉了原数的最后一个1。
public clas]]></description><category></category></item><item><title><![CDATA[矩形覆盖（java）]]></title><link>https://blog.youkuaiyun.com/qq_43284433/article/details/116032277</link><guid>https://blog.youkuaiyun.com/qq_43284433/article/details/116032277</guid><author>qq_43284433</author><pubDate>Thu, 22 Apr 2021 21:41:03 +0800</pubDate><description><![CDATA[题目描述
我们可以用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的小矩形横放在左上角的时候，左下角必须横放一个]]></description><category></category></item><item><title><![CDATA[跳台阶（java）]]></title><link>https://blog.youkuaiyun.com/qq_43284433/article/details/116021429</link><guid>https://blog.youkuaiyun.com/qq_43284433/article/details/116021429</guid><author>qq_43284433</author><pubDate>Thu, 22 Apr 2021 21:01:41 +0800</pubDate><description><![CDATA[题目描述
一只青蛙一次可以跳上1级台阶，也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法（先后次序不同算不同的结果）。
这道题在【剑指offer-简单】 JZ9、变态跳台阶(java)中已经做过，详情见链接JZ9、变态跳台阶。此处直接贴java代码。
public class Solution {
	//类似于斐波拉契数列
    //最后一次跳跃可以跳1阶，也可以跳2阶。
    // 跳1阶，前面n-1阶的跳法dp(n-1)数就是这种情况总的跳法；
    // 跳2阶，前面n-2阶的跳法dp]]></description><category></category></item><item><title><![CDATA[重建二叉树（java）]]></title><link>https://blog.youkuaiyun.com/qq_43284433/article/details/116016735</link><guid>https://blog.youkuaiyun.com/qq_43284433/article/details/116016735</guid><author>qq_43284433</author><pubDate>Thu, 22 Apr 2021 16:57:00 +0800</pubDate><description><![CDATA[题目描述
输入某二叉树的前序遍历和中序遍历的结果，请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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

前置知识：如果右重复数字，则前序]]></description><category></category></item><item><title><![CDATA[二维数组中的查找（java）]]></title><link>https://blog.youkuaiyun.com/qq_43284433/article/details/116014589</link><guid>https://blog.youkuaiyun.com/qq_43284433/article/details/116014589</guid><author>qq_43284433</author><pubDate>Thu, 22 Apr 2021 15:30:49 +0800</pubDate><description><![CDATA[题目描述
在一个二维数组中（每个一维数组的长度相同），每一行都按照从左到右递增的顺序排序，每一列都按照从上到下递增的顺序排序。请完成一个函数，输入这样的一个二维数组和一个整数，判断数组中是否含有该整数。
[
[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]]
输出：]]></description><category></category></item><item><title><![CDATA[二叉搜索树的第k小的结点（java）]]></title><link>https://blog.youkuaiyun.com/qq_43284433/article/details/115982339</link><guid>https://blog.youkuaiyun.com/qq_43284433/article/details/115982339</guid><author>qq_43284433</author><pubDate>Thu, 22 Apr 2021 00:04:44 +0800</pubDate><description><![CDATA[题目描述
给定一棵二叉搜索树，请找出其中的第k小的TreeNode结点。
输入：
{5,3,7,2,4,6,8},3
输出：
{4}
解法1：
(先说通用方法：这种求第k小的元素用大根堆，同理第k大的元素用小根堆）
利用大根堆（最大的元素在堆顶），遍历每个节点，每次都将元素加入大根堆，当堆中元素的个数大于K个时，就弹出堆顶元素
既让堆中最多保留K个元素，那么遍历结束后，堆中就剩K个元素，则堆顶就是我们要找的第K大元素。
/*
public class TreeNode {
    int val = 0;
]]></description><category></category></item><item><title><![CDATA[构建乘积数组（java）]]></title><link>https://blog.youkuaiyun.com/qq_43284433/article/details/115979458</link><guid>https://blog.youkuaiyun.com/qq_43284433/article/details/115979458</guid><author>qq_43284433</author><pubDate>Wed, 21 Apr 2021 22:00:44 +0800</pubDate><description><![CDATA[题目描述
给定一个数组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]
思路：
我们可以拆分成两部分计算：
]]></description><category></category></item><item><title><![CDATA[数组中重复的数字（java）]]></title><link>https://blog.youkuaiyun.com/qq_43284433/article/details/115962003</link><guid>https://blog.youkuaiyun.com/qq_43284433/article/details/115962003</guid><author>qq_43284433</author><pubDate>Wed, 21 Apr 2021 21:12:26 +0800</pubDate><description><![CDATA[题目描述
在一个长度为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之间]]></description><category></category></item><item><title><![CDATA[不用加减乘除做加法（java）]]></title><link>https://blog.youkuaiyun.com/qq_43284433/article/details/115954214</link><guid>https://blog.youkuaiyun.com/qq_43284433/article/details/115954214</guid><author>qq_43284433</author><pubDate>Wed, 21 Apr 2021 16:23:38 +0800</pubDate><description><![CDATA[题目描述
写一个函数，求两个整数之和，要求在函数体内不得使用+、-、*、/四则运算符号。
输入：
1,2
输出：
3
注意：

a，b均可能是负数或0
结果不会一32位整数

补充：
“&amp;”按位与：0011 &amp; 0101 = 0001 (两个都是1结果才是1) ;
“|”按位或：0011 | 0101= 0111    (有一个是1结果就是1) ;
“^”按位异或：0011 ^ 0101= 0110 (相同为0，相异为1) ;
“~”按位取反: ~0011 = 1100;
“&lt;&lt;]]></description><category></category></item><item><title><![CDATA[平衡二叉树（java）]]></title><link>https://blog.youkuaiyun.com/qq_43284433/article/details/115951987</link><guid>https://blog.youkuaiyun.com/qq_43284433/article/details/115951987</guid><author>qq_43284433</author><pubDate>Wed, 21 Apr 2021 14:39:17 +0800</pubDate><description><![CDATA[题目描述
输入一棵二叉树，判断该二叉树是否是平衡二叉树。
在这里，我们只需要考虑其平衡性，不需要考虑其是不是排序二叉树
平衡二叉树（Balanced Binary Tree），具有以下性质：它是一棵空树或它的左右两个子树的高度差的绝对值不超过1，并且左右两个子树都是一棵平衡二叉树。
输入：
{1,2,3,4,5,6,7}
输出：
true
        1
       / \
     2     3
    / \   /  \
   4   5  6   7

思路：
先序遍历每一个节点（根-&gt]]></description><category></category></item><item><title><![CDATA[二叉树的深度（java）]]></title><link>https://blog.youkuaiyun.com/qq_43284433/article/details/115949122</link><guid>https://blog.youkuaiyun.com/qq_43284433/article/details/115949122</guid><author>qq_43284433</author><pubDate>Wed, 21 Apr 2021 14:19:27 +0800</pubDate><description><![CDATA[题目描述
输入一棵二叉树，求该树的深度。从根结点到叶结点依次经过的结点（含根、叶结点）形成树的一条路径，最长路径的长度为树的深度。
输入：
{1,2,3,4,5,#,6,#,#,7}
返回值：
4
        1
       / \
      2    3
     / \    \
    4   5     6
       / 
      7

思路：
二叉树的深度就是根节点的左子树与右子树中深度较大者+1，之所以+1，是因为加上父节点自身。
既 res = Math.max(maxDept]]></description><category></category></item><item><title><![CDATA[第一个只出现一次的字符位置（java）]]></title><link>https://blog.youkuaiyun.com/qq_43284433/article/details/115939232</link><guid>https://blog.youkuaiyun.com/qq_43284433/article/details/115939232</guid><author>qq_43284433</author><pubDate>Wed, 21 Apr 2021 13:29:37 +0800</pubDate><description><![CDATA[题目描述
在一个字符串(0&lt;=字符串长度&lt;=10000，全部由字母组成)中找到第一个只出现一次的字符，并返回它的位置，如果没有则返回-1（需要区分大小写）。（从0开始计数）
输入：
“google”
输出：
4
解法1：
直接遍历一遍字符串，用Map保存这个字符出现了多少次，再次遍历字符串，找到第一个只出现一次的字符即可。
import java.util.HashMap;
import java.util.Map;
public class Solution {
    public int ]]></description><category></category></item><item><title><![CDATA[连续子数组的最大和（java）]]></title><link>https://blog.youkuaiyun.com/qq_43284433/article/details/115921372</link><guid>https://blog.youkuaiyun.com/qq_43284433/article/details/115921372</guid><author>qq_43284433</author><pubDate>Wed, 21 Apr 2021 10:46:18 +0800</pubDate><description><![CDATA[题目描述
输入一个整型数组，数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n)。

]]></description><category></category></item><item><title><![CDATA[数组中出现次数超过一半的数字（java）]]></title><link>https://blog.youkuaiyun.com/qq_43284433/article/details/115919708</link><guid>https://blog.youkuaiyun.com/qq_43284433/article/details/115919708</guid><author>qq_43284433</author><pubDate>Tue, 20 Apr 2021 22:40:17 +0800</pubDate><description><![CDATA[题目描述
数组中有一个数字出现的次数超过数组长度的一半，请找出这个数字。例如输入一个长度为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&lt;array[i]，count&gt;统计数组中每个元素出现的次数，次数超过数组长度的一半，返回array[i]
import java.util.Arrays;
import java.util.Has]]></description><category></category></item></channel></rss>