![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法学习类
马背男孩
刻意练习 重复学习
展开
-
Java实现快速排序
快速排序核心步骤 寻找首元素(一般用首元素)的插入位置,根据首元素的插入位置将原数组分为左右两个子数组,分组的原则是左边的元素都比首元素小,右边的元素都比首元素大,在寻找插入点位置的过程中左右调换数组元素值 注意递归的终止条件和寻找插入点位置的while循环终止条件 Java 代码实现 package com.study; import java.util.Arrays; import ja...原创 2019-05-19 16:18:31 · 151 阅读 · 0 评论 -
Java实现归并排序
归并算法的思想 先将数组递归分组,然后合并结果,换成伪码可表示为 MergeSort(origin) = MergeSort(MergeSort(left), MergeSort(right)) 链表的归并排序代码结构更加贴合上述伪码 Java 数组归并算法实现 package com.study; import java.util.Arrays; public class MergeSor...原创 2019-05-19 16:27:32 · 115 阅读 · 0 评论 -
动态规划-求最大连续子序列累加和
经典动态规划问题 定义dp[i]的意义:表示以i为下标结束的最大连续累加和 定义dp方程:dp[n] = max(dp[n-1] + a[i], a[i]); 最大连续累加和就在dp[n]中取得 res = max(dp[n],res); Java 代码实现 package com.study.dynamic; import java.util.Objects; /** * * 给定一...原创 2019-05-19 17:04:36 · 1026 阅读 · 0 评论 -
动态规划-求最大连续子序列乘积
经典动态规划问题 定义dp[i]的意义:表示以i为下标结束的最大连续乘积值 定义dp方程:dp[n] = max(dp[n-1] * a[i], a[i]); 最大连续乘积值就在dp[n]中取得 res = max(dp[n],res); Java 代码实现 package com.study.dynamic; import java.util.Objects; /** * * 给定一...原创 2019-05-19 17:09:04 · 1216 阅读 · 0 评论 -
动态规划-求最小的零钱兑换个数
经典动态规划问题 定义dp[i]的意义:表示兑换n元需要的最小硬币个数 定义dp方程:dp[n] = min(dp[n-coin[0]]+1,dp[n-coin[1]]+1,…,dp[n-coin[coin.length-1]]+1); dp[n]即为所求 注意点:dp[0] = 0 : 组成0元所需的最小硬币数为0;dp[i] = -1 : 没有硬币能组合成i元 Java代码实现 packa...原创 2019-05-26 16:05:24 · 719 阅读 · 0 评论