From 270757a277ffd0c58c0a09805e694f7dfe6858ff Mon Sep 17 00:00:00 2001 From: Jerry-306 <82520819+Jerry-306@users.noreply.github.com> Date: Thu, 23 Sep 2021 08:54:00 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=9B=B4=E6=96=B0=200053=20=E6=9C=80?= =?UTF-8?q?=E5=A4=A7=E5=AD=90=E5=BA=8F=E5=92=8C=20JavaScript=20=E8=A7=A3?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 既然已经知道dp数组长度,初始化时就应该创建一个固定长度的数组,而不是直接用 [nums[0]] 代替,这样会影响性能 --- problems/0053.最大子序和(动态规划).md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/problems/0053.最大子序和(动态规划).md b/problems/0053.最大子序和(动态规划).md index 1efd7e12..4c2a2944 100644 --- a/problems/0053.最大子序和(动态规划).md +++ b/problems/0053.最大子序和(动态规划).md @@ -173,7 +173,8 @@ JavaScript: ```javascript const maxSubArray = nums => { // 数组长度,dp初始化 - const [len, dp] = [nums.length, [nums[0]]]; + const len = nums.length; + let dp = new Array(len).fill(0); // 最大值初始化为dp[0] let max = dp[0]; for (let i = 1; i < len; i++) { From 3d61b13f9d7b0178aa66f4e352a27dc0ea51c61a Mon Sep 17 00:00:00 2001 From: baici1 <249337001@qq.com> Date: Thu, 23 Sep 2021 14:56:20 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0406.=20=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E8=BA=AB=E9=AB=98=E9=87=8D=E5=BB=BA=E9=98=9F=E5=88=97=20go?= =?UTF-8?q?=E7=89=88=E6=9C=AC=20=E9=93=BE=E8=A1=A8=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0406.根据身高重建队列.md | 33 ++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/problems/0406.根据身高重建队列.md b/problems/0406.根据身高重建队列.md index bd27b1b2..3c6ee63c 100644 --- a/problems/0406.根据身高重建队列.md +++ b/problems/0406.根据身高重建队列.md @@ -222,7 +222,7 @@ class Solution: ``` Go: -```golang +```go func reconstructQueue(people [][]int) [][]int { //先将身高从大到小排序,确定最大个子的相对位置 sort.Slice(people,func(i,j int)bool{ @@ -241,7 +241,38 @@ func reconstructQueue(people [][]int) [][]int { return result } ``` +```go +//链表法 +func reconstructQueue(people [][]int) [][]int { + sort.Slice(people,func (i,j int) bool { + if people[i][0]==people[j][0]{ + return people[i][1]people[j][0] + }) + l:=list.New()//创建链表 + for i:=0;i Date: Thu, 23 Sep 2021 10:43:51 +0100 Subject: [PATCH 3/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=200090.=E5=AD=90?= =?UTF-8?q?=E9=9B=86II.md=20C=E8=AF=AD=E8=A8=80=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0090.子集II.md | 68 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/problems/0090.子集II.md b/problems/0090.子集II.md index 6dc631de..ff5eb14d 100644 --- a/problems/0090.子集II.md +++ b/problems/0090.子集II.md @@ -279,6 +279,74 @@ var subsetsWithDup = function(nums) { ``` +C: +```c +int* path; +int pathTop; +int** ans; +int ansTop; +//负责存放二维数组中每个数组的长度 +int* lengths; +//快排cmp函数 +int cmp(const void* a, const void* b) { + return *((int*)a) - *((int*)b); +} + +//复制函数,将当前path中的元素复制到ans中。同时记录path长度 +void copy() { + int* tempPath = (int*)malloc(sizeof(int) * pathTop); + int i; + for(i = 0; i < pathTop; i++) { + tempPath[i] = path[i]; + } + ans = (int**)realloc(ans, sizeof(int*) * (ansTop + 1)); + lengths[ansTop] = pathTop; + ans[ansTop++] = tempPath; +} + +void backTracking(int* nums, int numsSize, int startIndex, int* used) { + //首先将当前path复制 + copy(); + //若startIndex大于数组最后一位元素的位置,返回 + if(startIndex >= numsSize) + return ; + + int i; + for(i = startIndex; i < numsSize; i++) { + //对同一树层使用过的元素进行跳过 + if(i > 0 && nums[i] == nums[i-1] && used[i-1] == false) + continue; + path[pathTop++] = nums[i]; + used[i] = true; + backTracking(nums, numsSize, i + 1, used); + used[i] = false; + pathTop--; + } +} + +int** subsetsWithDup(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){ + //声明辅助变量 + path = (int*)malloc(sizeof(int) * numsSize); + ans = (int**)malloc(0); + lengths = (int*)malloc(sizeof(int) * 1500); + int* used = (int*)malloc(sizeof(int) * numsSize); + pathTop = ansTop = 0; + + //排序后查重才能生效 + qsort(nums, numsSize, sizeof(int), cmp); + backTracking(nums, numsSize, 0, used); + + //设置一维数组和二维数组的返回大小 + *returnSize = ansTop; + *returnColumnSizes = (int*)malloc(sizeof(int) * ansTop); + int i; + for(i = 0; i < ansTop; i++) { + (*returnColumnSizes)[i] = lengths[i]; + } + return ans; +} +``` + -----------------------