<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[、思考致富的博客]]></title><description><![CDATA[一个菜菜菜菜鸟]]></description><link>https://blog.youkuaiyun.com/guanripeng</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; guanripeng]]></copyright><item><title><![CDATA[排序算法汇总---Java实现各个排序]]></title><link>https://blog.youkuaiyun.com/guanripeng/article/details/123213234</link><guid>https://blog.youkuaiyun.com/guanripeng/article/details/123213234</guid><author>guanripeng</author><pubDate>Tue, 01 Mar 2022 19:43:09 +0800</pubDate><description><![CDATA[排序算法汇总
下图来自菜鸟教程：


下面所有方法都有static关键字，因为测试的时候需要被main函数调用，故添加static。
若需要c++版本的算法实现，可参考下面博文连接
排序算法汇总—C++实现各个排序
1、冒泡排序
    // 冒泡排序
    static void bubble_sort(int[] arr) {
        for (int i = 0; i &lt; arr.length - 1; i++) { // n-1趟
            for (int j = 0]]></description><category></category></item><item><title><![CDATA[LeetCode13--罗马数字转整数]]></title><link>https://blog.youkuaiyun.com/guanripeng/article/details/120602263</link><guid>https://blog.youkuaiyun.com/guanripeng/article/details/120602263</guid><author>guanripeng</author><pubDate>Mon, 04 Oct 2021 11:34:19 +0800</pubDate><description><![CDATA[题目
罗马数字包含以下七种字符: I， V， X， L，C，D 和 M。
字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例如， 罗马数字 2 写做 II ，即为两个并列的 1。12 写做 XII ，即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。
]]></description><category></category></item><item><title><![CDATA[程序员代码面试指南---023自然数数组的排序]]></title><link>https://blog.youkuaiyun.com/guanripeng/article/details/109683640</link><guid>https://blog.youkuaiyun.com/guanripeng/article/details/109683640</guid><author>guanripeng</author><pubDate>Fri, 13 Nov 2020 22:26:06 +0800</pubDate><description><![CDATA[题目描述
给定一个长度为N的整形数组arr，其中有N个互不相等的自然数1-N。请实现arr的排序，但是不要把下标0∼N−1位置上的数通过直接赋值的方式替换成1∼N
[要求]
时间复杂度为O(n)，空间复杂度为O(1)
输入描述
第一行有一个整数N。表示数组长度
接下来一行有N个互不相等的自然数1-N。

输出描述
输出N个整数表示排序后的结果

示例
输入：
5
2 1 4 5 3
输出：
1 2 3 4 5 

解题思路
啊……这个题真的是……，直接在对应数组下标输入，然后输出就行，没什么技巧，可能这个是]]></description><category></category></item><item><title><![CDATA[程序员代码面试指南---039数组中未出现的最小正整数]]></title><link>https://blog.youkuaiyun.com/guanripeng/article/details/109586349</link><guid>https://blog.youkuaiyun.com/guanripeng/article/details/109586349</guid><author>guanripeng</author><pubDate>Mon, 09 Nov 2020 21:10:28 +0800</pubDate><description><![CDATA[题目描述
给定一个无序数组arr，找到数组中未出现的最小正整数
例如arr = [-1, 2, 3, 4]。返回1
arr = [1, 2, 3, 4]。返回5
[要求]
时间复杂度为O(n)，空间复杂度为O(1)
输入描述
第一行为一个整数N。表示数组长度。
接下来一行N个整数表示数组内的数

输出描述
输出一个整数表示答案

示例1
输入：
4
-1 2 3 4
输出：
1

示例2
输入：
4
1 2 3 4
输出：
5

解题思路
以下为左神书中的解题思路，截取下来参考


下面为看到一个博主写的解]]></description><category></category></item><item><title><![CDATA[程序员代码面试指南---049在链表中删除倒数第K个结点]]></title><link>https://blog.youkuaiyun.com/guanripeng/article/details/109564437</link><guid>https://blog.youkuaiyun.com/guanripeng/article/details/109564437</guid><author>guanripeng</author><pubDate>Sun, 08 Nov 2020 20:45:55 +0800</pubDate><description><![CDATA[题目描述
给出一个单链表，返回删除单链表的倒数第 K 个节点的链表。
输入描述
n 表示链表的长度。
val 表示链表中节点的值。

输出描述
在给定的函数内返回链表的头指针。

示例
输入：
5 4
1 2 3 4 5
输出：
1 3 4 5

解题思路
1、首先求出倒数第K个结点所在的位置
k = n - K
2、定义两个指针
一个pre指向当前结点的前一个结点
一个curr指向当前结点
3、使用for循环遍历
4、判断pre是否为空
为空，表示K比链表的长度还大 或者 当前链表为空 或者K等于当前链表]]></description><category></category></item><item><title><![CDATA[程序员代码面试指南---015生成窗口最大值数组]]></title><link>https://blog.youkuaiyun.com/guanripeng/article/details/109360594</link><guid>https://blog.youkuaiyun.com/guanripeng/article/details/109360594</guid><author>guanripeng</author><pubDate>Thu, 29 Oct 2020 15:15:24 +0800</pubDate><description><![CDATA[题目描述
有一个整型数组arr和一个大小为w的窗口从数组的最左边滑到最右边，窗口每次向右边滑一个位置，求每一种窗口状态下的最大值。（如果数组长度为n，窗口大小为w，则一共产生n-w+1个窗口的最大值）
输入描述
第一行输入n和w，分别代表数组长度和窗口大小
第二行输入n个整数表示数组中的各个元素

输出描述
输出一个长度为n-w+1的数组res，res[i]表示每一种窗口状态下的最大值

示例
输入：
8 3
4 3 5 4 3 3 6 7
输出：
5 5 5 4 6 7
说明：
例如，数组为[4，3，5，]]></description><category></category></item><item><title><![CDATA[程序员代码面试指南---013用一个栈实现另一个栈]]></title><link>https://blog.youkuaiyun.com/guanripeng/article/details/109314064</link><guid>https://blog.youkuaiyun.com/guanripeng/article/details/109314064</guid><author>guanripeng</author><pubDate>Tue, 27 Oct 2020 16:45:35 +0800</pubDate><description><![CDATA[题目描述
一个栈中元素的类型为整型，现在想将该栈从顶到底按从大到小的顺序排序，只许申请一个栈。除此之外，可以申请新的变量，但不能申请额外的数据结构。如何完成排序？
输入描述
第一行输入一个N，表示栈中元素的个数
第二行输入N个整数表示栈顶到栈底的各个元素

输出描述
输出一行表示排序后的栈中栈顶到栈底的各个元素。

示例
输入：
5
5 8 4 3 6
输出：
8 6 5 4 3

解题思路
使用一个栈来实现对另一个栈的排序。
遍历原始的栈，将栈中的元素依次弹出，然后压入辅助栈中，
每次判断：如果辅助栈中的]]></description><category></category></item><item><title><![CDATA[程序员代码面试指南---012换钱的最少货币数]]></title><link>https://blog.youkuaiyun.com/guanripeng/article/details/109297851</link><guid>https://blog.youkuaiyun.com/guanripeng/article/details/109297851</guid><author>guanripeng</author><pubDate>Mon, 26 Oct 2020 20:32:51 +0800</pubDate><description><![CDATA[题目描述
给定数组arr，arr中所有的值都为正整数且不重复。每个值代表一种面值的货币，每种面值的货币可以使用任意张，再给定一个aim，代表要找的钱数，求组成aim的最少货币数。
输入描述
输入包括两行，第一行两个整数n（0&lt;=n&lt;=1000）代表数组长度和aim（0&lt;=aim&lt;=5000），第二行n个不重复的正整数，代表ARR(1&lt;=ARRi&lt;=10^9)。

输出描述
输出一个整数，表示组成aim的最小货币数，无解时输出-1.

示例1
输入：
3 20
5 2 3
]]></description><category></category></item><item><title><![CDATA[程序员代码面试指南---011未排序数组中累加和为给定值的最长子数组系列问题补2]]></title><link>https://blog.youkuaiyun.com/guanripeng/article/details/109262619</link><guid>https://blog.youkuaiyun.com/guanripeng/article/details/109262619</guid><author>guanripeng</author><pubDate>Sat, 24 Oct 2020 17:20:54 +0800</pubDate><description><![CDATA[题目描述
给定一个无序数组arr，其中元素只能是1或0。求arr所有的子数组中0和1个数相等的最长子数组的长度
[要求]
时间复杂度为O(n)，空间复杂度为O(n)
输入描述
第一行一个整数N，表示数组长度
接下来一行有N个数表示数组中的数

输出描述
输出一个整数表示答案

示例
输入：
5
1 0 1 0 1
输出：
4

解题思路
将输入数组中值为0的元素改为-1，然后求累加和k=0的最长子数组的长度。
下面的解题思路可参考 程序员代码面试指南—009未排序数组中累加和为给定值的最长子数组长度。其中有]]></description><category></category></item><item><title><![CDATA[程序员代码面试指南---010未排序数组中累加和为给定值的最长子数组系列问题补1]]></title><link>https://blog.youkuaiyun.com/guanripeng/article/details/109262293</link><guid>https://blog.youkuaiyun.com/guanripeng/article/details/109262293</guid><author>guanripeng</author><pubDate>Sat, 24 Oct 2020 17:02:59 +0800</pubDate><description><![CDATA[题目描述
给定一个无序数组arr，其中元素可正、可负、可0。求arr所有子数组中正数与负数个数相等的最长子数组的长度。
[要求]
时间复杂度为O(n)，空间复杂度为O(n)。
输入描述
第一行一个整数N，表示数组长度
接下来一行有N个数表示数组中的数

输出描述
输出一个整数表示答案

示例
输入：
5
1 -2 1 1 1
输出：
2

解题思路
将输入数组中的正数变为1，负数变为-1,0不变。
然后求累加和为0的最长子数组。
之后的具体解法可以看 程序员代码面试指南—009未排序数组中累加和为给定值的最]]></description><category></category></item><item><title><![CDATA[程序员代码面试指南---009未排序数组中累加和为给定值的最长子数组长度]]></title><link>https://blog.youkuaiyun.com/guanripeng/article/details/109250334</link><guid>https://blog.youkuaiyun.com/guanripeng/article/details/109250334</guid><author>guanripeng</author><pubDate>Fri, 23 Oct 2020 22:00:35 +0800</pubDate><description><![CDATA[题目描述
给定一个无序数组arr, 其中元素可正、可负、可0。给定一个整数k，求arr所有子数组中累加和为k的最长子数组长度。
输入描述
第一行两个整数N, k。N表示数组长度，k的定义已在题目描述中给出
第二行N个整数表示数组内的数

输出描述

输出一个整数表示答案

示例
输入：
5 0
1 -2 1 1 1
输出：
3

解题思路
实现代码
/*
 * @Description: 	未排序数组中累加和为给定值的最长子数组长度
 * @Author: 
 * @Date: 2020-10-23 19:]]></description><category></category></item><item><title><![CDATA[程序员代码面试指南---008未排序正数数组中累加和为给定值的最长子数组的长度]]></title><link>https://blog.youkuaiyun.com/guanripeng/article/details/109225797</link><guid>https://blog.youkuaiyun.com/guanripeng/article/details/109225797</guid><author>guanripeng</author><pubDate>Thu, 22 Oct 2020 17:03:49 +0800</pubDate><description><![CDATA[题目描述
给定一个数组arr，该数组无序，但每个值均为正数，再给定一个正数k。求arr的所有子数组中所有元素相加和为k的最长子数组的长度
例如，arr = [1, 2, 1, 1, 1], k = 3
累加和为3的最长子数组为[1, 1, 1]，所以结果返回3
[要求]
时间复杂度为O(n)，空间复杂度为O(1)
输入描述
第一行两个整数N, k。N表示数组长度，k的定义已在题目描述中给出
第二行N个整数表示数组内的数

输出描述
输出一个整数表示答案


示例
输入：
5 3
1 2 1 1 1
输出：
]]></description><category></category></item><item><title><![CDATA[程序员代码面试指南---007用递归函数和栈逆序一个栈]]></title><link>https://blog.youkuaiyun.com/guanripeng/article/details/109194632</link><guid>https://blog.youkuaiyun.com/guanripeng/article/details/109194632</guid><author>guanripeng</author><pubDate>Wed, 21 Oct 2020 09:43:12 +0800</pubDate><description><![CDATA[题目描述
一个栈依次压入1,2,3,4,5，那么从栈顶到栈底分别为5,4,3,2,1。将这个栈转置后，从栈顶到栈底为1,2,3,4,5，也就是实现栈中元素的逆序，但是只能用递归函数来实现，不能用其他数据结构。
输入描述
输入数据第一行一个整数N为栈中元素的个数。

接下来一行N个整数Xi表示从栈顶依次到栈底的每个元素。

输出描述
输出一行表示栈中元素逆序后的每个元素

示例
输入：
5
1 2 3 4 5
输出：
5 4 3 2 1

解题思路
一开始想到自己模拟一个栈的实现，然后发现他的输入是栈的逆序，]]></description><category></category></item><item><title><![CDATA[程序员代码面试指南---006由两个栈组成的队列]]></title><link>https://blog.youkuaiyun.com/guanripeng/article/details/109187029</link><guid>https://blog.youkuaiyun.com/guanripeng/article/details/109187029</guid><author>guanripeng</author><pubDate>Tue, 20 Oct 2020 19:13:44 +0800</pubDate><description><![CDATA[题目描述
用两个栈实现队列，支持队列的基本操作。
输入描述
第一行输入一个整数N，表示对队列进行的操作总数。

下面N行每行输入一个字符串S，表示操作的种类。

如果S为"add"，则后面还有一个整数X表示向队列尾部加入整数X。

如果S为"poll"，则表示弹出队列头部操作。

如果S为"peek"，则表示询问当前队列中头部元素是多少。

输出描述
对于每一个为"peek"的操作，输出一行表示当前队列中头部元素是多少。

示例
输入：
6
add 1
add 2
add 3
peek
poll
peek
]]></description><category></category></item><item><title><![CDATA[程序员代码面试指南---005设计getMin功能的栈]]></title><link>https://blog.youkuaiyun.com/guanripeng/article/details/109164909</link><guid>https://blog.youkuaiyun.com/guanripeng/article/details/109164909</guid><author>guanripeng</author><pubDate>Mon, 19 Oct 2020 17:29:14 +0800</pubDate><description><![CDATA[题目描述
实现一个特殊功能的栈，在实现栈的基本功能的基础上，再实现返回栈中最小元素的操作。
输入描述
第一行输入一个整数N，表示对栈进行的操作总数。

下面N行每行输入一个字符串S，表示操作的种类。

如果S为"push"，则后面还有一个整数X表示向栈里压入整数X。

如果S为"pop"，则表示弹出栈顶操作。

如果S为"getMin"，则表示询问当前栈中的最小元素是多少。

输出描述
对于每个getMin操作，输出一行表示当前栈中的最小元素是多少。

示例
输入：
6
push 3
push 2
push]]></description><category></category></item><item><title><![CDATA[程序员代码面试指南---004不重复打印排序数组中相加和为给定值的所有三元组]]></title><link>https://blog.youkuaiyun.com/guanripeng/article/details/109149392</link><guid>https://blog.youkuaiyun.com/guanripeng/article/details/109149392</guid><author>guanripeng</author><pubDate>Sun, 18 Oct 2020 20:26:11 +0800</pubDate><description><![CDATA[题目描述
给定排序数组arr和整数k，不重复打印arr中所有相加和为k的严格升序的三元组
例如, arr = [-8, -4, -3, 0, 1, 2, 4, 5, 8, 9], k = 10，打印结果为：
-4 5 9
-3 4 9
-3 5 8
 0 1 9
 0 2 8
 1 4 5

[要求]
时间复杂度为O(n^2)，空间复杂度为O(1)。
输入描述
第一行有两个整数n, k
接下来一行有n个整数表示数组内的元素

输出描述
输出若干行，每行三个整数表示答案
按三元组从小到大的顺序输出(三元组大小]]></description><category></category></item><item><title><![CDATA[程序员代码面试指南---003不重复打印排序数组中相加和为给定值的所有二元组]]></title><link>https://blog.youkuaiyun.com/guanripeng/article/details/109124211</link><guid>https://blog.youkuaiyun.com/guanripeng/article/details/109124211</guid><author>guanripeng</author><pubDate>Fri, 16 Oct 2020 20:36:09 +0800</pubDate><description><![CDATA[题目描述
给定排序数组arr和整数k，不重复打印arr中所有相加和为k的不降序二元组
例如, arr = [-8, -4, -3, 0, 1, 2, 4, 5, 8, 9], k = 10，打印结果为：
1, 9
2, 8
[要求]
时间复杂度为O(n)，空间复杂度为O(1)
输入描述
第一行有两个整数n, k
接下来一行有n个整数表示数组内的元素

输出描述
输出若干行，每行两个整数表示答案
按二元组从小到大的顺序输出(二元组大小比较方式为每个依次比较二元组内每个数)

示例1
输入：
10 10
-8 ]]></description><category></category></item><item><title><![CDATA[程序员代码面试指南---001在行列都排好序的矩阵中找指定的数]]></title><link>https://blog.youkuaiyun.com/guanripeng/article/details/109123180</link><guid>https://blog.youkuaiyun.com/guanripeng/article/details/109123180</guid><author>guanripeng</author><pubDate>Fri, 16 Oct 2020 19:34:57 +0800</pubDate><description><![CDATA[题目描述
给定一个N×M的整形矩阵matrix和一个整数K, matrix的每一行和每一列都是排好序的。
实现一个函数，判断K是否在matrix中
[要求]
时间复杂度为O(N+M)，额外空间复杂度为O(1)。
输入描述
第一行有三个整数N, M, K
接下来N行，每行M个整数为输入的矩阵

输出描述
若K存在于矩阵中输出"Yes"，否则输出"No"

示例1
输入：
2 4 5
1 2 3 4
2 4 5 6
输出：
Yes

示例2
输入：
2 4 233
1 2 3 4
2 4 5 6
输出：
No
]]></description><category></category></item><item><title><![CDATA[程序员代码面试指南---002最长的可整合子数组的长度]]></title><link>https://blog.youkuaiyun.com/guanripeng/article/details/109105284</link><guid>https://blog.youkuaiyun.com/guanripeng/article/details/109105284</guid><author>guanripeng</author><pubDate>Thu, 15 Oct 2020 21:00:11 +0800</pubDate><description><![CDATA[题目描述
先给出可整合数组的定义：如果一个数组在排序之后，每相邻两个数的差的绝对值都为1，或者该数组长度为1，则该数组为可整合数组。例如，[5, 3, 4, 6, 2]排序后为[2, 3, 4, 5, 6]，符合每相邻两个数差的绝对值都为1，所以这个数组为可整合数组。
给定一个数组arr, 请返回其中最大可整合子数组的长度。例如，[5, 5, 3, 2, 6, 4, 3]的最大可整合子数组为[5, 3, 2, 6, 4]，所以请返回5。
[要求]
时间复杂度为O(n^2)O(n2)，空间复杂度为O(n)
输]]></description><category></category></item><item><title><![CDATA[Matlab练习---利用曲线对象绘制五环图案]]></title><link>https://blog.youkuaiyun.com/guanripeng/article/details/108170094</link><guid>https://blog.youkuaiyun.com/guanripeng/article/details/108170094</guid><author>guanripeng</author><pubDate>Sat, 22 Aug 2020 16:16:30 +0800</pubDate><description><![CDATA[利用曲线对象绘制五环图案
先看结果截图：

下面为实现的脚本文件c.m
t = -0.1:0.1:2*pi;  % 为了实现闭环操作，故需要从-0.1开始
x = cos(t);
y = sin(t);
line(x,y,'Color','b')
line(x+1.2,y-1,'Color','y')
line(x+2.4,y,'Color','k')
line(x+3.6,y-1,'Color','g')
line(x+4.8,y,'Color','r')
ha = gca;  % 返回当前axes 对象]]></description><category></category></item></channel></rss>