From 0de0504b9dcbd9ef61ad1c1f09a68ef1afe9dfa4 Mon Sep 17 00:00:00 2001 From: ranwenjie Date: Tue, 30 Nov 2021 23:50:23 +0800 Subject: [PATCH] add quicksort --- 6 Sort/README.md | 38 +++++++++++++++++++++++++++++++ 8 Algorithms Analysis/动态规划.md | 33 ++++++++++++++++++++++++--- 2 files changed, 68 insertions(+), 3 deletions(-) diff --git a/6 Sort/README.md b/6 Sort/README.md index 8878542..1ad64c2 100644 --- a/6 Sort/README.md +++ b/6 Sort/README.md @@ -143,6 +143,44 @@ void quicksort(int *a, int left, int right){ ``` +```Java +// pivot 选择 尾部节点, 代码写起来更加简单; 移动元素更方便 +static int partition(int[] nums, int left, int right){ + + int pivot = nums[right];//选尾部节点作为 pivot + int end = right; + + right--; + while (left < right) { + + if (nums[left] <= pivot) { + left ++ ; + continue; + } + + //元素比 pivot 大,右边窗口变小 + //swap left & right + swap(nums, left, right); + right--; + + } + + // 跟 pivot 元素置换 + int i = 0; + if (nums[left] <= pivot) { + //swap left+1 & pivot + i = left +1; + } else {//swap left & pivot + i = left ; + } + + swap(nums, i, end); + + return i; + } +``` + + ![](./qsort.gif) diff --git a/8 Algorithms Analysis/动态规划.md b/8 Algorithms Analysis/动态规划.md index a034b8b..66d3522 100644 --- a/8 Algorithms Analysis/动态规划.md +++ b/8 Algorithms Analysis/动态规划.md @@ -97,6 +97,7 @@ for 状态1 in 状态1的所有取值: ## 凑零钱问题 凑零钱问题[视频解读参考这里](https://www.ixigua.com/6881883015832666635?wid_try=1) +[实现代码这里](https://github.com/nonstriater/deep-in-java/tree/master/src/main/java/com/nonstriater/deepinjava/algo/list) 如果使用贪心策略,并不能得到最优解。 @@ -104,11 +105,12 @@ for 状态1 in 状态1的所有取值: ```Java //递归解法,处理重叠子问题, 使用 dp[amount+1] 备忘录 - int coinChange2(int[] coins, int amount) { + int coinChange2(int[] coins, int amount) { int[] dp = new int[amount + 1]; // 数组大小为 amount + 1,初始值也为 amount + 1 - // 为啥 dp 数组初始化为 amount + 1 呢,因为凑成 amount 金额的硬币数最多只可能等于 amount(全用 1 元面值的硬币),所以初始化为 amount + 1 就相当于初始化为正无穷 + // 为啥 dp 数组初始化为 amount + 1 呢? + // 因为凑成 amount 金额的硬币数最多只可能等于 amount(全用 1 元面值的硬币),所以初始化为 amount + 1 就相当于初始化为正无穷 Arrays.fill(dp, amount + 1); // base case @@ -125,11 +127,36 @@ for 状态1 in 状态1的所有取值: } } return (dp[amount] == amount + 1) ? -1 : dp[amount]; - } + } ``` +## 股票问题 + + +``` +``` + + +## 接雨水问题 + +num[i]表示柱子高度,计算下雨之后最多能接多少雨水 + + +``` +``` + + + + + + + + + + +