From b8a294b4fc7f563f81958f24a6b26d0da751f20b Mon Sep 17 00:00:00 2001 From: Lovice Date: Mon, 10 Feb 2020 09:26:11 +0800 Subject: [PATCH 0001/1268] pull request test --- Week_00/G20200343030491/LeetCode_283_491.py | 30 +++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Week_00/G20200343030491/LeetCode_283_491.py diff --git a/Week_00/G20200343030491/LeetCode_283_491.py b/Week_00/G20200343030491/LeetCode_283_491.py new file mode 100644 index 00000000..6584a7e6 --- /dev/null +++ b/Week_00/G20200343030491/LeetCode_283_491.py @@ -0,0 +1,30 @@ +def move_zero_index(nums): + j = 0 + for i in range(len(nums)): + if nums[i] != 0 : + nums[j] = nums[i] + if j != i: + nums[0] + j += 1 + + return nums + + +def move_zero_swap(nums): + j = 0 + for i in range(len(nums)): + if nums[i] != 0: + nums[j], nums[i] = nums[i], nums[j] + j += 1 + + return nums + +def move_zero(nums): + j = 0 + for i in range(len(nums)): + if nums[i] != 0: + nums[j] = nums[i] + j += 1 + nums[j:] = [0]*(len(nums)-j) + + return nums \ No newline at end of file From 4ca7effc09a946db017c7ecf47651c4112c9c302 Mon Sep 17 00:00:00 2001 From: pangshusong Date: Mon, 10 Feb 2020 11:49:38 +0800 Subject: [PATCH 0002/1268] [373] week 00 - summary of study --- Week_00/G20200343030373/NOTE.md | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/Week_00/G20200343030373/NOTE.md b/Week_00/G20200343030373/NOTE.md index 50de3041..acafd8a9 100644 --- a/Week_00/G20200343030373/NOTE.md +++ b/Week_00/G20200343030373/NOTE.md @@ -1 +1,30 @@ -学习笔记 \ No newline at end of file +# 极客大学 算法训练营 第六期 +- `打点`#活动#开始 +- 讲师 + - 覃超 +- 第六期 + - 2.10 - 4.12 + - [课程安排](https://shimo.im/docs/K9pv9HdcJ6KkRDQh/read) +- 任务与作业 + - 每周日00:00-23:59 +- 每周作业 + - 至少2道代码作业提交 + - 一篇学习总结 + - code review 并点评至少5位代码作业或总结 +- [GitHub仓库](https://github.com/algorithm006-class01/algorithm006-class01) + - ReadMe + - Fork, Clone + - PullRequest, e.g. 373-Week 02 + - 作业,e.g. /Week_01/G20200343030373/LeetCode_2_373/LeetCode_2_373_test.go + - 总结,Issues, e.g. 【373-week 03】二叉树的更多理解 +- 毕业 + - 60分(日常作业,期中考试,期末考试) + - 毕业总结 + - 视频观看超80% +- 优秀学员 + - 90分 + - 20分钟以上分享 +- 优秀小组 +- 助教 + - 吴铮 + - 金泽 \ No newline at end of file From cfb83b108003151e8fbb2140d8ecc329c30b7c37 Mon Sep 17 00:00:00 2001 From: Lovice Date: Mon, 10 Feb 2020 12:24:02 +0800 Subject: [PATCH 0003/1268] fix typo --- Week_00/G20200343030491/LeetCode_283_491.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Week_00/G20200343030491/LeetCode_283_491.py b/Week_00/G20200343030491/LeetCode_283_491.py index 6584a7e6..90bba491 100644 --- a/Week_00/G20200343030491/LeetCode_283_491.py +++ b/Week_00/G20200343030491/LeetCode_283_491.py @@ -4,7 +4,7 @@ def move_zero_index(nums): if nums[i] != 0 : nums[j] = nums[i] if j != i: - nums[0] + nums[i] = 0 j += 1 return nums From 85e12735e6dd7b6b72fc3b7737807fb2de71095d Mon Sep 17 00:00:00 2001 From: xuzhougeng Date: Mon, 10 Feb 2020 14:20:09 +0800 Subject: [PATCH 0004/1268] Create LeetCode_26_33.c --- Week_01/G20200343030533/LeetCode_26_33.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Week_01/G20200343030533/LeetCode_26_33.c diff --git a/Week_01/G20200343030533/LeetCode_26_33.c b/Week_01/G20200343030533/LeetCode_26_33.c new file mode 100644 index 00000000..8006e4b5 --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_26_33.c @@ -0,0 +1,20 @@ +/* + * 解题思路,双指针法 + * 慢指针记录不重复元素的位置。 快指针遍历数组,同时和慢指针比较。如果两者不相同,就将该元素赋值到慢指针的下一个元素。 +*/ + +int removeDuplicates(int* nums, int numsSize){ + if (numsSize == 0 ) return 0; + int i = 0; + int j = 0; + for ( int i = 0; i < numsSize ; i++){ + if (nums[i] != nums[j]){ + j++; + nums[j] = nums[i]; + } + } + j++; + return j; + +} + From f9cd0912ecb925f21d7d0d2b1b1a9c2ab922a654 Mon Sep 17 00:00:00 2001 From: xuzhougeng Date: Mon, 10 Feb 2020 14:23:00 +0800 Subject: [PATCH 0005/1268] Create LeetCode_26_33.java --- Week_01/G20200343030533/LeetCode_26_33.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Week_01/G20200343030533/LeetCode_26_33.java diff --git a/Week_01/G20200343030533/LeetCode_26_33.java b/Week_01/G20200343030533/LeetCode_26_33.java new file mode 100644 index 00000000..61dc18a5 --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_26_33.java @@ -0,0 +1,15 @@ +//思路同C,只不过用java写 +class Solution { + public int removeDuplicates(int[] nums) { + int j = 0; + for (int i = 0; i < nums.length; i++){ + if (nums[i] != nums[j]){ + j++; + nums[j] = nums[i]; + } + } + j++; + return j; + + } +} From 4ab3bb12373a690576f667307e41c6a160e226e5 Mon Sep 17 00:00:00 2001 From: xuzhougeng Date: Mon, 10 Feb 2020 14:26:32 +0800 Subject: [PATCH 0006/1268] Create LeetCode_26_33.py --- Week_01/G20200343030533/LeetCode_26_33.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Week_01/G20200343030533/LeetCode_26_33.py diff --git a/Week_01/G20200343030533/LeetCode_26_33.py b/Week_01/G20200343030533/LeetCode_26_33.py new file mode 100644 index 00000000..c22a7cfb --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_26_33.py @@ -0,0 +1,20 @@ +""" +思路同C,只不过用Python写 +""" +class Solution(object): + def removeDuplicates(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + if len(nums) == 0: + return 0 + slow = 0 + fast = 0 + while fast < len(nums) : + if nums[slow] != nums[fast]: + slow += 1 + nums[slow] = nums[fast] + fast += 1 + slow += 1 + return slow From 3e23dc50d2f47ed6a44027be1bc612d802b9fd02 Mon Sep 17 00:00:00 2001 From: xuzhougeng Date: Mon, 10 Feb 2020 14:27:04 +0800 Subject: [PATCH 0007/1268] Create LeetCode_26_33.cpp --- Week_01/G20200343030533/LeetCode_26_33.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Week_01/G20200343030533/LeetCode_26_33.cpp diff --git a/Week_01/G20200343030533/LeetCode_26_33.cpp b/Week_01/G20200343030533/LeetCode_26_33.cpp new file mode 100644 index 00000000..0691d7f5 --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_26_33.cpp @@ -0,0 +1,18 @@ +//思路同C, 用C++写一遍 +class Solution { +public: + int removeDuplicates(vector& nums) { + if (nums.size() == 0 ) return 0; + + int fast = 0, slow = 0; + for (; fast < nums.size(); fast++){ + if ( nums[fast] != nums[slow]){ + slow++; + nums[slow] = nums[fast]; + } + } + slow++; + return slow; + + } +}; From 7dd22e33c49059eee86f14bf4ed81b798c8fd090 Mon Sep 17 00:00:00 2001 From: xuzhougeng Date: Mon, 10 Feb 2020 14:33:05 +0800 Subject: [PATCH 0008/1268] Create LeetCode_1_33.c --- Week_01/G20200343030533/LeetCode_1_33.c | 51 +++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Week_01/G20200343030533/LeetCode_1_33.c diff --git a/Week_01/G20200343030533/LeetCode_1_33.c b/Week_01/G20200343030533/LeetCode_1_33.c new file mode 100644 index 00000000..9deba1c0 --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_1_33.c @@ -0,0 +1,51 @@ +/** + * Note: The returned array must be malloced, assume caller calls free(). + */ +/** + * Note: The returned array must be malloced, assume caller calls free(). + */ + +struct hashtable { + int key; /* key */ + int value; + UT_hash_handle hh; /* makes this structure hashable */ +}; + +void add(struct hashtable **table, int num, int idx) { + //申请一个结构存放数据 + struct hashtable *s; + s = malloc(sizeof(struct hashtable)); + s->key = num; + s->value = idx; + HASH_ADD_INT((*table), key, s ); /* id: name of key field */ +} + + +//一遍哈希法 +// 从头往后遍历,检查target - nums[i] 是否在hash表中 +// 如果不在, 以值为key,下标为value进行存放 +int* twoSum(int* nums, int numsSize, int target, int* returnSize){ + + struct hashtable *table = NULL; //新建哈希表 + struct hashtable *tmp; //用于存放找到中间结果 + *returnSize = 2; + int *res = (int*)malloc(sizeof(int) * *returnSize); + + int remain; + for(int i = 0; i < numsSize; i++){ + remain = target - nums[i]; //剩余值 + // 在表table中查找remin, 如果有结果,返回tmp + HASH_FIND_INT(table, &remain, tmp); + if ( tmp == NULL ){ + add(&table, nums[i], i); + } else { + res[1] = i; + res[0] = tmp->value; + break; + } + + } + + return res; + +} From 4834b2f0871f229437a032d38a9881501e25c081 Mon Sep 17 00:00:00 2001 From: xuzhougeng Date: Mon, 10 Feb 2020 14:38:58 +0800 Subject: [PATCH 0009/1268] Create LeetCode_1_33.py --- Week_01/G20200343030533/LeetCode_1_33.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Week_01/G20200343030533/LeetCode_1_33.py diff --git a/Week_01/G20200343030533/LeetCode_1_33.py b/Week_01/G20200343030533/LeetCode_1_33.py new file mode 100644 index 00000000..47976f51 --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_1_33.py @@ -0,0 +1,16 @@ +""" +Python果然简洁了很多,自带字典就是好 +""" +class Solution(object): + def twoSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + d = dict(); + for idx, val in enumerate(nums): + if (target - val ) in d: + return [idx, d[target - val]] + else: + d[ val ] = idx; From 26934079e3214ac60db8e44441ec2e686a454c6b Mon Sep 17 00:00:00 2001 From: xuzhougeng Date: Mon, 10 Feb 2020 14:43:16 +0800 Subject: [PATCH 0010/1268] Create LeetCode_1_33.java --- Week_01/G20200343030533/LeetCode_1_33.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Week_01/G20200343030533/LeetCode_1_33.java diff --git a/Week_01/G20200343030533/LeetCode_1_33.java b/Week_01/G20200343030533/LeetCode_1_33.java new file mode 100644 index 00000000..ffbff75b --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_1_33.java @@ -0,0 +1,19 @@ +//照搬官方的解释,主要是在学习Java的map的使用 +class Solution { + public int[] twoSum(int[] nums, int target) { + // Map构建方法为Map<键类型, 值类型> 变量名 = new HashMap<>(); + Map map = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + int complement = target - nums[i]; + //查询操作, .containsKey + if (map.containsKey(complement)) { + //取值操作.get + return new int[] { map.get(complement), i }; + } + //插入操作 .put(key, value) + map.put(nums[i], i); + } + // 丢错报错throw + throw new IllegalArgumentException("No two sum solution"); + } +} From 69632048b418b9faf0d39ee0f00b2f9854cbda40 Mon Sep 17 00:00:00 2001 From: xuzhougeng Date: Mon, 10 Feb 2020 14:46:56 +0800 Subject: [PATCH 0011/1268] Create LeetCode_283_33.java --- Week_01/G20200343030533/LeetCode_283_33.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Week_01/G20200343030533/LeetCode_283_33.java diff --git a/Week_01/G20200343030533/LeetCode_283_33.java b/Week_01/G20200343030533/LeetCode_283_33.java new file mode 100644 index 00000000..a02fdbfc --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_283_33.java @@ -0,0 +1,15 @@ +class Solution { + public void moveZeroes(int[] nums) { + int j = 0; + for (int i = 0; i < nums.length; i++){ + if (nums[i] != 0){ + nums[j] = nums[i]; + if (i != j){ + nums[i] = 0; + } + j++; + } + } + + } +} From b9c738f758b06212ba6b2a5c0cab400899fbb92f Mon Sep 17 00:00:00 2001 From: xuzhougeng Date: Mon, 10 Feb 2020 14:50:15 +0800 Subject: [PATCH 0012/1268] Create LeetCode_283_33.c --- Week_01/G20200343030533/LeetCode_283_33.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Week_01/G20200343030533/LeetCode_283_33.c diff --git a/Week_01/G20200343030533/LeetCode_283_33.c b/Week_01/G20200343030533/LeetCode_283_33.c new file mode 100644 index 00000000..930a5940 --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_283_33.c @@ -0,0 +1,13 @@ +void moveZeroes(int* nums, int numsSize){ + if (numsSize == 0 ) return; + int i, j = 0; + for ( i = 0 ; i < numsSize; i++){ + if (nums[i] != 0){ + if (i != j){ + nums[j] = nums[i]; + nums[i] = 0; + } + j++; + } + } +} From 411677d383e91000a7a6cba0951b574cac8ee212 Mon Sep 17 00:00:00 2001 From: xuzhougeng Date: Mon, 10 Feb 2020 14:52:01 +0800 Subject: [PATCH 0013/1268] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E7=89=88=E7=9A=846?= =?UTF-8?q?6=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030533/LeetCode_66_33.c | 34 ++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Week_01/G20200343030533/LeetCode_66_33.c diff --git a/Week_01/G20200343030533/LeetCode_66_33.c b/Week_01/G20200343030533/LeetCode_66_33.c new file mode 100644 index 00000000..535a6f25 --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_66_33.c @@ -0,0 +1,34 @@ +/** + * Note: The returned array must be malloced, assume caller calls free(). + */ +int* plusOne(int* digits, int digitsSize, int* returnSize){ + + // 如果末尾小于9 + if (digits[digitsSize - 1] < 9){ + *returnSize = digitsSize; + digits[digitsSize-1]+=1; + return digits; + } + //否则要从后往前计算 + //进位 + int carry = 1; + for ( int i = digitsSize - 1; i >= 0; i--){ + if (carry){ + digits[i] += 1; + carry = 0; + } + if ( digits[i] > 9){ + digits[i] = digits[i] -10; + carry = 1; + } + } + if ( carry == 0) { + *returnSize =digitsSize; + return digits; + } + *returnSize = digitsSize + 1; + int *res = (int*)malloc( sizeof(int) * *returnSize); + res[0] = 1; + memcpy(res+1, digits, sizeof(int) * digitsSize); + return res; +} From d4d7c719a77346dc656a5ad48156260a528052b6 Mon Sep 17 00:00:00 2001 From: xuzhougeng Date: Mon, 10 Feb 2020 15:24:36 +0800 Subject: [PATCH 0014/1268] =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030533/LeetCode_66_33.c | 31 ++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/Week_01/G20200343030533/LeetCode_66_33.c b/Week_01/G20200343030533/LeetCode_66_33.c index 535a6f25..5a5b4642 100644 --- a/Week_01/G20200343030533/LeetCode_66_33.c +++ b/Week_01/G20200343030533/LeetCode_66_33.c @@ -1,6 +1,9 @@ /** * Note: The returned array must be malloced, assume caller calls free(). */ + +//第一次写的代码 + int* plusOne(int* digits, int digitsSize, int* returnSize){ // 如果末尾小于9 @@ -32,3 +35,31 @@ int* plusOne(int* digits, int digitsSize, int* returnSize){ memcpy(res+1, digits, sizeof(int) * digitsSize); return res; } + +//第二次写的代码 +int* plusOne(int* digits, int digitsSize, int* returnSize){ + + if ( digitsSize == 0) return ; + + // 从后往前 + // 先算最后一位 + int sum = digits[digitsSize - 1] + 1; + digits[digitsSize-1] = sum % 10; + int carry = sum / 10; + for ( int i = digitsSize - 2; i >= 0; i--){ + sum = digits[i] + carry; + digits[i] = sum % 10; + carry = sum / 10; + } + if (carry > 0 ){ + int *res = (int *)malloc(sizeof(int) * (digitsSize+1)); + res[0] = carry; + memcpy(res+1, digits, sizeof(int) * digitsSize); + *returnSize =( digitsSize + 1); + return res; + + } + *returnSize = digitsSize ; + return digits; + +} From ae6d920dfc9e3203a3ab6f98fdd9031aff350f08 Mon Sep 17 00:00:00 2001 From: xuzhougeng Date: Mon, 10 Feb 2020 16:00:23 +0800 Subject: [PATCH 0015/1268] =?UTF-8?q?=E7=AC=AC=E4=B8=89=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030533/LeetCode_66_33.c | 94 ++++++++++++++++-------- 1 file changed, 64 insertions(+), 30 deletions(-) diff --git a/Week_01/G20200343030533/LeetCode_66_33.c b/Week_01/G20200343030533/LeetCode_66_33.c index 5a5b4642..4930bbb1 100644 --- a/Week_01/G20200343030533/LeetCode_66_33.c +++ b/Week_01/G20200343030533/LeetCode_66_33.c @@ -1,41 +1,40 @@ -/** - * Note: The returned array must be malloced, assume caller calls free(). - */ - -//第一次写的代码 +// 第三次 +// 在第二次的代码上进行优化,中间只要不进位,就可以退出 int* plusOne(int* digits, int digitsSize, int* returnSize){ - // 如果末尾小于9 - if (digits[digitsSize - 1] < 9){ - *returnSize = digitsSize; - digits[digitsSize-1]+=1; - return digits; - } - //否则要从后往前计算 - //进位 - int carry = 1; - for ( int i = digitsSize - 1; i >= 0; i--){ - if (carry){ - digits[i] += 1; - carry = 0; - } - if ( digits[i] > 9){ - digits[i] = digits[i] -10; - carry = 1; + if ( digitsSize == 0) return ; + + // 从后往前 + // 先算最后一位 + int sum = digits[digitsSize - 1] + 1; + digits[digitsSize-1] = sum % 10; + int carry = sum / 10; + for ( int i = digitsSize - 2; i >= 0; i--){ + sum = digits[i] + carry; + digits[i] = sum % 10; + carry = sum / 10; + if ( carry == 0 ) { + *returnSize = digitsSize ; + return digits; } } - if ( carry == 0) { - *returnSize =digitsSize; - return digits; + + if (carry != 0 ){ + int *res = (int *)malloc(sizeof(int) * (digitsSize+1)); + res[0] = carry; + memcpy(res+1, digits, sizeof(int) * digitsSize); + *returnSize =( digitsSize + 1); + return res; } - *returnSize = digitsSize + 1; - int *res = (int*)malloc( sizeof(int) * *returnSize); - res[0] = 1; - memcpy(res+1, digits, sizeof(int) * digitsSize); - return res; + *returnSize = digitsSize; + return digits ; + + } + + //第二次写的代码 int* plusOne(int* digits, int digitsSize, int* returnSize){ @@ -59,7 +58,42 @@ int* plusOne(int* digits, int digitsSize, int* returnSize){ return res; } + *returnSize = digitsSize ; return digits; } + +//第一次写的代码 + +int* plusOne(int* digits, int digitsSize, int* returnSize){ + + // 如果末尾小于9 + if (digits[digitsSize - 1] < 9){ + *returnSize = digitsSize; + digits[digitsSize-1]+=1; + return digits; + } + //否则要从后往前计算 + //进位 + int carry = 1; + for ( int i = digitsSize - 1; i >= 0; i--){ + if (carry){ + digits[i] += 1; + carry = 0; + } + if ( digits[i] > 9){ + digits[i] = digits[i] -10; + carry = 1; + } + } + if ( carry == 0) { + *returnSize =digitsSize; + return digits; + } + *returnSize = digitsSize + 1; + int *res = (int*)malloc( sizeof(int) * *returnSize); + res[0] = 1; + memcpy(res+1, digits, sizeof(int) * digitsSize); + return res; +} From 6e34ad670e2b89539bb75faff382b2283d0895a0 Mon Sep 17 00:00:00 2001 From: xuzhougeng Date: Mon, 10 Feb 2020 16:11:11 +0800 Subject: [PATCH 0016/1268] =?UTF-8?q?=E7=AC=AC=E5=9B=9B=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030533/LeetCode_66_33.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/Week_01/G20200343030533/LeetCode_66_33.c b/Week_01/G20200343030533/LeetCode_66_33.c index 4930bbb1..4417199d 100644 --- a/Week_01/G20200343030533/LeetCode_66_33.c +++ b/Week_01/G20200343030533/LeetCode_66_33.c @@ -1,3 +1,26 @@ +// 第四次 +// 想清楚了逻辑,简化了代码 +int* plusOne(int* digits, int digitsSize, int* returnSize){ + + if (digitsSize == 0) return ; + + for ( int i = digitsSize - 1; i >= 0; i-- ){ + digits[i]++; + digits[i] = digits[i] % 10; + if (digits[i] != 0 ) { + *returnSize = digitsSize; + return digits; + } + } + + int *res = (int *)malloc(sizeof(int) * (digitsSize+1)); + res[0] = 1; + memcpy(res+1, digits, sizeof(int) * digitsSize); + *returnSize =( digitsSize + 1); + return res; + +} + // 第三次 // 在第二次的代码上进行优化,中间只要不进位,就可以退出 From cf54c570a69ccea22bbdfd570eb0409090e5bd00 Mon Sep 17 00:00:00 2001 From: xuzhougeng Date: Mon, 10 Feb 2020 16:53:26 +0800 Subject: [PATCH 0017/1268] =?UTF-8?q?=E5=90=88=E5=B9=B6=E5=90=8E=E6=8E=92?= =?UTF-8?q?=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030533/LeetCode_88_33.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Week_01/G20200343030533/LeetCode_88_33.c diff --git a/Week_01/G20200343030533/LeetCode_88_33.c b/Week_01/G20200343030533/LeetCode_88_33.c new file mode 100644 index 00000000..3a7935c0 --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_88_33.c @@ -0,0 +1,18 @@ +//方法1: 先把元素加入到最后,然后排序 +//时间复杂度O(nlog n), 空间复杂度O(n) +int cmp(const void *a, const void *b){ + return *(int*)a - *(int*)b; +} + +void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){ + + int i = m; + int j = 0; + while ( j < nums2Size){ + nums1[i] = nums2[j]; + i++; + j++; + } + qsort(nums1, m+n, sizeof(int), cmp); + return nums1; +} From 49387e996e4fc297adf7d8fc6effae5bba83ffb9 Mon Sep 17 00:00:00 2001 From: fpanda Date: Mon, 10 Feb 2020 17:06:00 +0800 Subject: [PATCH 0018/1268] Add LeetCode 283 Move Zeros quit exit ls pwd --- .../LeetCode_283_G20200343030449.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Week_01/G20200343030449/LeetCode_283_G20200343030449.cpp diff --git a/Week_01/G20200343030449/LeetCode_283_G20200343030449.cpp b/Week_01/G20200343030449/LeetCode_283_G20200343030449.cpp new file mode 100644 index 00000000..4d4fddc9 --- /dev/null +++ b/Week_01/G20200343030449/LeetCode_283_G20200343030449.cpp @@ -0,0 +1,17 @@ +class Solution { +public: + void moveZeroes(vector& nums) { + int zeroNums = 0; + for(auto i = 0; i Date: Mon, 10 Feb 2020 17:14:44 +0800 Subject: [PATCH 0019/1268] [dsa] array - move zeroes --- .../G20200343030373/LeetCode_283_373_test.go | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 Week_01/G20200343030373/LeetCode_283_373_test.go diff --git a/Week_01/G20200343030373/LeetCode_283_373_test.go b/Week_01/G20200343030373/LeetCode_283_373_test.go new file mode 100644 index 00000000..166557c6 --- /dev/null +++ b/Week_01/G20200343030373/LeetCode_283_373_test.go @@ -0,0 +1,83 @@ +//https://leetcode-cn.com/problems/move-zeroes/ +package array_test + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestMoveZeroes(t *testing.T) { + nums := []int{0, 1, 0, 3, 12} + expect := []int{1, 3, 12, 0, 0} + moveZeroes(nums) + assert.Equal(t, expect, nums) + + nums = []int{0, 1, 0, 3, 12} + method1(nums) + assert.Equal(t, expect, nums) + + nums = []int{0, 1, 0, 3, 12} + method2(nums) + assert.Equal(t, expect, nums) + + nums = []int{0, 1, 0, 3, 12} + method3(nums) + assert.Equal(t, expect, nums) + + nums1 := []int{1} + moveZeroes(nums1) + assert.Equal(t, nums1, nums1) +} + +func moveZeroes(nums []int) { + //Best + //其实method2就是method1考虑在一次遍历里解决问题;method3就是method2的更直接、简洁版本 + method3(nums) +} + +//method1: 两层循环 +//第一层循环将非零元素放到数组前面 +//第二层循环后面补零 +//worst: O(2n) +func method1(nums []int) { + fast, slow := 0, 0 + for ; fast < len(nums); fast++ { + if nums[fast] != 0 { //对于每一个快指针元素值不为0,要做两步操作,先将非零元素替换,再移动慢指针 + if fast != slow { //优化,不加这句判断也对,加这句减少一次交换 + nums[slow] = nums[fast] + } + slow++ //注意,每一次不为零都需要移动slow,否则[]int{1}错误 + } + } + for ; slow < len(nums); slow++ { + nums[slow] = 0 + } +} + +//method2: 双指针 +//快指针遇到 非零 就和慢指针的数字做交换,慢指针做过一次交换后就累加,保持顺序 +//O(n) +func method2(nums []int) { + fast, slow := 0, 0 + for ; fast < len(nums); fast++ { + if nums[fast] != 0 { + if fast != slow { //如果fast等于slow,则在原地,将slow后移保留即可 + nums[slow] = nums[fast] //如果fast不等于slow,fast在slow的后面;fast的值又是非零,则与slow的值交换,fast的值改成零,slow后移 + nums[fast] = 0 + } + slow++ + } + } +} + +func method3(nums []int) { + fast, slow := 0, 0 + for ; fast < len(nums); fast++ { + if nums[fast] != 0 { + if fast != slow { + nums[slow], nums[fast] = nums[fast], nums[slow] //slow把每一个非零值都做了交换,则剩下的fast自然而然就都是零 + } + slow++ + } + } +} From c313ce4d089b67daa2e8b8b234e46ae2511c03d0 Mon Sep 17 00:00:00 2001 From: xuzhougeng <18868192325m0@sina.cn> Date: Mon, 10 Feb 2020 17:46:27 +0800 Subject: [PATCH 0020/1268] rename --- Week_01/G20200343030533/LeetCode_1_533.c | 51 ++++++++ Week_01/G20200343030533/LeetCode_1_533.java | 19 +++ Week_01/G20200343030533/LeetCode_1_533.py | 16 +++ Week_01/G20200343030533/LeetCode_26_533.c | 20 +++ Week_01/G20200343030533/LeetCode_26_533.cpp | 18 +++ Week_01/G20200343030533/LeetCode_26_533.java | 15 +++ Week_01/G20200343030533/LeetCode_26_533.py | 20 +++ Week_01/G20200343030533/LeetCode_283_533.c | 13 ++ Week_01/G20200343030533/LeetCode_283_533.java | 15 +++ Week_01/G20200343030533/LeetCode_66_533.c | 122 ++++++++++++++++++ Week_01/G20200343030533/LeetCode_88_533.c | 18 +++ 11 files changed, 327 insertions(+) create mode 100644 Week_01/G20200343030533/LeetCode_1_533.c create mode 100644 Week_01/G20200343030533/LeetCode_1_533.java create mode 100644 Week_01/G20200343030533/LeetCode_1_533.py create mode 100644 Week_01/G20200343030533/LeetCode_26_533.c create mode 100644 Week_01/G20200343030533/LeetCode_26_533.cpp create mode 100644 Week_01/G20200343030533/LeetCode_26_533.java create mode 100644 Week_01/G20200343030533/LeetCode_26_533.py create mode 100644 Week_01/G20200343030533/LeetCode_283_533.c create mode 100644 Week_01/G20200343030533/LeetCode_283_533.java create mode 100644 Week_01/G20200343030533/LeetCode_66_533.c create mode 100644 Week_01/G20200343030533/LeetCode_88_533.c diff --git a/Week_01/G20200343030533/LeetCode_1_533.c b/Week_01/G20200343030533/LeetCode_1_533.c new file mode 100644 index 00000000..9deba1c0 --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_1_533.c @@ -0,0 +1,51 @@ +/** + * Note: The returned array must be malloced, assume caller calls free(). + */ +/** + * Note: The returned array must be malloced, assume caller calls free(). + */ + +struct hashtable { + int key; /* key */ + int value; + UT_hash_handle hh; /* makes this structure hashable */ +}; + +void add(struct hashtable **table, int num, int idx) { + //申请一个结构存放数据 + struct hashtable *s; + s = malloc(sizeof(struct hashtable)); + s->key = num; + s->value = idx; + HASH_ADD_INT((*table), key, s ); /* id: name of key field */ +} + + +//一遍哈希法 +// 从头往后遍历,检查target - nums[i] 是否在hash表中 +// 如果不在, 以值为key,下标为value进行存放 +int* twoSum(int* nums, int numsSize, int target, int* returnSize){ + + struct hashtable *table = NULL; //新建哈希表 + struct hashtable *tmp; //用于存放找到中间结果 + *returnSize = 2; + int *res = (int*)malloc(sizeof(int) * *returnSize); + + int remain; + for(int i = 0; i < numsSize; i++){ + remain = target - nums[i]; //剩余值 + // 在表table中查找remin, 如果有结果,返回tmp + HASH_FIND_INT(table, &remain, tmp); + if ( tmp == NULL ){ + add(&table, nums[i], i); + } else { + res[1] = i; + res[0] = tmp->value; + break; + } + + } + + return res; + +} diff --git a/Week_01/G20200343030533/LeetCode_1_533.java b/Week_01/G20200343030533/LeetCode_1_533.java new file mode 100644 index 00000000..ffbff75b --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_1_533.java @@ -0,0 +1,19 @@ +//照搬官方的解释,主要是在学习Java的map的使用 +class Solution { + public int[] twoSum(int[] nums, int target) { + // Map构建方法为Map<键类型, 值类型> 变量名 = new HashMap<>(); + Map map = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + int complement = target - nums[i]; + //查询操作, .containsKey + if (map.containsKey(complement)) { + //取值操作.get + return new int[] { map.get(complement), i }; + } + //插入操作 .put(key, value) + map.put(nums[i], i); + } + // 丢错报错throw + throw new IllegalArgumentException("No two sum solution"); + } +} diff --git a/Week_01/G20200343030533/LeetCode_1_533.py b/Week_01/G20200343030533/LeetCode_1_533.py new file mode 100644 index 00000000..47976f51 --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_1_533.py @@ -0,0 +1,16 @@ +""" +Python果然简洁了很多,自带字典就是好 +""" +class Solution(object): + def twoSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + d = dict(); + for idx, val in enumerate(nums): + if (target - val ) in d: + return [idx, d[target - val]] + else: + d[ val ] = idx; diff --git a/Week_01/G20200343030533/LeetCode_26_533.c b/Week_01/G20200343030533/LeetCode_26_533.c new file mode 100644 index 00000000..8006e4b5 --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_26_533.c @@ -0,0 +1,20 @@ +/* + * 解题思路,双指针法 + * 慢指针记录不重复元素的位置。 快指针遍历数组,同时和慢指针比较。如果两者不相同,就将该元素赋值到慢指针的下一个元素。 +*/ + +int removeDuplicates(int* nums, int numsSize){ + if (numsSize == 0 ) return 0; + int i = 0; + int j = 0; + for ( int i = 0; i < numsSize ; i++){ + if (nums[i] != nums[j]){ + j++; + nums[j] = nums[i]; + } + } + j++; + return j; + +} + diff --git a/Week_01/G20200343030533/LeetCode_26_533.cpp b/Week_01/G20200343030533/LeetCode_26_533.cpp new file mode 100644 index 00000000..0691d7f5 --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_26_533.cpp @@ -0,0 +1,18 @@ +//思路同C, 用C++写一遍 +class Solution { +public: + int removeDuplicates(vector& nums) { + if (nums.size() == 0 ) return 0; + + int fast = 0, slow = 0; + for (; fast < nums.size(); fast++){ + if ( nums[fast] != nums[slow]){ + slow++; + nums[slow] = nums[fast]; + } + } + slow++; + return slow; + + } +}; diff --git a/Week_01/G20200343030533/LeetCode_26_533.java b/Week_01/G20200343030533/LeetCode_26_533.java new file mode 100644 index 00000000..61dc18a5 --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_26_533.java @@ -0,0 +1,15 @@ +//思路同C,只不过用java写 +class Solution { + public int removeDuplicates(int[] nums) { + int j = 0; + for (int i = 0; i < nums.length; i++){ + if (nums[i] != nums[j]){ + j++; + nums[j] = nums[i]; + } + } + j++; + return j; + + } +} diff --git a/Week_01/G20200343030533/LeetCode_26_533.py b/Week_01/G20200343030533/LeetCode_26_533.py new file mode 100644 index 00000000..c22a7cfb --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_26_533.py @@ -0,0 +1,20 @@ +""" +思路同C,只不过用Python写 +""" +class Solution(object): + def removeDuplicates(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + if len(nums) == 0: + return 0 + slow = 0 + fast = 0 + while fast < len(nums) : + if nums[slow] != nums[fast]: + slow += 1 + nums[slow] = nums[fast] + fast += 1 + slow += 1 + return slow diff --git a/Week_01/G20200343030533/LeetCode_283_533.c b/Week_01/G20200343030533/LeetCode_283_533.c new file mode 100644 index 00000000..930a5940 --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_283_533.c @@ -0,0 +1,13 @@ +void moveZeroes(int* nums, int numsSize){ + if (numsSize == 0 ) return; + int i, j = 0; + for ( i = 0 ; i < numsSize; i++){ + if (nums[i] != 0){ + if (i != j){ + nums[j] = nums[i]; + nums[i] = 0; + } + j++; + } + } +} diff --git a/Week_01/G20200343030533/LeetCode_283_533.java b/Week_01/G20200343030533/LeetCode_283_533.java new file mode 100644 index 00000000..a02fdbfc --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_283_533.java @@ -0,0 +1,15 @@ +class Solution { + public void moveZeroes(int[] nums) { + int j = 0; + for (int i = 0; i < nums.length; i++){ + if (nums[i] != 0){ + nums[j] = nums[i]; + if (i != j){ + nums[i] = 0; + } + j++; + } + } + + } +} diff --git a/Week_01/G20200343030533/LeetCode_66_533.c b/Week_01/G20200343030533/LeetCode_66_533.c new file mode 100644 index 00000000..4417199d --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_66_533.c @@ -0,0 +1,122 @@ +// 第四次 +// 想清楚了逻辑,简化了代码 +int* plusOne(int* digits, int digitsSize, int* returnSize){ + + if (digitsSize == 0) return ; + + for ( int i = digitsSize - 1; i >= 0; i-- ){ + digits[i]++; + digits[i] = digits[i] % 10; + if (digits[i] != 0 ) { + *returnSize = digitsSize; + return digits; + } + } + + int *res = (int *)malloc(sizeof(int) * (digitsSize+1)); + res[0] = 1; + memcpy(res+1, digits, sizeof(int) * digitsSize); + *returnSize =( digitsSize + 1); + return res; + +} + +// 第三次 +// 在第二次的代码上进行优化,中间只要不进位,就可以退出 + +int* plusOne(int* digits, int digitsSize, int* returnSize){ + + if ( digitsSize == 0) return ; + + // 从后往前 + // 先算最后一位 + int sum = digits[digitsSize - 1] + 1; + digits[digitsSize-1] = sum % 10; + int carry = sum / 10; + for ( int i = digitsSize - 2; i >= 0; i--){ + sum = digits[i] + carry; + digits[i] = sum % 10; + carry = sum / 10; + if ( carry == 0 ) { + *returnSize = digitsSize ; + return digits; + } + } + + if (carry != 0 ){ + int *res = (int *)malloc(sizeof(int) * (digitsSize+1)); + res[0] = carry; + memcpy(res+1, digits, sizeof(int) * digitsSize); + *returnSize =( digitsSize + 1); + return res; + } + *returnSize = digitsSize; + return digits ; + + +} + + + +//第二次写的代码 +int* plusOne(int* digits, int digitsSize, int* returnSize){ + + if ( digitsSize == 0) return ; + + // 从后往前 + // 先算最后一位 + int sum = digits[digitsSize - 1] + 1; + digits[digitsSize-1] = sum % 10; + int carry = sum / 10; + for ( int i = digitsSize - 2; i >= 0; i--){ + sum = digits[i] + carry; + digits[i] = sum % 10; + carry = sum / 10; + } + if (carry > 0 ){ + int *res = (int *)malloc(sizeof(int) * (digitsSize+1)); + res[0] = carry; + memcpy(res+1, digits, sizeof(int) * digitsSize); + *returnSize =( digitsSize + 1); + return res; + + } + + *returnSize = digitsSize ; + return digits; + +} + +//第一次写的代码 + +int* plusOne(int* digits, int digitsSize, int* returnSize){ + + // 如果末尾小于9 + if (digits[digitsSize - 1] < 9){ + *returnSize = digitsSize; + digits[digitsSize-1]+=1; + return digits; + } + //否则要从后往前计算 + //进位 + int carry = 1; + for ( int i = digitsSize - 1; i >= 0; i--){ + if (carry){ + digits[i] += 1; + carry = 0; + } + if ( digits[i] > 9){ + digits[i] = digits[i] -10; + carry = 1; + } + } + if ( carry == 0) { + *returnSize =digitsSize; + return digits; + } + *returnSize = digitsSize + 1; + int *res = (int*)malloc( sizeof(int) * *returnSize); + res[0] = 1; + memcpy(res+1, digits, sizeof(int) * digitsSize); + return res; +} diff --git a/Week_01/G20200343030533/LeetCode_88_533.c b/Week_01/G20200343030533/LeetCode_88_533.c new file mode 100644 index 00000000..3a7935c0 --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_88_533.c @@ -0,0 +1,18 @@ +//方法1: 先把元素加入到最后,然后排序 +//时间复杂度O(nlog n), 空间复杂度O(n) +int cmp(const void *a, const void *b){ + return *(int*)a - *(int*)b; +} + +void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){ + + int i = m; + int j = 0; + while ( j < nums2Size){ + nums1[i] = nums2[j]; + i++; + j++; + } + qsort(nums1, m+n, sizeof(int), cmp); + return nums1; +} From 9cd0ff0c75fa65dab8924c1e1af9cb78399fc10a Mon Sep 17 00:00:00 2001 From: xiebor <904558398@qq.com> Date: Mon, 10 Feb 2020 17:48:55 +0800 Subject: [PATCH 0021/1268] commit 1 --- readme | 1 + 1 file changed, 1 insertion(+) create mode 100644 readme diff --git a/readme b/readme new file mode 100644 index 00000000..70bbef18 --- /dev/null +++ b/readme @@ -0,0 +1 @@ +我是第一次 From 1d6199832e538b742a6999e8cee08c12e7281459 Mon Sep 17 00:00:00 2001 From: xiebor <904558398@qq.com> Date: Mon, 10 Feb 2020 18:19:14 +0800 Subject: [PATCH 0022/1268] commit 2 --- readme => readme.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename readme => readme.txt (100%) diff --git a/readme b/readme.txt similarity index 100% rename from readme rename to readme.txt From 3de0fb226fa6f9e039cea0f1c99efc7549a67dd0 Mon Sep 17 00:00:00 2001 From: pangshusong Date: Mon, 10 Feb 2020 18:27:09 +0800 Subject: [PATCH 0023/1268] [dsa] array - container with most water --- .../G20200343030373/LeetCode_11_373_test.go | 62 +++++++++++++++++++ .../G20200343030373/LeetCode_283_373_test.go | 19 +++--- 2 files changed, 72 insertions(+), 9 deletions(-) create mode 100644 Week_01/G20200343030373/LeetCode_11_373_test.go diff --git a/Week_01/G20200343030373/LeetCode_11_373_test.go b/Week_01/G20200343030373/LeetCode_11_373_test.go new file mode 100644 index 00000000..9e5c72c8 --- /dev/null +++ b/Week_01/G20200343030373/LeetCode_11_373_test.go @@ -0,0 +1,62 @@ +//https://leetcode-cn.com/problems/container-with-most-water/ +package week1 + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestMaxArea(t *testing.T) { + height := []int{1, 8, 6, 2, 5, 4, 8, 3, 7} + assert.Equal(t, 49, maxArea(height)) + assert.Equal(t, 49, enumArea(height)) + assert.Equal(t, 49, shrinkArea(height)) +} + +func maxArea(height []int) int { + return shrinkArea(height) +} + +func min(a, b int) int { + if a < b { + return a + } + return b +} + +func max(a, b int) int { + if a > b { + return a + } + return b +} + +//暴力求解 +//从左到右,对于每一个元素,枚举出与其右边元素组成的面积,比较最大值 +//O(n^2) +func enumArea(height []int) int { + maxArea := 0 + for i := 0; i < len(height); i++ { + for j := i + 1; j < len(height); j++ { + maxArea = max(maxArea, (j-i)*min(height[i], height[j])) + } + } + return maxArea +} + +//左右夹逼 +//最左侧到最右侧的宽度最长,具有第一优势,然后左右分别向中间收敛,收敛的过程中比较最大值 +//收敛时,左右两个边界中的较小值,才需要去移动寻找下一个值 +//O(n) +func shrinkArea(height []int) int { + maxArea := 0 + for i, j := 0, len(height)-1; i < j; { + maxArea = max(maxArea, (j-i)*min(height[i], height[j])) + if height[i] < height[j] { + i++ + } else { + j-- + } + } + return maxArea +} diff --git a/Week_01/G20200343030373/LeetCode_283_373_test.go b/Week_01/G20200343030373/LeetCode_283_373_test.go index 166557c6..8be23182 100644 --- a/Week_01/G20200343030373/LeetCode_283_373_test.go +++ b/Week_01/G20200343030373/LeetCode_283_373_test.go @@ -1,5 +1,5 @@ //https://leetcode-cn.com/problems/move-zeroes/ -package array_test +package week1 import ( "github.com/stretchr/testify/assert" @@ -13,15 +13,15 @@ func TestMoveZeroes(t *testing.T) { assert.Equal(t, expect, nums) nums = []int{0, 1, 0, 3, 12} - method1(nums) + countNoneZero(nums) assert.Equal(t, expect, nums) nums = []int{0, 1, 0, 3, 12} - method2(nums) + dualPointerChange(nums) assert.Equal(t, expect, nums) nums = []int{0, 1, 0, 3, 12} - method3(nums) + dualPointerSwap(nums) assert.Equal(t, expect, nums) nums1 := []int{1} @@ -31,15 +31,16 @@ func TestMoveZeroes(t *testing.T) { func moveZeroes(nums []int) { //Best - //其实method2就是method1考虑在一次遍历里解决问题;method3就是method2的更直接、简洁版本 - method3(nums) + //其实dualPointerChange就是countNoneZero考虑在一次遍历里解决问题; + //dualPointerSwap就是dualPointerChange的更直接、简洁版本 + dualPointerSwap(nums) } //method1: 两层循环 //第一层循环将非零元素放到数组前面 //第二层循环后面补零 //worst: O(2n) -func method1(nums []int) { +func countNoneZero(nums []int) { fast, slow := 0, 0 for ; fast < len(nums); fast++ { if nums[fast] != 0 { //对于每一个快指针元素值不为0,要做两步操作,先将非零元素替换,再移动慢指针 @@ -57,7 +58,7 @@ func method1(nums []int) { //method2: 双指针 //快指针遇到 非零 就和慢指针的数字做交换,慢指针做过一次交换后就累加,保持顺序 //O(n) -func method2(nums []int) { +func dualPointerChange(nums []int) { fast, slow := 0, 0 for ; fast < len(nums); fast++ { if nums[fast] != 0 { @@ -70,7 +71,7 @@ func method2(nums []int) { } } -func method3(nums []int) { +func dualPointerSwap(nums []int) { fast, slow := 0, 0 for ; fast < len(nums); fast++ { if nums[fast] != 0 { From 8f7c3be706a32d276a628df673cdc5a005ae120f Mon Sep 17 00:00:00 2001 From: pangshusong Date: Mon, 10 Feb 2020 18:34:44 +0800 Subject: [PATCH 0024/1268] [dsa] doc fixed --- Week_00/G20200343030373/NOTE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Week_00/G20200343030373/NOTE.md b/Week_00/G20200343030373/NOTE.md index acafd8a9..cd08da6a 100644 --- a/Week_00/G20200343030373/NOTE.md +++ b/Week_00/G20200343030373/NOTE.md @@ -6,7 +6,7 @@ - 2.10 - 4.12 - [课程安排](https://shimo.im/docs/K9pv9HdcJ6KkRDQh/read) - 任务与作业 - - 每周日00:00-23:59 + - 上周日00:00-本周日23:59 - 每周作业 - 至少2道代码作业提交 - 一篇学习总结 From 1c893ae6c408b6e453235751db03158bde50a068 Mon Sep 17 00:00:00 2001 From: xuzhougeng <18868192325m0@sina.cn> Date: Mon, 10 Feb 2020 18:40:33 +0800 Subject: [PATCH 0025/1268] rename --- .../{LeetCode_1_533.c => LeetCode_001_533.c} | 0 ...tCode_1_533.java => LeetCode_001_533.java} | 0 ...{LeetCode_1_533.py => LeetCode_001_533.py} | 0 Week_01/G20200343030533/LeetCode_021_533.c | 0 .../{LeetCode_66_533.c => LeetCode_066_533.c} | 0 .../{LeetCode_88_533.c => LeetCode_088_533.c} | 0 Week_01/G20200343030533/LeetCode_189_533.c | 39 +++++++++++++++++++ 7 files changed, 39 insertions(+) rename Week_01/G20200343030533/{LeetCode_1_533.c => LeetCode_001_533.c} (100%) rename Week_01/G20200343030533/{LeetCode_1_533.java => LeetCode_001_533.java} (100%) rename Week_01/G20200343030533/{LeetCode_1_533.py => LeetCode_001_533.py} (100%) create mode 100644 Week_01/G20200343030533/LeetCode_021_533.c rename Week_01/G20200343030533/{LeetCode_66_533.c => LeetCode_066_533.c} (100%) rename Week_01/G20200343030533/{LeetCode_88_533.c => LeetCode_088_533.c} (100%) create mode 100644 Week_01/G20200343030533/LeetCode_189_533.c diff --git a/Week_01/G20200343030533/LeetCode_1_533.c b/Week_01/G20200343030533/LeetCode_001_533.c similarity index 100% rename from Week_01/G20200343030533/LeetCode_1_533.c rename to Week_01/G20200343030533/LeetCode_001_533.c diff --git a/Week_01/G20200343030533/LeetCode_1_533.java b/Week_01/G20200343030533/LeetCode_001_533.java similarity index 100% rename from Week_01/G20200343030533/LeetCode_1_533.java rename to Week_01/G20200343030533/LeetCode_001_533.java diff --git a/Week_01/G20200343030533/LeetCode_1_533.py b/Week_01/G20200343030533/LeetCode_001_533.py similarity index 100% rename from Week_01/G20200343030533/LeetCode_1_533.py rename to Week_01/G20200343030533/LeetCode_001_533.py diff --git a/Week_01/G20200343030533/LeetCode_021_533.c b/Week_01/G20200343030533/LeetCode_021_533.c new file mode 100644 index 00000000..e69de29b diff --git a/Week_01/G20200343030533/LeetCode_66_533.c b/Week_01/G20200343030533/LeetCode_066_533.c similarity index 100% rename from Week_01/G20200343030533/LeetCode_66_533.c rename to Week_01/G20200343030533/LeetCode_066_533.c diff --git a/Week_01/G20200343030533/LeetCode_88_533.c b/Week_01/G20200343030533/LeetCode_088_533.c similarity index 100% rename from Week_01/G20200343030533/LeetCode_88_533.c rename to Week_01/G20200343030533/LeetCode_088_533.c diff --git a/Week_01/G20200343030533/LeetCode_189_533.c b/Week_01/G20200343030533/LeetCode_189_533.c new file mode 100644 index 00000000..963d9305 --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_189_533.c @@ -0,0 +1,39 @@ +//方法2: 3次反转 +void rotate(int* nums, int numsSize, int k){ + k = k % numsSize; + // 第一次反转 + int tmp; + for (int i = 0 ; i < numsSize / 2; i++){ + tmp = nums[i]; + nums[i] = nums[numsSize-i-1]; + nums[numsSize-i-1] = tmp; + } + //第二次反转 + for (int i = 0 ; i < k / 2; i++){ + tmp = nums[i]; + nums[i] = nums[k-i-1]; + nums[k-i-1] = tmp; + } + //第三次反转 + for (int i = k ; i < (numsSize + k ) >> 1; i++){ + tmp = nums[i]; + nums[i] = nums[numsSize-i+k-1]; + nums[numsSize-i+k-1] = tmp; + } +} +//方法1: 非原地算法 +void rotate(int* nums, int numsSize, int k){ + + k = k % numsSize; + + int *arr = (int *)malloc( sizeof(int) * numsSize); + + //移动后k个元素 + memcpy(arr, nums+(numsSize-k), sizeof(int) * k); + //移动前numsSize-k个元素 + memcpy(arr+k, nums, sizeof(int) * (numsSize -k)); + + memcpy(nums, arr, sizeof(int) * numsSize); + free(arr); + +} From 061f69aecfc152b42d81c34f5c7d3aac11b8491d Mon Sep 17 00:00:00 2001 From: xuzhougeng <18868192325m0@sina.cn> Date: Mon, 10 Feb 2020 18:42:26 +0800 Subject: [PATCH 0026/1268] rename --- Week_01/G20200343030533/{LeetCode_26_533.c => LeetCode_026_533.c} | 0 .../G20200343030533/{LeetCode_26_533.cpp => LeetCode_026_533.cpp} | 0 .../{LeetCode_26_533.java => LeetCode_026_533.java} | 0 .../G20200343030533/{LeetCode_26_533.py => LeetCode_026_533.py} | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename Week_01/G20200343030533/{LeetCode_26_533.c => LeetCode_026_533.c} (100%) rename Week_01/G20200343030533/{LeetCode_26_533.cpp => LeetCode_026_533.cpp} (100%) rename Week_01/G20200343030533/{LeetCode_26_533.java => LeetCode_026_533.java} (100%) rename Week_01/G20200343030533/{LeetCode_26_533.py => LeetCode_026_533.py} (100%) diff --git a/Week_01/G20200343030533/LeetCode_26_533.c b/Week_01/G20200343030533/LeetCode_026_533.c similarity index 100% rename from Week_01/G20200343030533/LeetCode_26_533.c rename to Week_01/G20200343030533/LeetCode_026_533.c diff --git a/Week_01/G20200343030533/LeetCode_26_533.cpp b/Week_01/G20200343030533/LeetCode_026_533.cpp similarity index 100% rename from Week_01/G20200343030533/LeetCode_26_533.cpp rename to Week_01/G20200343030533/LeetCode_026_533.cpp diff --git a/Week_01/G20200343030533/LeetCode_26_533.java b/Week_01/G20200343030533/LeetCode_026_533.java similarity index 100% rename from Week_01/G20200343030533/LeetCode_26_533.java rename to Week_01/G20200343030533/LeetCode_026_533.java diff --git a/Week_01/G20200343030533/LeetCode_26_533.py b/Week_01/G20200343030533/LeetCode_026_533.py similarity index 100% rename from Week_01/G20200343030533/LeetCode_26_533.py rename to Week_01/G20200343030533/LeetCode_026_533.py From 5a76c662581b4c566dc4cab48c5a23f9d14c1e6e Mon Sep 17 00:00:00 2001 From: xuzhougeng <18868192325m0@sina.cn> Date: Mon, 10 Feb 2020 18:48:31 +0800 Subject: [PATCH 0027/1268] delete unused files --- Week_01/G20200343030533/LeetCode_1_33.c | 51 -------- Week_01/G20200343030533/LeetCode_1_33.java | 19 --- Week_01/G20200343030533/LeetCode_1_33.py | 16 --- Week_01/G20200343030533/LeetCode_26_33.c | 20 --- Week_01/G20200343030533/LeetCode_26_33.cpp | 18 --- Week_01/G20200343030533/LeetCode_26_33.java | 15 --- Week_01/G20200343030533/LeetCode_26_33.py | 20 --- Week_01/G20200343030533/LeetCode_283_33.c | 13 -- Week_01/G20200343030533/LeetCode_283_33.java | 15 --- Week_01/G20200343030533/LeetCode_66_33.c | 122 ------------------- Week_01/G20200343030533/LeetCode_88_33.c | 18 --- 11 files changed, 327 deletions(-) delete mode 100644 Week_01/G20200343030533/LeetCode_1_33.c delete mode 100644 Week_01/G20200343030533/LeetCode_1_33.java delete mode 100644 Week_01/G20200343030533/LeetCode_1_33.py delete mode 100644 Week_01/G20200343030533/LeetCode_26_33.c delete mode 100644 Week_01/G20200343030533/LeetCode_26_33.cpp delete mode 100644 Week_01/G20200343030533/LeetCode_26_33.java delete mode 100644 Week_01/G20200343030533/LeetCode_26_33.py delete mode 100644 Week_01/G20200343030533/LeetCode_283_33.c delete mode 100644 Week_01/G20200343030533/LeetCode_283_33.java delete mode 100644 Week_01/G20200343030533/LeetCode_66_33.c delete mode 100644 Week_01/G20200343030533/LeetCode_88_33.c diff --git a/Week_01/G20200343030533/LeetCode_1_33.c b/Week_01/G20200343030533/LeetCode_1_33.c deleted file mode 100644 index 9deba1c0..00000000 --- a/Week_01/G20200343030533/LeetCode_1_33.c +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Note: The returned array must be malloced, assume caller calls free(). - */ -/** - * Note: The returned array must be malloced, assume caller calls free(). - */ - -struct hashtable { - int key; /* key */ - int value; - UT_hash_handle hh; /* makes this structure hashable */ -}; - -void add(struct hashtable **table, int num, int idx) { - //申请一个结构存放数据 - struct hashtable *s; - s = malloc(sizeof(struct hashtable)); - s->key = num; - s->value = idx; - HASH_ADD_INT((*table), key, s ); /* id: name of key field */ -} - - -//一遍哈希法 -// 从头往后遍历,检查target - nums[i] 是否在hash表中 -// 如果不在, 以值为key,下标为value进行存放 -int* twoSum(int* nums, int numsSize, int target, int* returnSize){ - - struct hashtable *table = NULL; //新建哈希表 - struct hashtable *tmp; //用于存放找到中间结果 - *returnSize = 2; - int *res = (int*)malloc(sizeof(int) * *returnSize); - - int remain; - for(int i = 0; i < numsSize; i++){ - remain = target - nums[i]; //剩余值 - // 在表table中查找remin, 如果有结果,返回tmp - HASH_FIND_INT(table, &remain, tmp); - if ( tmp == NULL ){ - add(&table, nums[i], i); - } else { - res[1] = i; - res[0] = tmp->value; - break; - } - - } - - return res; - -} diff --git a/Week_01/G20200343030533/LeetCode_1_33.java b/Week_01/G20200343030533/LeetCode_1_33.java deleted file mode 100644 index ffbff75b..00000000 --- a/Week_01/G20200343030533/LeetCode_1_33.java +++ /dev/null @@ -1,19 +0,0 @@ -//照搬官方的解释,主要是在学习Java的map的使用 -class Solution { - public int[] twoSum(int[] nums, int target) { - // Map构建方法为Map<键类型, 值类型> 变量名 = new HashMap<>(); - Map map = new HashMap<>(); - for (int i = 0; i < nums.length; i++) { - int complement = target - nums[i]; - //查询操作, .containsKey - if (map.containsKey(complement)) { - //取值操作.get - return new int[] { map.get(complement), i }; - } - //插入操作 .put(key, value) - map.put(nums[i], i); - } - // 丢错报错throw - throw new IllegalArgumentException("No two sum solution"); - } -} diff --git a/Week_01/G20200343030533/LeetCode_1_33.py b/Week_01/G20200343030533/LeetCode_1_33.py deleted file mode 100644 index 47976f51..00000000 --- a/Week_01/G20200343030533/LeetCode_1_33.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -Python果然简洁了很多,自带字典就是好 -""" -class Solution(object): - def twoSum(self, nums, target): - """ - :type nums: List[int] - :type target: int - :rtype: List[int] - """ - d = dict(); - for idx, val in enumerate(nums): - if (target - val ) in d: - return [idx, d[target - val]] - else: - d[ val ] = idx; diff --git a/Week_01/G20200343030533/LeetCode_26_33.c b/Week_01/G20200343030533/LeetCode_26_33.c deleted file mode 100644 index 8006e4b5..00000000 --- a/Week_01/G20200343030533/LeetCode_26_33.c +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 解题思路,双指针法 - * 慢指针记录不重复元素的位置。 快指针遍历数组,同时和慢指针比较。如果两者不相同,就将该元素赋值到慢指针的下一个元素。 -*/ - -int removeDuplicates(int* nums, int numsSize){ - if (numsSize == 0 ) return 0; - int i = 0; - int j = 0; - for ( int i = 0; i < numsSize ; i++){ - if (nums[i] != nums[j]){ - j++; - nums[j] = nums[i]; - } - } - j++; - return j; - -} - diff --git a/Week_01/G20200343030533/LeetCode_26_33.cpp b/Week_01/G20200343030533/LeetCode_26_33.cpp deleted file mode 100644 index 0691d7f5..00000000 --- a/Week_01/G20200343030533/LeetCode_26_33.cpp +++ /dev/null @@ -1,18 +0,0 @@ -//思路同C, 用C++写一遍 -class Solution { -public: - int removeDuplicates(vector& nums) { - if (nums.size() == 0 ) return 0; - - int fast = 0, slow = 0; - for (; fast < nums.size(); fast++){ - if ( nums[fast] != nums[slow]){ - slow++; - nums[slow] = nums[fast]; - } - } - slow++; - return slow; - - } -}; diff --git a/Week_01/G20200343030533/LeetCode_26_33.java b/Week_01/G20200343030533/LeetCode_26_33.java deleted file mode 100644 index 61dc18a5..00000000 --- a/Week_01/G20200343030533/LeetCode_26_33.java +++ /dev/null @@ -1,15 +0,0 @@ -//思路同C,只不过用java写 -class Solution { - public int removeDuplicates(int[] nums) { - int j = 0; - for (int i = 0; i < nums.length; i++){ - if (nums[i] != nums[j]){ - j++; - nums[j] = nums[i]; - } - } - j++; - return j; - - } -} diff --git a/Week_01/G20200343030533/LeetCode_26_33.py b/Week_01/G20200343030533/LeetCode_26_33.py deleted file mode 100644 index c22a7cfb..00000000 --- a/Week_01/G20200343030533/LeetCode_26_33.py +++ /dev/null @@ -1,20 +0,0 @@ -""" -思路同C,只不过用Python写 -""" -class Solution(object): - def removeDuplicates(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - if len(nums) == 0: - return 0 - slow = 0 - fast = 0 - while fast < len(nums) : - if nums[slow] != nums[fast]: - slow += 1 - nums[slow] = nums[fast] - fast += 1 - slow += 1 - return slow diff --git a/Week_01/G20200343030533/LeetCode_283_33.c b/Week_01/G20200343030533/LeetCode_283_33.c deleted file mode 100644 index 930a5940..00000000 --- a/Week_01/G20200343030533/LeetCode_283_33.c +++ /dev/null @@ -1,13 +0,0 @@ -void moveZeroes(int* nums, int numsSize){ - if (numsSize == 0 ) return; - int i, j = 0; - for ( i = 0 ; i < numsSize; i++){ - if (nums[i] != 0){ - if (i != j){ - nums[j] = nums[i]; - nums[i] = 0; - } - j++; - } - } -} diff --git a/Week_01/G20200343030533/LeetCode_283_33.java b/Week_01/G20200343030533/LeetCode_283_33.java deleted file mode 100644 index a02fdbfc..00000000 --- a/Week_01/G20200343030533/LeetCode_283_33.java +++ /dev/null @@ -1,15 +0,0 @@ -class Solution { - public void moveZeroes(int[] nums) { - int j = 0; - for (int i = 0; i < nums.length; i++){ - if (nums[i] != 0){ - nums[j] = nums[i]; - if (i != j){ - nums[i] = 0; - } - j++; - } - } - - } -} diff --git a/Week_01/G20200343030533/LeetCode_66_33.c b/Week_01/G20200343030533/LeetCode_66_33.c deleted file mode 100644 index 4417199d..00000000 --- a/Week_01/G20200343030533/LeetCode_66_33.c +++ /dev/null @@ -1,122 +0,0 @@ -// 第四次 -// 想清楚了逻辑,简化了代码 -int* plusOne(int* digits, int digitsSize, int* returnSize){ - - if (digitsSize == 0) return ; - - for ( int i = digitsSize - 1; i >= 0; i-- ){ - digits[i]++; - digits[i] = digits[i] % 10; - if (digits[i] != 0 ) { - *returnSize = digitsSize; - return digits; - } - } - - int *res = (int *)malloc(sizeof(int) * (digitsSize+1)); - res[0] = 1; - memcpy(res+1, digits, sizeof(int) * digitsSize); - *returnSize =( digitsSize + 1); - return res; - -} - -// 第三次 -// 在第二次的代码上进行优化,中间只要不进位,就可以退出 - -int* plusOne(int* digits, int digitsSize, int* returnSize){ - - if ( digitsSize == 0) return ; - - // 从后往前 - // 先算最后一位 - int sum = digits[digitsSize - 1] + 1; - digits[digitsSize-1] = sum % 10; - int carry = sum / 10; - for ( int i = digitsSize - 2; i >= 0; i--){ - sum = digits[i] + carry; - digits[i] = sum % 10; - carry = sum / 10; - if ( carry == 0 ) { - *returnSize = digitsSize ; - return digits; - } - } - - if (carry != 0 ){ - int *res = (int *)malloc(sizeof(int) * (digitsSize+1)); - res[0] = carry; - memcpy(res+1, digits, sizeof(int) * digitsSize); - *returnSize =( digitsSize + 1); - return res; - } - *returnSize = digitsSize; - return digits ; - - -} - - - -//第二次写的代码 -int* plusOne(int* digits, int digitsSize, int* returnSize){ - - if ( digitsSize == 0) return ; - - // 从后往前 - // 先算最后一位 - int sum = digits[digitsSize - 1] + 1; - digits[digitsSize-1] = sum % 10; - int carry = sum / 10; - for ( int i = digitsSize - 2; i >= 0; i--){ - sum = digits[i] + carry; - digits[i] = sum % 10; - carry = sum / 10; - } - if (carry > 0 ){ - int *res = (int *)malloc(sizeof(int) * (digitsSize+1)); - res[0] = carry; - memcpy(res+1, digits, sizeof(int) * digitsSize); - *returnSize =( digitsSize + 1); - return res; - - } - - *returnSize = digitsSize ; - return digits; - -} - -//第一次写的代码 - -int* plusOne(int* digits, int digitsSize, int* returnSize){ - - // 如果末尾小于9 - if (digits[digitsSize - 1] < 9){ - *returnSize = digitsSize; - digits[digitsSize-1]+=1; - return digits; - } - //否则要从后往前计算 - //进位 - int carry = 1; - for ( int i = digitsSize - 1; i >= 0; i--){ - if (carry){ - digits[i] += 1; - carry = 0; - } - if ( digits[i] > 9){ - digits[i] = digits[i] -10; - carry = 1; - } - } - if ( carry == 0) { - *returnSize =digitsSize; - return digits; - } - *returnSize = digitsSize + 1; - int *res = (int*)malloc( sizeof(int) * *returnSize); - res[0] = 1; - memcpy(res+1, digits, sizeof(int) * digitsSize); - return res; -} diff --git a/Week_01/G20200343030533/LeetCode_88_33.c b/Week_01/G20200343030533/LeetCode_88_33.c deleted file mode 100644 index 3a7935c0..00000000 --- a/Week_01/G20200343030533/LeetCode_88_33.c +++ /dev/null @@ -1,18 +0,0 @@ -//方法1: 先把元素加入到最后,然后排序 -//时间复杂度O(nlog n), 空间复杂度O(n) -int cmp(const void *a, const void *b){ - return *(int*)a - *(int*)b; -} - -void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){ - - int i = m; - int j = 0; - while ( j < nums2Size){ - nums1[i] = nums2[j]; - i++; - j++; - } - qsort(nums1, m+n, sizeof(int), cmp); - return nums1; -} From 3bd80bad45d55cd079e222af2ee04c7b2e01a371 Mon Sep 17 00:00:00 2001 From: pangshusong Date: Mon, 10 Feb 2020 19:10:01 +0800 Subject: [PATCH 0028/1268] [dsa] method to speed up use space to shrink time: fibonacci, climb stairs --- .../G20200343030373/LeetCode_70_373_test.go | 142 ++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 Week_01/G20200343030373/LeetCode_70_373_test.go diff --git a/Week_01/G20200343030373/LeetCode_70_373_test.go b/Week_01/G20200343030373/LeetCode_70_373_test.go new file mode 100644 index 00000000..381528b7 --- /dev/null +++ b/Week_01/G20200343030373/LeetCode_70_373_test.go @@ -0,0 +1,142 @@ +//https://leetcode-cn.com/problems/climbing-stairs/description/ +package week1 + +import ( + "github.com/stretchr/testify/assert" + "math" + "testing" +) + +func TestDP(t *testing.T) { + t.Log("Climbing Stairs: DP Fibonacci") + //题目描述,给定n是一个正整数,即n从1开始 + //n: 1, 2, 3, 4, 5... + //f: 1, 2, 3, 5, 8... + //区别Fibonacci, 爬楼梯n从1开始,斐波那次n从0开始;爬楼梯题目的 i和n 分别要比斐波那契 多1 + assert.Equal(t, 2, climbStairs(2)) + assert.Equal(t, 5, climbStairs(4)) + assert.Equal(t, 5, resOriginal(4)) + assert.Equal(t, 5, resMemoOut(4)) + assert.Equal(t, 5, resMemoIn(4)) + assert.Equal(t, 5, dpOriginal(4)) + assert.Equal(t, 5, dpShrink(4)) + assert.Equal(t, 5, formula(4)) + assert.Equal(t, 5, matrix(4)) +} + +func climbStairs(n int) int { + return matrix(n) +} + +//1. original recursion +//Not AC, TimeOut +func resOriginal(n int) int { + if n <= 2 { //区别Fibonacci + return n + } + return resOriginal(n-1) + resOriginal(n-2) +} + +//2.1. recursion + memory +var hash = make(map[int]int) + +func resMemoOut(n int) int { + if n <= 2 { + return n + } + if _, ok := hash[n]; !ok { + hash[n] = resMemoOut(n-1) + resMemoOut(n-2) + } + return hash[n] +} + +//2.2. recursion + memory + drill down the memory +func resMemoIn(n int) int { + hash := make(map[int]int) + return resMemo(n, hash) +} + +func resMemo(n int, hash map[int]int) int { + if n <= 2 { + hash[n] = n + return hash[n] + } + if _, ok := hash[n]; !ok { + hash[n] = resMemo(n-1, hash) + resMemo(n-2, hash) + } + return hash[n] +} + +//3. dp original +func dpOriginal(n int) int { + if n <= 2 { + return n + } + dp := make([]int, n+1) + dp[1], dp[2] = 1, 2 //区别Fibonacci + for i := 3; i <= n; i++ { //区别Fibonacci + dp[i] = dp[i-1] + dp[i-2] + } + return dp[n] +} + +//4. dp + shrink space +func dpShrink(n int) int { + if n <= 2 { + return n + } + low, high := 1, 2 + for i := 3; i <= n; i++ { + high, low = high+low, high + } + return high +} + +//5. formula +func formula(n int) int { + goldenRation := (1 + math.Sqrt(5)) / 2 + res := math.Pow(goldenRation, float64(n+1)) / math.Sqrt(5) //区别 Fibonacci + return int(math.Round(res)) +} + +//6. matrix +func matrix(n int) int { + if n <= 2 { + return n + } + + A := [2][2]int{ + {1, 1}, + {1, 0}, + } + + A = pow(A, n) //区别Fibonacci + return A[0][0] +} + +func pow(A [2][2]int, n int) [2][2]int { + if n <= 1 { + return A + } //递归终止条件,n<=1;与Power n==0 不同 + + R := pow(A, n/2) + + if n&1 == 1 { + return mul(A, mul(R, R)) + } + return mul(R, R) +} + +func mul(A, B [2][2]int) [2][2]int { + x := A[0][0]*B[0][0] + A[0][1]*B[1][0] + y := A[0][0]*B[0][1] + A[0][1]*B[1][1] + z := A[1][0]*B[0][0] + A[1][1]*B[0][1] + w := A[1][0]*B[0][1] + A[1][1]*B[1][1] + + A[0][0] = x + A[0][1] = y + A[1][0] = z + A[1][1] = w + + return A +} From 3a9ee284d1bd7f095e016869f435bc9a17353fe6 Mon Sep 17 00:00:00 2001 From: pangshusong Date: Mon, 10 Feb 2020 19:27:57 +0800 Subject: [PATCH 0029/1268] [dsa] array - three sum - shrink --- .../G20200343030373/LeetCode_15_373_test.go | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 Week_01/G20200343030373/LeetCode_15_373_test.go diff --git a/Week_01/G20200343030373/LeetCode_15_373_test.go b/Week_01/G20200343030373/LeetCode_15_373_test.go new file mode 100644 index 00000000..ea94cb68 --- /dev/null +++ b/Week_01/G20200343030373/LeetCode_15_373_test.go @@ -0,0 +1,80 @@ +//https://leetcode-cn.com/problems/3sum/ +package week1 + +import ( + "github.com/stretchr/testify/assert" + "sort" + "testing" +) + +func TestThreeSum(t *testing.T) { + t.Log("Three Sum") + + nums1 := []int{-1, 0, 1, 2, -1, -4} + except0 := [][]int{ + {-1, -1, 2}, + {-1, 0, 1}, + } + assert.Equal(t, except0, threeSum(nums1)) + + nums2 := []int{0, 0, 0, 0} + except2 := [][]int{{0, 0, 0}} + assert.Equal(t, except2, threeSum(nums2)) + + nums3 := []int{-2, 0, 1, 1, 2} + except3 := [][]int{ + {-2, 0, 2}, + {-2, 1, 1}, + } + assert.Equal(t, except3, threeSum(nums3)) +} + +func threeSum(nums []int) [][]int { + var ret [][]int + if len(nums) < 3 { + return ret + } + + sort.Ints(nums) //需要排序,容易忘记 + + //注意i的取值,肯定会留出两个值给l和r + for i := 0; i <= len(nums)-3; i++ { + l, r := i+1, len(nums)-1 + + //i并不是跟后面的去重,而是跟前面的去重,已经处理过相同的i + //-1, -1, 0, 1 + if i-1 >= 0 && nums[i] == nums[i-1] { //与后面r+1<=len(nums)-1相同的意思,都是要在数组边界内 + continue + } + + if nums[i] > 0 || nums[i]+nums[l] > 0 { + break + } + + //移动l,r去重,肯定会剩下至少三个元素分别是i,l,r去求和,所以退出条件是l i && nums[l] == nums[l-1] { //l必须大于i + l++ + continue //每移动一次,就要去判断l与r + } + if r+1 <= len(nums)-1 && nums[r] == nums[r+1] { //在数组边界内 + r-- + continue + } + + if nums[i]+nums[l]+nums[r] > 0 { + r-- + } else if nums[i]+nums[l]+nums[r] < 0 { + l++ + } else { + ret = append(ret, []int{nums[i], nums[l], nums[r]}) + r-- + l++ + } + } + } + + return ret +} From 0c8868d41690c7e77e34e64bcb06136e469b218c Mon Sep 17 00:00:00 2001 From: pangshusong Date: Mon, 10 Feb 2020 19:36:32 +0800 Subject: [PATCH 0030/1268] [dsa] two sum - map --- .../G20200343030373/LeetCode_15_373_test.go | 4 +-- .../G20200343030373/LeetCode_1_373_test.go | 36 +++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 Week_01/G20200343030373/LeetCode_1_373_test.go diff --git a/Week_01/G20200343030373/LeetCode_15_373_test.go b/Week_01/G20200343030373/LeetCode_15_373_test.go index ea94cb68..e77f5e5d 100644 --- a/Week_01/G20200343030373/LeetCode_15_373_test.go +++ b/Week_01/G20200343030373/LeetCode_15_373_test.go @@ -11,11 +11,11 @@ func TestThreeSum(t *testing.T) { t.Log("Three Sum") nums1 := []int{-1, 0, 1, 2, -1, -4} - except0 := [][]int{ + except1 := [][]int{ {-1, -1, 2}, {-1, 0, 1}, } - assert.Equal(t, except0, threeSum(nums1)) + assert.Equal(t, except1, threeSum(nums1)) nums2 := []int{0, 0, 0, 0} except2 := [][]int{{0, 0, 0}} diff --git a/Week_01/G20200343030373/LeetCode_1_373_test.go b/Week_01/G20200343030373/LeetCode_1_373_test.go new file mode 100644 index 00000000..7749e81a --- /dev/null +++ b/Week_01/G20200343030373/LeetCode_1_373_test.go @@ -0,0 +1,36 @@ +//https://leetcode-cn.com/problems/two-sum/ +package week1 + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestTwoSum(t *testing.T) { + t.Log("Two Sum") + + target := 9 + nums := []int{2, 7, 11, 15} + expect := []int{0, 1} + assert.Equal(t, expect, twoSum(nums, target)) + + target1 := 6 + nums1 := []int{3, 3} + expect1 := []int{0, 1} + assert.Equal(t, expect1, twoSum(nums1, target1)) +} + +func twoSum(nums []int, target int) []int { + myMap := make(map[int]int) + for index, value := range nums { + //TwoSum: 将'target-当前值'作为key存入Map,当前值的索引作为value存入Map; + //遍历后面的元素,如果'后面的元素值'作为Map的key已经存在,则找到,返回索引 + //Special: '后面的元素值'存在于Map的既有索引值,例如3+3=6,不应该覆盖 + if vIndexOld, ok := myMap[value]; !ok { + myMap[target-value] = index + } else { + return []int{vIndexOld, index} + } + } + return nil +} From 0918e03fc613a6fb1820d2822a56c56da2d2526f Mon Sep 17 00:00:00 2001 From: zzzzz1797 <979652917@qq.com> Date: Mon, 10 Feb 2020 19:58:23 +0800 Subject: [PATCH 0031/1268] =?UTF-8?q?=E6=B7=BB=E5=8A=A0gitignore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..9f11b755 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea/ From eb6e9e9031c843cc2fceac58ff92e0a3bafc6f1d Mon Sep 17 00:00:00 2001 From: xiebor <904558398@qq.com> Date: Mon, 10 Feb 2020 20:26:33 +0800 Subject: [PATCH 0032/1268] commit 3 --- Week_00/G20200343030437/readme.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 Week_00/G20200343030437/readme.txt diff --git a/Week_00/G20200343030437/readme.txt b/Week_00/G20200343030437/readme.txt new file mode 100644 index 00000000..70bbef18 --- /dev/null +++ b/Week_00/G20200343030437/readme.txt @@ -0,0 +1 @@ +我是第一次 From cf5d441b5738524361509b502ede25e69a060dbc Mon Sep 17 00:00:00 2001 From: xiebor <37875140+xiebor@users.noreply.github.com> Date: Mon, 10 Feb 2020 20:27:47 +0800 Subject: [PATCH 0033/1268] Delete readme.txt --- readme.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 readme.txt diff --git a/readme.txt b/readme.txt deleted file mode 100644 index 70bbef18..00000000 --- a/readme.txt +++ /dev/null @@ -1 +0,0 @@ -我是第一次 From b41cb2ea2f0e588df93739177699654120edb768 Mon Sep 17 00:00:00 2001 From: fpanda Date: Mon, 10 Feb 2020 20:40:32 +0800 Subject: [PATCH 0034/1268] Update the xuehao in the filename --- .../{LeetCode_283_G20200343030449.cpp => LeetCode_283_449.cpp} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Week_01/G20200343030449/{LeetCode_283_G20200343030449.cpp => LeetCode_283_449.cpp} (100%) diff --git a/Week_01/G20200343030449/LeetCode_283_G20200343030449.cpp b/Week_01/G20200343030449/LeetCode_283_449.cpp similarity index 100% rename from Week_01/G20200343030449/LeetCode_283_G20200343030449.cpp rename to Week_01/G20200343030449/LeetCode_283_449.cpp From 0b5ce9639f035c136201ef81f46b73b4fb03fd91 Mon Sep 17 00:00:00 2001 From: Huangzikun <381560728@qq.com> Date: Mon, 10 Feb 2020 21:29:18 +0800 Subject: [PATCH 0035/1268] add LeetCode_1_395 --- Week_00/G20200343030395/LeetCode_1_395.java | 31 +++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Week_00/G20200343030395/LeetCode_1_395.java diff --git a/Week_00/G20200343030395/LeetCode_1_395.java b/Week_00/G20200343030395/LeetCode_1_395.java new file mode 100644 index 00000000..524b02c7 --- /dev/null +++ b/Week_00/G20200343030395/LeetCode_1_395.java @@ -0,0 +1,31 @@ +public class LeetCode_1_395 { + public static void main(String[] args) { + int[] nums = new int[]{0,0,0,0,1,1,2,3}; + Solution s = new Solution(); + int num = s.removeDuplicates(nums); + System.out.println(num); + } +} + +class Solution { + public int removeDuplicates(int[] nums) { + if(nums.length == 1) { + return 1; + } + + int i = 0; + for(int j=1; j Date: Mon, 10 Feb 2020 21:41:17 +0800 Subject: [PATCH 0036/1268] [dsa] linkedlist - reverse linked list --- .../G20200343030373/LeetCode_206_373_test.go | 148 ++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 Week_01/G20200343030373/LeetCode_206_373_test.go diff --git a/Week_01/G20200343030373/LeetCode_206_373_test.go b/Week_01/G20200343030373/LeetCode_206_373_test.go new file mode 100644 index 00000000..864289de --- /dev/null +++ b/Week_01/G20200343030373/LeetCode_206_373_test.go @@ -0,0 +1,148 @@ +//https://leetcode-cn.com/problems/reverse-linked-list/ +package week1 + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestReverseList(t *testing.T) { + t.Log("Reverse Linked List") + head := &ListNode{ + Val: 1, + Next: &ListNode{ + Val: 2, + Next: &ListNode{ + Val: 3, + Next: &ListNode{ + Val: 4, + Next: &ListNode{ + Val: 5, + Next: nil, + }, + }, + }, + }, + } + + res1 := reverseListInGoGrammar(head) + assert.Equal(t, []int{5, 4, 3, 2, 1}, traversalList(res1)) + + res2 := reverseListInGeneral(res1) + assert.Equal(t, []int{1, 2, 3, 4, 5}, traversalList(res2)) + + res3 := reverseListRecursively1(res2) + assert.Equal(t, []int{5, 4, 3, 2, 1}, traversalList(res3)) + + res4 := reverseListRecursively2(res3) + assert.Equal(t, []int{1, 2, 3, 4, 5}, traversalList(res4)) + + res5 := reverseListRecursively3(res4) + assert.Equal(t, []int{5, 4, 3, 2, 1}, traversalList(res5)) +} + +type ListNode struct { + Val int + Next *ListNode +} + +func traversalList(head *ListNode) []int { + var res []int + for head != nil { + res = append(res, head.Val) + head = head.Next + } + return res +} + +func reverseList(head *ListNode) *ListNode { + //answer1 - best iteration + return reverseListInGoGrammar(head) + + //answer2 - best recursion + //return reverseListRecursively2(head) +} + +//iteratively reverse linked list (迭代),循环5次, O(n) +func reverseListInGoGrammar(head *ListNode) *ListNode { + var pre *ListNode = nil + for head != nil { + //将当前节点的next指向上一个节点 + //则上一个节点更新成当前节点 + //再将当前节点更新为下一个节点 + head.Next, pre, head = pre, head, head.Next + } + return pre +} + +func reverseListInGeneral(head *ListNode) *ListNode { + var pre *ListNode = nil + for head != nil { + tempNext := head.Next //先存储下一个节点,否则会被覆盖 + head.Next = pre //将当前节点的next指向上一个节点 + pre = head //则上一个节点更新成当前节点 + head = tempNext //再将当前节点更新为下一个节点,进行下一次循环 + } + return pre +} + +//Recursively reverse linked list (递归),递归5次, O(n) +//尾递归? +//在当前层处理反转,然后再下沉 - 其实就是迭代 +func reverseListRecursively1(head *ListNode) *ListNode { + var pre *ListNode = nil + return reverse1(pre, head) +} + +func reverse1(pre, head *ListNode) *ListNode { + //terminator + //如果当前节点为空,要么没有元素,要么循环完毕;循环完毕,则返回前驱节点pre作为结果 + if head == nil { + return pre + } + //precess - 在当前level的处理! + tempNext := head.Next //如果head不是nil,则head.next不为空,暂存 + head.Next = pre //将当前节点head的Next指向前驱节点pre - 递归的操作 + //drill down + //clear - no + + //递归终止条件时把pre返回,一层一层的将这个pre返回即可 + return reverse1(head, tempNext) //进入下一次递归、反转 +} + +//递归-method1: 将当前节点的Next指向前一节点 +//当前层什么也不干,就下沉:递;沉到底之后再返回,并反转:归 +//递归的理解:后面的都处理完了,就剩本层了 +func reverseListRecursively2(head *ListNode) *ListNode { + return reverse2(nil, head) +} + +func reverse2(pre, head *ListNode) *ListNode { + //terminator + if head == nil { + return pre + } + //process - no + //drill down + cur := reverse2(head, head.Next) + head.Next = pre + return cur +} + +//递归-method2:将下一节点的Next指向当前节点 +//其实method1就挺好,符合思维:每一步只做反转 +//本方法需要每次都把当前节点指向nil,多了n次操作,但好在就一个方法 +func reverseListRecursively3(head *ListNode) *ListNode { + //terminator + if head == nil || head.Next == nil { + return head + } + //递归下去,当到最后一个,他的Next已经是nil,则将最后一个返回 + cur := reverseListRecursively3(head.Next) + //归来上一层(本层),在本层的操作是: + //1. 将下一个节点的Next指向当前节点 + //2。为防止循环,将当前节点的Next指向nil + head.Next.Next, head.Next = head, nil + //返回递归传递的最后一个节点 + return cur +} From a51c76b2859ea53505d4a70c9dbc37c1652ce734 Mon Sep 17 00:00:00 2001 From: pangshusong Date: Mon, 10 Feb 2020 22:13:05 +0800 Subject: [PATCH 0037/1268] add directory because go package based on directory --- .../LeetCode_11_373_test.go | 2 +- .../LeetCode_15_373_test.go | 2 +- .../LeetCode_1_373_test.go | 2 +- .../LeetCode_206_373_test.go | 2 +- .../LeetCode_24_373/LeetCode_24_373_test.go | 68 +++++++++++++++++++ .../LeetCode_283_373_test.go | 2 +- .../LeetCode_70_373_test.go | 2 +- 7 files changed, 74 insertions(+), 6 deletions(-) rename Week_01/G20200343030373/{ => LeetCode_11_373}/LeetCode_11_373_test.go (98%) rename Week_01/G20200343030373/{ => LeetCode_15_373}/LeetCode_15_373_test.go (98%) rename Week_01/G20200343030373/{ => LeetCode_1_373}/LeetCode_1_373_test.go (97%) rename Week_01/G20200343030373/{ => LeetCode_206_373}/LeetCode_206_373_test.go (99%) create mode 100644 Week_01/G20200343030373/LeetCode_24_373/LeetCode_24_373_test.go rename Week_01/G20200343030373/{ => LeetCode_283_373}/LeetCode_283_373_test.go (98%) rename Week_01/G20200343030373/{ => LeetCode_70_373}/LeetCode_70_373_test.go (99%) diff --git a/Week_01/G20200343030373/LeetCode_11_373_test.go b/Week_01/G20200343030373/LeetCode_11_373/LeetCode_11_373_test.go similarity index 98% rename from Week_01/G20200343030373/LeetCode_11_373_test.go rename to Week_01/G20200343030373/LeetCode_11_373/LeetCode_11_373_test.go index 9e5c72c8..215aec06 100644 --- a/Week_01/G20200343030373/LeetCode_11_373_test.go +++ b/Week_01/G20200343030373/LeetCode_11_373/LeetCode_11_373_test.go @@ -1,5 +1,5 @@ //https://leetcode-cn.com/problems/container-with-most-water/ -package week1 +package LeetCode_11_373 import ( "github.com/stretchr/testify/assert" diff --git a/Week_01/G20200343030373/LeetCode_15_373_test.go b/Week_01/G20200343030373/LeetCode_15_373/LeetCode_15_373_test.go similarity index 98% rename from Week_01/G20200343030373/LeetCode_15_373_test.go rename to Week_01/G20200343030373/LeetCode_15_373/LeetCode_15_373_test.go index e77f5e5d..51d0d1e3 100644 --- a/Week_01/G20200343030373/LeetCode_15_373_test.go +++ b/Week_01/G20200343030373/LeetCode_15_373/LeetCode_15_373_test.go @@ -1,5 +1,5 @@ //https://leetcode-cn.com/problems/3sum/ -package week1 +package LeetCode_15_373 import ( "github.com/stretchr/testify/assert" diff --git a/Week_01/G20200343030373/LeetCode_1_373_test.go b/Week_01/G20200343030373/LeetCode_1_373/LeetCode_1_373_test.go similarity index 97% rename from Week_01/G20200343030373/LeetCode_1_373_test.go rename to Week_01/G20200343030373/LeetCode_1_373/LeetCode_1_373_test.go index 7749e81a..2d125edf 100644 --- a/Week_01/G20200343030373/LeetCode_1_373_test.go +++ b/Week_01/G20200343030373/LeetCode_1_373/LeetCode_1_373_test.go @@ -1,5 +1,5 @@ //https://leetcode-cn.com/problems/two-sum/ -package week1 +package LeetCode_1_373 import ( "github.com/stretchr/testify/assert" diff --git a/Week_01/G20200343030373/LeetCode_206_373_test.go b/Week_01/G20200343030373/LeetCode_206_373/LeetCode_206_373_test.go similarity index 99% rename from Week_01/G20200343030373/LeetCode_206_373_test.go rename to Week_01/G20200343030373/LeetCode_206_373/LeetCode_206_373_test.go index 864289de..ef9f85bd 100644 --- a/Week_01/G20200343030373/LeetCode_206_373_test.go +++ b/Week_01/G20200343030373/LeetCode_206_373/LeetCode_206_373_test.go @@ -1,5 +1,5 @@ //https://leetcode-cn.com/problems/reverse-linked-list/ -package week1 +package LeetCode_206_373 import ( "github.com/stretchr/testify/assert" diff --git a/Week_01/G20200343030373/LeetCode_24_373/LeetCode_24_373_test.go b/Week_01/G20200343030373/LeetCode_24_373/LeetCode_24_373_test.go new file mode 100644 index 00000000..69a0858b --- /dev/null +++ b/Week_01/G20200343030373/LeetCode_24_373/LeetCode_24_373_test.go @@ -0,0 +1,68 @@ +//https://leetcode-cn.com/problems/swap-nodes-in-pairs/ +package LeetCode_24_373 + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestSwapNodesInPairs(t *testing.T) { + t.Log("Swap Nodes in Pairs") + + head := &ListNode{ + Val: 1, + Next: &ListNode{ + Val: 2, + Next: &ListNode{ + Val: 3, + Next: &ListNode{ + Val: 4, + Next: &ListNode{ + Val: 5, + Next: nil, + }, + }, + }, + }, + } + + res1 := swapPairs(head) + assert.Equal(t, []int{2, 1, 4, 3, 5}, traversalList(res1)) + + res2 := swapPairsRecursively(res1) + assert.Equal(t, []int{1, 2, 3, 4, 5}, traversalList(res2)) +} + +type ListNode struct { + Val int + Next *ListNode +} + +func traversalList(head *ListNode) []int { + var res []int + for head != nil { + res = append(res, head.Val) + head = head.Next + } + return res +} + +func swapPairs(head *ListNode) *ListNode { + prev := &ListNode{0, head} //构造指向head的前置指针 + hint := prev //因为prev指针需要移动,留存一个备份 + for prev.Next != nil && prev.Next.Next != nil { + //前三个都是调换的步骤,第四个是移动pre进行一下调换 + prev.Next.Next.Next, prev.Next.Next, prev.Next, prev = prev.Next, prev.Next.Next.Next, prev.Next.Next, prev.Next + } + return hint.Next //注意不是返回hint +} + +func swapPairsRecursively(head *ListNode) *ListNode { + if head == nil || head.Next == nil { + return head + } + + hint := head.Next + head.Next.Next, head.Next = head, swapPairsRecursively(head.Next.Next) + return hint +} diff --git a/Week_01/G20200343030373/LeetCode_283_373_test.go b/Week_01/G20200343030373/LeetCode_283_373/LeetCode_283_373_test.go similarity index 98% rename from Week_01/G20200343030373/LeetCode_283_373_test.go rename to Week_01/G20200343030373/LeetCode_283_373/LeetCode_283_373_test.go index 8be23182..39ef0164 100644 --- a/Week_01/G20200343030373/LeetCode_283_373_test.go +++ b/Week_01/G20200343030373/LeetCode_283_373/LeetCode_283_373_test.go @@ -1,5 +1,5 @@ //https://leetcode-cn.com/problems/move-zeroes/ -package week1 +package LeetCode_283_373 import ( "github.com/stretchr/testify/assert" diff --git a/Week_01/G20200343030373/LeetCode_70_373_test.go b/Week_01/G20200343030373/LeetCode_70_373/LeetCode_70_373_test.go similarity index 99% rename from Week_01/G20200343030373/LeetCode_70_373_test.go rename to Week_01/G20200343030373/LeetCode_70_373/LeetCode_70_373_test.go index 381528b7..9b8a9029 100644 --- a/Week_01/G20200343030373/LeetCode_70_373_test.go +++ b/Week_01/G20200343030373/LeetCode_70_373/LeetCode_70_373_test.go @@ -1,5 +1,5 @@ //https://leetcode-cn.com/problems/climbing-stairs/description/ -package week1 +package LeetCode_70_373 import ( "github.com/stretchr/testify/assert" From 53247afac3d7bc6efd5187a21808ab15eba3981a Mon Sep 17 00:00:00 2001 From: pangshusong Date: Mon, 10 Feb 2020 22:23:25 +0800 Subject: [PATCH 0038/1268] [dsa] linkedlist - detect cycle --- .../LeetCode_11_373/LeetCode_11_373_test.go | 2 +- .../LeetCode_141_373/LeetCode_141_373_test.go | 110 ++++++++++++++++++ .../LeetCode_15_373/LeetCode_15_373_test.go | 2 +- .../LeetCode_1_373/LeetCode_1_373_test.go | 2 +- .../LeetCode_206_373/LeetCode_206_373_test.go | 2 +- .../LeetCode_24_373/LeetCode_24_373_test.go | 2 +- .../LeetCode_283_373/LeetCode_283_373_test.go | 2 +- .../LeetCode_70_373/LeetCode_70_373_test.go | 2 +- 8 files changed, 117 insertions(+), 7 deletions(-) create mode 100644 Week_01/G20200343030373/LeetCode_141_373/LeetCode_141_373_test.go diff --git a/Week_01/G20200343030373/LeetCode_11_373/LeetCode_11_373_test.go b/Week_01/G20200343030373/LeetCode_11_373/LeetCode_11_373_test.go index 215aec06..a29e1f37 100644 --- a/Week_01/G20200343030373/LeetCode_11_373/LeetCode_11_373_test.go +++ b/Week_01/G20200343030373/LeetCode_11_373/LeetCode_11_373_test.go @@ -1,5 +1,5 @@ //https://leetcode-cn.com/problems/container-with-most-water/ -package LeetCode_11_373 +package container_with_most_water_t_test import ( "github.com/stretchr/testify/assert" diff --git a/Week_01/G20200343030373/LeetCode_141_373/LeetCode_141_373_test.go b/Week_01/G20200343030373/LeetCode_141_373/LeetCode_141_373_test.go new file mode 100644 index 00000000..1154ced0 --- /dev/null +++ b/Week_01/G20200343030373/LeetCode_141_373/LeetCode_141_373_test.go @@ -0,0 +1,110 @@ +//https://leetcode-cn.com/problems/linked-list-cycle/ +package linkedlist_cycle_test + +import ( + "github.com/stretchr/testify/assert" + "testing" + "time" +) + +func TestLinkedListCycle(t *testing.T) { + t.Log("Linked List Cycle") + + head := new(ListNode) + head.Val = 1 + ln2 := new(ListNode) + ln2.Val = 2 + ln3 := new(ListNode) + ln3.Val = 3 + ln4 := new(ListNode) + ln4.Val = 4 + head.Next = ln2 + ln2.Next = ln3 + ln3.Next = ln4 + + headC := new(ListNode) + headC.Val = 1 + cln2 := new(ListNode) + cln2.Val = 2 + cln3 := new(ListNode) + cln3.Val = 3 + cln4 := new(ListNode) + cln4.Val = 4 + headC.Next = cln2 + cln2.Next = cln3 + cln3.Next = cln4 + cln4.Next = cln2 //Cycle + + assert.Equal(t, false, hasCycle(head)) + assert.Equal(t, false, hasCycleChangeVal(head)) + assert.Equal(t, false, hasCycleFindNil(head)) + assert.Equal(t, false, hasCycleSetUnique(head)) + assert.Equal(t, true, hasCycle(headC)) + assert.Equal(t, true, hasCycleChangeVal(headC)) + assert.Equal(t, true, hasCycleFindNil(headC)) + assert.Equal(t, true, hasCycleSetUnique(headC)) +} + +type ListNode struct { + Val int + Next *ListNode +} + +//TC:O(n), SC:O(1) +func hasCycle(head *ListNode) bool { + fast, slow := head, head + for fast != nil && slow != nil && fast.Next != nil { + fast = fast.Next.Next + slow = slow.Next + if fast == slow { + return true + } + } + return false +} + +//Not Good, 10086! head changed! +func hasCycleChangeVal(head *ListNode) bool { + for head != nil { + if head.Val == 10086 { + return true + } + + head.Val = 10086 + head = head.Next + } + return false +} + +//Not Good, infinite! head changed! +func hasCycleFindNil(head *ListNode) bool { + timeFlag := false + timer := time.NewTimer(1 * time.Second) + go func() { + <-timer.C + timeFlag = true + }() + + for head != nil { + if timeFlag { + return true + } + + head = head.Next + } + return false +} + +//Not Good, Need Set Store, TC:O(n), SC: O(n) +func hasCycleSetUnique(head *ListNode) bool { + hash := make(map[*ListNode]int) + for head != nil { + if _, ok := hash[head]; ok { + return true + } + + hash[head] = head.Val + head = head.Next + } + return false +} diff --git a/Week_01/G20200343030373/LeetCode_15_373/LeetCode_15_373_test.go b/Week_01/G20200343030373/LeetCode_15_373/LeetCode_15_373_test.go index 51d0d1e3..74eb5df4 100644 --- a/Week_01/G20200343030373/LeetCode_15_373/LeetCode_15_373_test.go +++ b/Week_01/G20200343030373/LeetCode_15_373/LeetCode_15_373_test.go @@ -1,5 +1,5 @@ //https://leetcode-cn.com/problems/3sum/ -package LeetCode_15_373 +package three_sum_test import ( "github.com/stretchr/testify/assert" diff --git a/Week_01/G20200343030373/LeetCode_1_373/LeetCode_1_373_test.go b/Week_01/G20200343030373/LeetCode_1_373/LeetCode_1_373_test.go index 2d125edf..968bf063 100644 --- a/Week_01/G20200343030373/LeetCode_1_373/LeetCode_1_373_test.go +++ b/Week_01/G20200343030373/LeetCode_1_373/LeetCode_1_373_test.go @@ -1,5 +1,5 @@ //https://leetcode-cn.com/problems/two-sum/ -package LeetCode_1_373 +package two_sum_test import ( "github.com/stretchr/testify/assert" diff --git a/Week_01/G20200343030373/LeetCode_206_373/LeetCode_206_373_test.go b/Week_01/G20200343030373/LeetCode_206_373/LeetCode_206_373_test.go index ef9f85bd..9229ad06 100644 --- a/Week_01/G20200343030373/LeetCode_206_373/LeetCode_206_373_test.go +++ b/Week_01/G20200343030373/LeetCode_206_373/LeetCode_206_373_test.go @@ -1,5 +1,5 @@ //https://leetcode-cn.com/problems/reverse-linked-list/ -package LeetCode_206_373 +package reverse_linkedlist_test import ( "github.com/stretchr/testify/assert" diff --git a/Week_01/G20200343030373/LeetCode_24_373/LeetCode_24_373_test.go b/Week_01/G20200343030373/LeetCode_24_373/LeetCode_24_373_test.go index 69a0858b..3f656bad 100644 --- a/Week_01/G20200343030373/LeetCode_24_373/LeetCode_24_373_test.go +++ b/Week_01/G20200343030373/LeetCode_24_373/LeetCode_24_373_test.go @@ -1,5 +1,5 @@ //https://leetcode-cn.com/problems/swap-nodes-in-pairs/ -package LeetCode_24_373 +package swap_nodes_in_pairs_test import ( "github.com/stretchr/testify/assert" diff --git a/Week_01/G20200343030373/LeetCode_283_373/LeetCode_283_373_test.go b/Week_01/G20200343030373/LeetCode_283_373/LeetCode_283_373_test.go index 39ef0164..65bbd056 100644 --- a/Week_01/G20200343030373/LeetCode_283_373/LeetCode_283_373_test.go +++ b/Week_01/G20200343030373/LeetCode_283_373/LeetCode_283_373_test.go @@ -1,5 +1,5 @@ //https://leetcode-cn.com/problems/move-zeroes/ -package LeetCode_283_373 +package move_zeroes_test import ( "github.com/stretchr/testify/assert" diff --git a/Week_01/G20200343030373/LeetCode_70_373/LeetCode_70_373_test.go b/Week_01/G20200343030373/LeetCode_70_373/LeetCode_70_373_test.go index 9b8a9029..9d96fce5 100644 --- a/Week_01/G20200343030373/LeetCode_70_373/LeetCode_70_373_test.go +++ b/Week_01/G20200343030373/LeetCode_70_373/LeetCode_70_373_test.go @@ -1,5 +1,5 @@ //https://leetcode-cn.com/problems/climbing-stairs/description/ -package LeetCode_70_373 +package climb_stair_test import ( "github.com/stretchr/testify/assert" From 897faf06ffa9ce19938ed56278bab00d2d508faa Mon Sep 17 00:00:00 2001 From: pangshusong Date: Mon, 10 Feb 2020 22:30:12 +0800 Subject: [PATCH 0039/1268] [dsa] linkedlist - cycle detect begin --- .../LeetCode_142_373/LeetCode_142_373_test.go | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 Week_01/G20200343030373/LeetCode_142_373/LeetCode_142_373_test.go diff --git a/Week_01/G20200343030373/LeetCode_142_373/LeetCode_142_373_test.go b/Week_01/G20200343030373/LeetCode_142_373/LeetCode_142_373_test.go new file mode 100644 index 00000000..5c5f8218 --- /dev/null +++ b/Week_01/G20200343030373/LeetCode_142_373/LeetCode_142_373_test.go @@ -0,0 +1,80 @@ +//https://leetcode-cn.com/problems/linked-list-cycle-ii/ +package linkedlist_cycle_detect_test + +import ( + "fmt" + "github.com/stretchr/testify/assert" + "testing" +) + +func TestLinkedListCycleBegin(t *testing.T) { + fmt.Println("Linked List Cycle Begin") + + head := new(ListNode) + head.Val = 1 + ln2 := new(ListNode) + ln2.Val = 2 + ln3 := new(ListNode) + ln3.Val = 3 + ln4 := new(ListNode) + ln4.Val = 4 + head.Next = ln2 + ln2.Next = ln3 + ln3.Next = ln4 + + headC := new(ListNode) + headC.Val = 1 + cln2 := new(ListNode) + cln2.Val = 2 + cln3 := new(ListNode) + cln3.Val = 3 + cln4 := new(ListNode) + cln4.Val = 4 + headC.Next = cln2 + cln2.Next = cln3 + cln3.Next = cln4 + cln4.Next = headC //Cycle + + assert.Equal(t, (*ListNode)(nil), detectCycle(head)) //注意nil的表示 + assert.Equal(t, (*ListNode)(nil), detectCycleHash(head)) + assert.Equal(t, headC, detectCycleHash(headC)) + assert.Equal(t, headC, detectCycleHash(headC)) +} + +type ListNode struct { + Val int + Next *ListNode +} + +func detectCycle(head *ListNode) *ListNode { + fast, slow := head, head + + for fast != nil && slow != nil && fast.Next != nil { + fast, slow = fast.Next.Next, slow.Next + //当快指针和慢指针相遇了 + if fast == slow { + //head节点开始走,fast指针改成每次走一步,相遇的时候 就是环形的起点 + for head != fast { + fast, head = fast.Next, head.Next + } + return head + } + } + return nil +} + +//Not Good, Need Extra Space +func detectCycleHash(head *ListNode) *ListNode { + hash := make(map[*ListNode]int) + + for head != nil { + //如果遇到同一个地址,就是环入口 + if _, ok := hash[head]; ok { + return head + } + hash[head] = head.Val + head = head.Next + } + + return nil +} From 82fd33d77c456e82353cb04a54b2934bc5db4ba7 Mon Sep 17 00:00:00 2001 From: pangshusong Date: Mon, 10 Feb 2020 22:37:14 +0800 Subject: [PATCH 0040/1268] [dsa] linkedlist - reverse in k group --- .../LeetCode_25_373/LeetCode_25_373_test.go | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 Week_01/G20200343030373/LeetCode_25_373/LeetCode_25_373_test.go diff --git a/Week_01/G20200343030373/LeetCode_25_373/LeetCode_25_373_test.go b/Week_01/G20200343030373/LeetCode_25_373/LeetCode_25_373_test.go new file mode 100644 index 00000000..6af987ae --- /dev/null +++ b/Week_01/G20200343030373/LeetCode_25_373/LeetCode_25_373_test.go @@ -0,0 +1,87 @@ +//https://leetcode-cn.com/problems/reverse-nodes-in-k-group/ +package reverse_nodes_in_k_group_test + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestReverseNodesInKGroup(t *testing.T) { + t.Log("Reverse Nodes in K-Group") + + head := &ListNode{ + Val: 1, + Next: &ListNode{ + Val: 2, + Next: &ListNode{ + Val: 3, + Next: &ListNode{ + Val: 4, + Next: &ListNode{ + Val: 5, + Next: nil, + }, + }, + }, + }, + } + + assert.Equal(t, []int{2, 1, 4, 3, 5}, traversalList(reverseKGroup(head, 2))) +} + +type ListNode struct { + Val int + Next *ListNode +} + +func traversalList(head *ListNode) []int { + var res []int + for head != nil { + res = append(res, head.Val) + head = head.Next + } + return res +} + +//TC: O(n*k), SC:O(1) +//优化:无需k次循环确定是否结束。可边翻转边判断,如果提前结束,再做一次翻转。只有最后一部分会多做一次翻转,但少nk次循环。 +func reverseKGroup(head *ListNode, k int) *ListNode { + if k <= 1 { //注意不要遗漏边界条件 + return head + } + + pre := &ListNode{0, head} //因为dummy指向head,head指针不能有变化,所以需要一个pre + hint := pre + for pre.Next != nil { + start, end := pre.Next, pre.Next + + for i := 1; i < k; i++ { //注意end已经有一个了,从1开始,k个,所以要小于k + end = end.Next + if end == nil { + break + } + } + if end == nil { //剩余的不够K个,结束 + break + } + + next := end.Next + + //翻转 start 与 end 区间,end.Next结束,一个完整链表区间 + end.Next = nil + pre.Next = reverse(start) //已翻转部分与前驱连接 + start.Next = next //未翻转部分与后区连接 + + //重置变量 - 注意不能是pre.Next = next,会遗漏数据 + pre = start + } + return hint.Next +} + +func reverse(head *ListNode) *ListNode { + var pre *ListNode = nil + for head != nil { + head.Next, head, pre = pre, head.Next, head + } + return pre +} From 1812c2ffdabbfa1e2adaec954f415ffa890bb0da Mon Sep 17 00:00:00 2001 From: xiebor <904558398@qq.com> Date: Mon, 10 Feb 2020 23:04:49 +0800 Subject: [PATCH 0041/1268] =?UTF-8?q?=E3=80=90283=E3=80=91=E7=A7=BB?= =?UTF-8?q?=E5=8A=A8=E9=9B=B6=20commit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\347\247\273\345\212\250\351\233\266.java" | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 "Week_01/G20200343030437/\347\247\273\345\212\250\351\233\266.java" diff --git "a/Week_01/G20200343030437/\347\247\273\345\212\250\351\233\266.java" "b/Week_01/G20200343030437/\347\247\273\345\212\250\351\233\266.java" new file mode 100644 index 00000000..e8b41eb4 --- /dev/null +++ "b/Week_01/G20200343030437/\347\247\273\345\212\250\351\233\266.java" @@ -0,0 +1,34 @@ + public void moveZeroes(int[] array) { + int length = array.length; + int num = 0; // 代表0的个数 + //指针2 + int j = 0; + //循环数组 + for (int i = 0; j < length; i++) { //指针1 + //判断是否为0 + if (array[j] == 0) { + num++; + //如果为0,先判断下一个数是否为0, + for (j++; j < length; j++) { + if (array[j] != 0) { + // 下一个数超前移动 + array[i] = array[j]; + break; + } + num++; + + } + } + if (j < length) { + array[i] = array[j]; + } + j++; + } + //遍历完成后将num个0更新至数组末尾 + for (int k = 0; k < num; k++) { + array[length - 1 - k] = 0; + } + for (int t = 0; t < length; t++) { + System.out.println(array[t]); + } + } From 33b36542da1527ab09e476488d24409b291c8ce0 Mon Sep 17 00:00:00 2001 From: Kimmy <952451021@qq.com> Date: Mon, 10 Feb 2020 23:44:40 +0800 Subject: [PATCH 0042/1268] =?UTF-8?q?059-Week=2002=E7=AC=AC=E4=B8=80?= =?UTF-8?q?=E5=91=A8=E7=AC=AC=E4=B8=89=E8=AF=BE=E7=9A=84=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 51 ++++++++++ .idea/dictionaries/Administrator.xml | 3 + .idea/encodings.xml | 6 ++ .idea/inspectionProfiles/Project_Default.xml | 36 +++++++ .idea/misc.xml | 94 +++++++++++++++++++ .idea/modules.xml | 8 ++ .idea/vcs.xml | 6 ++ Week_01/G20200343030591/LeetCode_189_591.java | 33 +++++++ Week_01/G20200343030591/LeetCode_1_591.java | 29 ++++++ Week_01/G20200343030591/LeetCode_21_591.java | 30 ++++++ Week_01/G20200343030591/LeetCode_26_591.java | 30 ++++++ Week_01/G20200343030591/LeetCode_283_591.java | 40 ++++++++ algorithm006-class01.iml | 9 ++ 13 files changed, 375 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/dictionaries/Administrator.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 Week_01/G20200343030591/LeetCode_189_591.java create mode 100644 Week_01/G20200343030591/LeetCode_1_591.java create mode 100644 Week_01/G20200343030591/LeetCode_21_591.java create mode 100644 Week_01/G20200343030591/LeetCode_26_591.java create mode 100644 Week_01/G20200343030591/LeetCode_283_591.java create mode 100644 algorithm006-class01.iml diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..37e7b7e6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,51 @@ +# Created by .ignore support plugin (hsz.mobi) +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff: +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/dictionaries + +# Sensitive or high-churn files: +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.xml +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml + +# Gradle: +.idea/**/gradle.xml +.idea/**/libraries + +# CMake +cmake-build-debug/ + +# Mongo Explorer plugin: +.idea/**/mongoSettings.xml + +## File-based project format: +*.iws + +## Plugin-specific files: + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties diff --git a/.idea/dictionaries/Administrator.xml b/.idea/dictionaries/Administrator.xml new file mode 100644 index 00000000..d87a1619 --- /dev/null +++ b/.idea/dictionaries/Administrator.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 00000000..4987ecab --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 00000000..6560a989 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,36 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..69eea533 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.8 + + + + + + + + 1.8 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..6d1a9eab --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..35eb1ddf --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Week_01/G20200343030591/LeetCode_189_591.java b/Week_01/G20200343030591/LeetCode_189_591.java new file mode 100644 index 00000000..b64141a0 --- /dev/null +++ b/Week_01/G20200343030591/LeetCode_189_591.java @@ -0,0 +1,33 @@ +/** + * 题目名称:旋转数组 + */ +class Solution { + + // 暴力法一轮旋转一次 旋转K轮 + public void rotate(int[] nums, int k) { + int temp, previous; + for (int i = 0; i < k; i++) { + previous = nums[nums.length - 1]; + for (int j = 0; j < nums.length; j++) { + temp = nums[j]; + nums[j] = previous; + previous = temp; + } + } + } + + // hash取模 1构建一个新数组;2用取模的方式把原数组中的元素定位到指定位置;3.最后把新数组中的元素复制给原数组 + public void rotate(int[] nums, int k) { + int[] a = new int[nums.length]; + int len = nums.length; + for (int i = 0; i < len; i++) { + a[ (i + k) % len ] = nums[i]; + } + for (int j = 0; j < len; j++) { + nums[j] = a[j]; + } + } +} + + + diff --git a/Week_01/G20200343030591/LeetCode_1_591.java b/Week_01/G20200343030591/LeetCode_1_591.java new file mode 100644 index 00000000..c0db119e --- /dev/null +++ b/Week_01/G20200343030591/LeetCode_1_591.java @@ -0,0 +1,29 @@ + +class Solution { + + + /** + * 题目名称:两数之和 + * 思路解析: + * + * 易错点,老是想让i从1开始,他俩从同一个位置开始走 + * @param nums + * @return + */ + public int[] twoSum(int[] nums, int target) { + Map cache = new HashMap<>(); + int len = nums.length; + + for (int i = 0; i < len; i++) { + int result = target - nums[i]; + if (cache.get(result)!=null) { + return new int[]{i, cache.get(result)}; + } + cache.put(nums[i], i); + } + + return new int[]{}; + } + + + diff --git a/Week_01/G20200343030591/LeetCode_21_591.java b/Week_01/G20200343030591/LeetCode_21_591.java new file mode 100644 index 00000000..7285e040 --- /dev/null +++ b/Week_01/G20200343030591/LeetCode_21_591.java @@ -0,0 +1,30 @@ + +class Solution { + + public ListNode mergeTwoLists(ListNode l1, ListNode l2) { + ListNode pHead = new ListNode(0); + ListNode p = pHead; + + while (l1!=null && l2!=null) { + if (l1.val < l2.val) { + p.next = l1; + l1 = l1.next; + } else { + p.next = l2; + l2 = l2.next; + } + p = p.next; + } + + p.next = (l1==null) ? l2 : l1; + + return pHead.next; + + } + + + +} + + + diff --git a/Week_01/G20200343030591/LeetCode_26_591.java b/Week_01/G20200343030591/LeetCode_26_591.java new file mode 100644 index 00000000..52323be9 --- /dev/null +++ b/Week_01/G20200343030591/LeetCode_26_591.java @@ -0,0 +1,30 @@ + +class Solution { + + + /** + * 思路解析: + * 1.创建两个指针 快指针和慢指针 + * 2、当两个指针值 相等,慢指针不动,快指针继续向前移动 + * 3、两个指针值 不相等,将快指针所在位置的值赋给 慢指针+1的位置,并且慢指针向前移动一位 + * 4、重复2~3 知道fast等于数组长度 + * @param nums + * @return + */ + public int removeDuplicates(int[] nums) { + int len = nums.length; + if (len == 0) return 0; + + int slow = 0; + for (int fast=1; fast < len; fast++) { + if (nums[fast]!=nums[slow]) { + nums[++slow] = nums[fast]; + } + } + return ++slow; + } + +} + + + diff --git a/Week_01/G20200343030591/LeetCode_283_591.java b/Week_01/G20200343030591/LeetCode_283_591.java new file mode 100644 index 00000000..eca74f82 --- /dev/null +++ b/Week_01/G20200343030591/LeetCode_283_591.java @@ -0,0 +1,40 @@ + +class Solution { + + + /** + * 题目名称:移动0 + * 思路解析: + * 1、定义一个j指针,用于指向下一个不为0的位置 + * 2、定义一个i指针,遍历数组查找不为0的数 + * 3、i和j一起向前走,j遇到为0的数就停下来,i则继续向前走 + * 4、i只要不为0,就与j交换位置,交换完成后,j向前走一步 + * 5、重复3~4,直到遍历完数组 + * + * 易错点,老是想让i从1开始,他俩从同一个位置开始走 + * @param nums + * @return + */ + public void moveZeroes(int[] nums) { + int len = nums.length; + if (len == 0) return; + + int j = 0; + for (int i = 0; i < len; i++) { + if (nums[i]!=0) { + swap(nums, i, j); + j++; + } + } + } + + void swap(int[] nums, int i, int j) { + int temp = nums[i]; + nums[i] = nums[j]; + nums[j] = temp; + } + +} + + + diff --git a/algorithm006-class01.iml b/algorithm006-class01.iml new file mode 100644 index 00000000..8021953e --- /dev/null +++ b/algorithm006-class01.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file From 16a8267c48fd1fc4f1749957ef1eaf638b8435ce Mon Sep 17 00:00:00 2001 From: xiebor <904558398@qq.com> Date: Tue, 11 Feb 2020 08:30:38 +0800 Subject: [PATCH 0043/1268] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030437/move-zeroes.java | 34 ++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Week_01/G20200343030437/move-zeroes.java diff --git a/Week_01/G20200343030437/move-zeroes.java b/Week_01/G20200343030437/move-zeroes.java new file mode 100644 index 00000000..e8b41eb4 --- /dev/null +++ b/Week_01/G20200343030437/move-zeroes.java @@ -0,0 +1,34 @@ + public void moveZeroes(int[] array) { + int length = array.length; + int num = 0; // 代表0的个数 + //指针2 + int j = 0; + //循环数组 + for (int i = 0; j < length; i++) { //指针1 + //判断是否为0 + if (array[j] == 0) { + num++; + //如果为0,先判断下一个数是否为0, + for (j++; j < length; j++) { + if (array[j] != 0) { + // 下一个数超前移动 + array[i] = array[j]; + break; + } + num++; + + } + } + if (j < length) { + array[i] = array[j]; + } + j++; + } + //遍历完成后将num个0更新至数组末尾 + for (int k = 0; k < num; k++) { + array[length - 1 - k] = 0; + } + for (int t = 0; t < length; t++) { + System.out.println(array[t]); + } + } From 796f15afb90bc38a6f7d6fc76956bc888c80d20b Mon Sep 17 00:00:00 2001 From: xiebor <904558398@qq.com> Date: Tue, 11 Feb 2020 10:08:06 +0800 Subject: [PATCH 0044/1268] =?UTF-8?q?=E7=9B=9B=E6=9C=80=E5=A4=9A=E7=9A=84?= =?UTF-8?q?=E6=B0=B4=20=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../container-with-most-water.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Week_01/G20200343030437/container-with-most-water.java diff --git a/Week_01/G20200343030437/container-with-most-water.java b/Week_01/G20200343030437/container-with-most-water.java new file mode 100644 index 00000000..8ef35a83 --- /dev/null +++ b/Week_01/G20200343030437/container-with-most-water.java @@ -0,0 +1,17 @@ +public int maxArea(int[] height) { + //常规双指针写法 + int length = height.length; + int maxarea = 0; + int l = 0; + int r = length-1; + + while(l != r){ + maxarea = Math.max(maxarea, (r - l) * Math.min(height[l], height[r])); + if (height[l] < height[r]){ + l ++; + }else { + r --; + } + } + return maxarea; + } From 30c523362c23546955cb208214edad0e42b432b3 Mon Sep 17 00:00:00 2001 From: Huangzikun <381560728@qq.com> Date: Tue, 11 Feb 2020 10:25:52 +0800 Subject: [PATCH 0045/1268] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_00/G20200343030395/NOTE.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Week_00/G20200343030395/NOTE.md b/Week_00/G20200343030395/NOTE.md index 50de3041..5497d82e 100644 --- a/Week_00/G20200343030395/NOTE.md +++ b/Week_00/G20200343030395/NOTE.md @@ -1 +1,7 @@ -学习笔记 \ No newline at end of file +学习笔记 +## 2020/2/10 +* 视频进度:今日看了第三课1,2,3看了一半 +* 题目:跟着视频2做了 +* 题目完成情况 +[删除排序数组中的重复项](https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/) +[盛最多水的容器](https://leetcode-cn.com/problems/container-with-most-water/) From f1532cb543e68eae0e0084db5edc9bab327594d3 Mon Sep 17 00:00:00 2001 From: Huangzikun <381560728@qq.com> Date: Tue, 11 Feb 2020 10:31:26 +0800 Subject: [PATCH 0046/1268] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_00/G20200343030395/NOTE.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Week_00/G20200343030395/NOTE.md b/Week_00/G20200343030395/NOTE.md index 5497d82e..8d82b7b3 100644 --- a/Week_00/G20200343030395/NOTE.md +++ b/Week_00/G20200343030395/NOTE.md @@ -5,3 +5,13 @@ * 题目完成情况 [删除排序数组中的重复项](https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/) [盛最多水的容器](https://leetcode-cn.com/problems/container-with-most-water/) +* 代码片段 + + * 用于循环一维数组,i和j下标不重复 + ```java + for(int i=0;i Date: Tue, 11 Feb 2020 12:21:53 +0800 Subject: [PATCH 0047/1268] homework --- Week_01/G20200343030533/LeetCode_021_533.c | 71 +++++++++++++ Week_01/G20200343030533/LeetCode_088_533.c | 18 ++++ Week_01/G20200343030533/LeetCode_641_533.c | 115 +++++++++++++++++++++ 3 files changed, 204 insertions(+) create mode 100644 Week_01/G20200343030533/LeetCode_641_533.c diff --git a/Week_01/G20200343030533/LeetCode_021_533.c b/Week_01/G20200343030533/LeetCode_021_533.c index e69de29b..064b438e 100644 --- a/Week_01/G20200343030533/LeetCode_021_533.c +++ b/Week_01/G20200343030533/LeetCode_021_533.c @@ -0,0 +1,71 @@ +/* 题目描述 + *将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 +*/ + +/** + * Definition for singly-linked list. + * struct ListNode { + * int val; + * struct ListNode *next; + * }; + */ + +//第二版代码, 速度0ms, 击败100% +struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){ + //考虑输入为NULL + if ( l1 == NULL && l2 == NULL) return NULL; + if ( l1 == NULL && l2 != NULL) return l2; + if ( l2 == NULL && l1 != NULL) return l1; + //哑节点 + struct ListNode *dummy = (struct ListNode*)malloc(sizeof(struct ListNode)); + struct ListNode *cur = dummy; + while( l1 != NULL && l2 != NULL){ + if ( l1->val > l2->val){ + cur->next = l2; + l2 = l2->next; + } else{ + cur->next = l1; + l1 = l1->next; + } + cur = cur->next; + } + cur->next = ( l1 == NULL) ? l2 : l1; + return dummy->next; + +} + + + +//第一版代码 +struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){ + + struct ListNode *new_node, *new_head; + + if ( l1 == NULL && l2 != NULL ) return l2; + if ( l1 != NULL && l2 == NULL ) return l1; + if ( l1 == NULL && l2 == NULL ) return NULL; + + //获取第一个节点 + if ( l1->val < l2->val ){ + new_node = l1; + l1 = l1->next; + } else{ + new_node = l2; + l2 = l2->next; + } + new_head = new_node; + + while ( l1 != NULL && l2 != NULL){ + if ( l1->val < l2->val ){ + new_node->next = l1; + l1 = l1->next; + } else{ + new_node->next = l2; + l2 = l2->next; + } + new_node = new_node->next; + } + new_node->next = l1 == NULL ? l2 : l1; + return new_head; + +} diff --git a/Week_01/G20200343030533/LeetCode_088_533.c b/Week_01/G20200343030533/LeetCode_088_533.c index 3a7935c0..186a07b6 100644 --- a/Week_01/G20200343030533/LeetCode_088_533.c +++ b/Week_01/G20200343030533/LeetCode_088_533.c @@ -1,3 +1,21 @@ +//方法2: 参考讨论写的代码 +//从尾往前 + +void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){ + int len = m + n ; + for (int i = len - 1; i >= 0; i--){ + //下面这个条件语句是精髓 + //或语句前:在两个数组都没有到头时, 谁最大谁到最后 + //或语句后: 如果第二个数组结束了,那么后续只用处理第一个数组 + if ( ( m > 0 && n > 0 && nums1[m-1] > nums2[n-1] ) \ + || n == 0) { + nums1[i] = nums1[--m]; + } else{ + nums1[i] = nums2[--n]; + } + } +} + //方法1: 先把元素加入到最后,然后排序 //时间复杂度O(nlog n), 空间复杂度O(n) int cmp(const void *a, const void *b){ diff --git a/Week_01/G20200343030533/LeetCode_641_533.c b/Week_01/G20200343030533/LeetCode_641_533.c new file mode 100644 index 00000000..a441b4a3 --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_641_533.c @@ -0,0 +1,115 @@ +/* https://leetcode-cn.com/problems/design-circular-deque +设计实现双端队列。你的实现需要支持以下操作: + + - MyCircularDeque(k):构造函数,双端队列的大小为k。 + - insertFront():将一个元素添加到双端队列头部。 如果操作成功返回 true。 + - insertLast():将一个元素添加到双端队列尾部。如果操作成功返回 true。 + - deleteFront():从双端队列头部删除一个元素。 如果操作成功返回 true。 + - deleteLast():从双端队列尾部删除一个元素。如果操作成功返回 true。 + - getFront():从双端队列头部获得一个元素。如果双端队列为空,返回 -1。 + - getRear():获得双端队列的最后一个元素。 如果双端队列为空,返回 -1。 + - isEmpty():检查双端队列是否为空。 + - isFull():检查双端队列是否满了。 +*/ + +//代码思路参考了 https://leetcode-cn.com/problems/design-circular-deque/solution/shu-zu-shi-xian-de-xun-huan-shuang-duan-dui-lie-by/ + + +typedef struct { + int *arr; //存放数据 + int head; //对首 + int rear; //队尾 + int capacity; //容量 + +} MyCircularDeque; + +/** Initialize your data structure here. Set the size of the deque to be k. */ + +//浪费一个空格用于检查空间 +MyCircularDeque* myCircularDequeCreate(int k) { + MycircularDeque *obj = (MyCircularDeque *)malloc(sizeof(MyCircularDeque)); + obj->head = 0; + obj->tail = 0; + obj->arr = (int *)malloc(sizeof(int) * (k+1)); + obj->capacity = k; +} + +/** Adds an item at the front of Deque. Return true if the operation is successful. */ +bool myCircularDequeInsertFront(MyCircularDeque* obj, int value) { + if (myCircularDequeIsFull(obj)) return false; + + obj->arr[obj->rear] = value; + + + +} + +/** Adds an item at the rear of Deque. Return true if the operation is successful. */ +bool myCircularDequeInsertLast(MyCircularDeque* obj, int value) { + +} + +/** Deletes an item from the front of Deque. Return true if the operation is successful. */ +bool myCircularDequeDeleteFront(MyCircularDeque* obj) { + +} + +/** Deletes an item from the rear of Deque. Return true if the operation is successful. */ +bool myCircularDequeDeleteLast(MyCircularDeque* obj) { + +} + +/** Get the front item from the deque. */ +int myCircularDequeGetFront(MyCircularDeque* obj) { + +} + +/** Get the last item from the deque. */ +int myCircularDequeGetRear(MyCircularDeque* obj) { + +} + +/** Checks whether the circular deque is empty or not. */ +bool myCircularDequeIsEmpty(MyCircularDeque* obj) { + + return obj->head == obj->rear ? true : false; + +} + +/** Checks whether the circular deque is full or not. */ +bool myCircularDequeIsFull(MyCircularDeque* obj) { + //队尾追到队首 + if ( (obj->rear + 1) % obj->capacity == obj->head) { + return true; + } else{ + return false; + } + +} + +void myCircularDequeFree(MyCircularDeque* obj) { + free(obj->arr); + free(obj); +} + +/** + * Your MyCircularDeque struct will be instantiated and called as such: + * MyCircularDeque* obj = myCircularDequeCreate(k); + * bool param_1 = myCircularDequeInsertFront(obj, value); + + * bool param_2 = myCircularDequeInsertLast(obj, value); + + * bool param_3 = myCircularDequeDeleteFront(obj); + + * bool param_4 = myCircularDequeDeleteLast(obj); + + * int param_5 = myCircularDequeGetFront(obj); + + * int param_6 = myCircularDequeGetRear(obj); + + * bool param_7 = myCircularDequeIsEmpty(obj); + + * bool param_8 = myCircularDequeIsFull(obj); + + * myCircularDequeFree(obj); +*/ From 8dff28819940a3a115cc1bfb51feade4d8cf0cac Mon Sep 17 00:00:00 2001 From: fpanda Date: Tue, 11 Feb 2020 12:23:17 +0800 Subject: [PATCH 0048/1268] Add LeetCode 26 Remove the depulicated item in the array --- Week_01/G20200343030449/LeetCode_026_449.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Week_01/G20200343030449/LeetCode_026_449.cpp diff --git a/Week_01/G20200343030449/LeetCode_026_449.cpp b/Week_01/G20200343030449/LeetCode_026_449.cpp new file mode 100644 index 00000000..0c904cad --- /dev/null +++ b/Week_01/G20200343030449/LeetCode_026_449.cpp @@ -0,0 +1,16 @@ +class Solution { +public: + int removeDuplicates(vector& nums) { + + if (nums.size()==0) return 0; + + auto i = 0; + for (auto j=0; j Date: Tue, 11 Feb 2020 13:38:21 +0800 Subject: [PATCH 0049/1268] Add LeetCode 189 Rotate Array --- Week_01/G20200343030449/LeetCode_189_449.cpp | 26 ++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Week_01/G20200343030449/LeetCode_189_449.cpp diff --git a/Week_01/G20200343030449/LeetCode_189_449.cpp b/Week_01/G20200343030449/LeetCode_189_449.cpp new file mode 100644 index 00000000..435ea72f --- /dev/null +++ b/Week_01/G20200343030449/LeetCode_189_449.cpp @@ -0,0 +1,26 @@ +class Solution { +public: + void rotate(vector& nums, int k) { + if(nums.size()==0) return; + + auto move = k%nums.size(); + + reverse(nums, 0, nums.size()); + reverse(nums, 0, move); + reverse(nums, move, nums.size()); + } + + void reverse(vector& nums, int start, int end) { + auto i = start; + auto j = end-1; + + while (i Date: Tue, 11 Feb 2020 14:44:24 +0800 Subject: [PATCH 0050/1268] 581-Week 01 --- Week_01/G20200343030581/LeetCode_189_581.js | 46 ++++++++ Week_01/G20200343030581/LeetCode_1_581.js | 25 +++++ Week_01/G20200343030581/LeetCode_21_581.js | 17 +++ Week_01/G20200343030581/LeetCode_26_581.js | 13 +++ Week_01/G20200343030581/LeetCode_283_581.js | 14 +++ Week_01/G20200343030581/LeetCode_42_581.js | 38 +++++++ Week_01/G20200343030581/LeetCode_641_581.js | 111 ++++++++++++++++++++ Week_01/G20200343030581/LeetCode_66_581.js | 17 +++ Week_01/G20200343030581/LeetCode_88_581.js | 18 ++++ 9 files changed, 299 insertions(+) create mode 100644 Week_01/G20200343030581/LeetCode_189_581.js create mode 100644 Week_01/G20200343030581/LeetCode_1_581.js create mode 100644 Week_01/G20200343030581/LeetCode_21_581.js create mode 100644 Week_01/G20200343030581/LeetCode_26_581.js create mode 100644 Week_01/G20200343030581/LeetCode_283_581.js create mode 100644 Week_01/G20200343030581/LeetCode_42_581.js create mode 100644 Week_01/G20200343030581/LeetCode_641_581.js create mode 100644 Week_01/G20200343030581/LeetCode_66_581.js create mode 100644 Week_01/G20200343030581/LeetCode_88_581.js diff --git a/Week_01/G20200343030581/LeetCode_189_581.js b/Week_01/G20200343030581/LeetCode_189_581.js new file mode 100644 index 00000000..3f8dad9f --- /dev/null +++ b/Week_01/G20200343030581/LeetCode_189_581.js @@ -0,0 +1,46 @@ +/** + * @param {number[]} nums + * @param {number} k + * @return {void} Do not return anything, modify nums in-place instead. + */ +// 1.每次右移一个位置,进行k次。时间复杂度:O(K*N) 空间复杂度:O(1) +// var rotate = function(nums, k) { +// for (let i = 0; i < k; ++i) { +// let tmp = nums[nums.length - 1]; +// for (let j = nums.length - 2; j >= 0; --j) +// nums[j + 1] = nums[j]; +// nums[0] = tmp; +// } +// }; + +// 2.新建临时数据存储结果。时间复杂度:O(n) 空间复杂度:O(n) +// var rotate = function(nums, k) { +// let arr = []; +// let len = nums.length; +// for (let i = 0; i < len; ++i) { +// arr[(i + k) % len] = nums[i]; +// } +// +// for (let i = 0; i < len; ++i) { +// nums[i] = arr[i]; +// } +// } + +// 3.翻转数组,然后分别翻转前k个元素和后面len - k个元素。时间复杂度:0(n) 空间复杂度:0(1) +var rotate = function (nums, k) { + k = k % nums.length; + reverse(nums, 0, nums.length); + reverse(nums, 0, k); + reverse(nums, k, nums.length); +} + +var reverse = function(nums, start, end) { + let L = start, R = end - 1; + while (L < R) { + let tmp = nums[L]; + nums[L] = nums[R]; + nums[R] = tmp; + + L++; R--; + } +} diff --git a/Week_01/G20200343030581/LeetCode_1_581.js b/Week_01/G20200343030581/LeetCode_1_581.js new file mode 100644 index 00000000..0989e299 --- /dev/null +++ b/Week_01/G20200343030581/LeetCode_1_581.js @@ -0,0 +1,25 @@ +/** + * @param {number[]} nums + * @param {number} target + * @return {number[]} + */ +// 1. 暴力 O(n^2) +// var twoSum = function(nums, target) { +// for (let i = 0; i < nums.length - 1; i++) { +// for (let j = i + 1; j < nums.length; j++) { +// if (nums[i] + nums[j] == target) +// return [i, j]; +// } +// } +// }; + +// 2.Hash O(n) +var twoSum = function (nums, target) { + let dic = {}; + for (let i = 0; i < nums.length; i++) { + if (dic[nums[i]] != undefined) { + return [dic[nums[i]], i]; + } + dic[target - nums[i]] = i; + } +} diff --git a/Week_01/G20200343030581/LeetCode_21_581.js b/Week_01/G20200343030581/LeetCode_21_581.js new file mode 100644 index 00000000..ad6af375 --- /dev/null +++ b/Week_01/G20200343030581/LeetCode_21_581.js @@ -0,0 +1,17 @@ +var mergeTwoLists = function(l1, l2) { + let dummy = new ListNode(0); + let p = dummy; + let p1 = l1, p2 = l2; + while (p1 && p2) { + if (p1.val < p2.val) { + p.next = p1; + p1 = p1.next; + } else { + p.next = p2; + p2 = p2.next; + } + p = p.next; + } + p.next = p1 ? p1 : p2 ? p2 : null; + return dummy.next; +} diff --git a/Week_01/G20200343030581/LeetCode_26_581.js b/Week_01/G20200343030581/LeetCode_26_581.js new file mode 100644 index 00000000..f22c3093 --- /dev/null +++ b/Week_01/G20200343030581/LeetCode_26_581.js @@ -0,0 +1,13 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var removeDuplicates = function(nums) { + let j = 0; + for (let i = 0; i < nums.length; ++i) { + if (nums[i] == nums[i - 1]) continue; + nums[j++] = nums[i]; + } + + return j; +} diff --git a/Week_01/G20200343030581/LeetCode_283_581.js b/Week_01/G20200343030581/LeetCode_283_581.js new file mode 100644 index 00000000..1ce6af99 --- /dev/null +++ b/Week_01/G20200343030581/LeetCode_283_581.js @@ -0,0 +1,14 @@ +/** + * @param {number[]} nums + * @return {void} Do not return anything, modify nums in-place instead. + */ +// 1.左->右 +var moveZeroes = function(nums) { + let j = 0; + for (let i = 0; i < nums.length; ++i) { + if (nums[i]) + nums[j++] = nums[i]; + } + for (; j < nums.length; ++j) + nums[j] = 0; +} diff --git a/Week_01/G20200343030581/LeetCode_42_581.js b/Week_01/G20200343030581/LeetCode_42_581.js new file mode 100644 index 00000000..ac56e149 --- /dev/null +++ b/Week_01/G20200343030581/LeetCode_42_581.js @@ -0,0 +1,38 @@ +/** + * @param {number[]} height + * @return {number} + */ +// 1.暴力 +// var trap = function(height) { +// let res = 0; +// for(let k = 0; k < height.length; k++) { +// let maxLeftHeight = 0, maxRightHeight = 0; +// for (let i = 0; i <= k; ++i) +// maxLeftHeight = Math.max(maxLeftHeight, height[i]); +// for (let j = k; j < height.length; ++j) +// maxRightHeight = Math.max(maxRightHeight, height[j]); +// +// res += Math.min(maxLeftHeight, maxRightHeight) - height[k]; +// } +// +// return res; +// }; +// 2. 单调栈 +var trap = function (height) { + let res = 0; + let stack = []; + const peek = () => stack[stack.length - 1]; + for (let i = 0; i < height.length; i++) { + while (stack.length > 0 && height[i] > height[peek()]) { + let top = stack.pop(); + if (!stack.length) break; + let w = i - peek() - 1; + let h = Math.min(height[peek()], height[i]) - height[top]; + res += w * h; + } + + stack.push(i); + } + + return res; +} diff --git a/Week_01/G20200343030581/LeetCode_641_581.js b/Week_01/G20200343030581/LeetCode_641_581.js new file mode 100644 index 00000000..774ad80b --- /dev/null +++ b/Week_01/G20200343030581/LeetCode_641_581.js @@ -0,0 +1,111 @@ +/** + * Initialize your data structure here. Set the size of the deque to be k. + * @param {number} k + */ +var MyCircularDeque = function(k) { + this.capacity = k; + this.arr = []; +}; + +/** + * Adds an item at the front of Deque. Return true if the operation is successful. + * @param {number} value + * @return {boolean} + */ +MyCircularDeque.prototype.insertFront = function(value) { + if (this.arr.length < this.capacity) { + this.arr.unshift(value); + return true; + } + + return false; +}; + +/** + * Adds an item at the rear of Deque. Return true if the operation is successful. + * @param {number} value + * @return {boolean} + */ +MyCircularDeque.prototype.insertLast = function(value) { + if (this.arr.length < this.capacity) { + this.arr.push(value); + return true; + } + + return false; +}; + +/** + * Deletes an item from the front of Deque. Return true if the operation is successful. + * @return {boolean} + */ +MyCircularDeque.prototype.deleteFront = function() { + if (this.arr.length > 0) { + this.arr.shift(); + return true; + } + + return false; +}; + +/** + * Deletes an item from the rear of Deque. Return true if the operation is successful. + * @return {boolean} + */ +MyCircularDeque.prototype.deleteLast = function() { + if (this.arr.length > 0) { + this.arr.pop(); + return true; + } + + return false; +}; + +/** + * Get the front item from the deque. + * @return {number} + */ +MyCircularDeque.prototype.getFront = function() { + if (this.arr.length > 0) + return this.arr[0]; + return -1; +}; + +/** + * Get the last item from the deque. + * @return {number} + */ +MyCircularDeque.prototype.getRear = function() { + if (this.arr.length > 0) + return this.arr[this.arr.length - 1]; + return -1; +}; + +/** + * Checks whether the circular deque is empty or not. + * @return {boolean} + */ +MyCircularDeque.prototype.isEmpty = function() { + return this.arr.length == 0; +}; + +/** + * Checks whether the circular deque is full or not. + * @return {boolean} + */ +MyCircularDeque.prototype.isFull = function() { + return this.arr.length == this.capacity; +}; + +/** + * Your MyCircularDeque object will be instantiated and called as such: + * var obj = new MyCircularDeque(k) + * var param_1 = obj.insertFront(value) + * var param_2 = obj.insertLast(value) + * var param_3 = obj.deleteFront() + * var param_4 = obj.deleteLast() + * var param_5 = obj.getFront() + * var param_6 = obj.getRear() + * var param_7 = obj.isEmpty() + * var param_8 = obj.isFull() + */ diff --git a/Week_01/G20200343030581/LeetCode_66_581.js b/Week_01/G20200343030581/LeetCode_66_581.js new file mode 100644 index 00000000..227deaf0 --- /dev/null +++ b/Week_01/G20200343030581/LeetCode_66_581.js @@ -0,0 +1,17 @@ +/** + * @param {number[]} digits + * @return {number[]} + */ +var plusOne = function(digits) { + for (let i = digits.length - 1; i >= 0; --i) { + if (digits[i] == 9) + digits[i] = 0; + else { + digits[i]++; + return digits; + } + } + digits.unshift(1); + + return digits; +} diff --git a/Week_01/G20200343030581/LeetCode_88_581.js b/Week_01/G20200343030581/LeetCode_88_581.js new file mode 100644 index 00000000..0d7d35a5 --- /dev/null +++ b/Week_01/G20200343030581/LeetCode_88_581.js @@ -0,0 +1,18 @@ +/** + * @param {number[]} nums1 + * @param {number} m + * @param {number[]} nums2 + * @param {number} n + * @return {void} Do not return anything, modify nums1 in-place instead. + */ +var merge = function(nums1, m, nums2, n) { + let k = m + n - 1; + for (var i = m - 1, j = n - 1; i >= 0 && j >= 0;) { + if (nums1[i] > nums2[j]) + nums1[k--] = nums1[i--]; + else + nums1[k--] = nums2[j--]; + } + while (j >= 0) + nums1[k--] = nums2[j--]; +} From 6093ff1a3dc4b0ce11308c0a8061b9060d7102ae Mon Sep 17 00:00:00 2001 From: wangenji <1058845283@qq.com> Date: Tue, 11 Feb 2020 15:03:28 +0800 Subject: [PATCH 0051/1268] =?UTF-8?q?=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030415/LeetCode_189_415.java | 23 +++++++++++++++++++ Week_01/G20200343030415/LeetCode_88_415.java | 22 ++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 Week_01/G20200343030415/LeetCode_189_415.java create mode 100644 Week_01/G20200343030415/LeetCode_88_415.java diff --git a/Week_01/G20200343030415/LeetCode_189_415.java b/Week_01/G20200343030415/LeetCode_189_415.java new file mode 100644 index 00000000..d7b676bb --- /dev/null +++ b/Week_01/G20200343030415/LeetCode_189_415.java @@ -0,0 +1,23 @@ +class Solution { + public void rotate(int[] nums, int k) { + //k = nums.length % k 此时k表示k个尾部元素会被移动到数组头部 + k%=nums.length; + //将所有数反转 + reverse(nums,0,nums.length-1); + //反转0~k位置 + reverse(nums,0,k-1); + //反转n~k位置 + reverse(nums,k,nums.length-1); + + } + + public void reverse(int[] nums,int start, int end){ + while (start < end){ + int temp = nums[start]; + nums[start] = nums[end]; + nums[end] = temp; + start++; + end--; + } + } +} \ No newline at end of file diff --git a/Week_01/G20200343030415/LeetCode_88_415.java b/Week_01/G20200343030415/LeetCode_88_415.java new file mode 100644 index 00000000..ada82e20 --- /dev/null +++ b/Week_01/G20200343030415/LeetCode_88_415.java @@ -0,0 +1,22 @@ +class Solution { + + /** + * 合并两个有序数组 + * @param nums1 + * @param m + * @param nums2 + * @param n + */ + public void merge(int[] nums1, int m, int[] nums2, int n) { + int len1 = m - 1; + int len2 = n - 1; + int len = m + n - 1; + //从后往前遍历 + while (len1 >=0 && len2 >= 0){ + //谁大就放到nums1的末尾 + nums1[len--] = nums1[len1] > nums2[len2] ? nums1[len1--] : nums2[len2--]; + } + //遍历完nums1,把nums2剩余的数拷贝到nums1前面 + System.arraycopy(nums2,0,nums1,0,len2 + 1); + } +} \ No newline at end of file From 212689120f1f1e5d413d5116e1bc5b7757136422 Mon Sep 17 00:00:00 2001 From: pangshusong Date: Tue, 11 Feb 2020 18:11:01 +0800 Subject: [PATCH 0052/1268] [dsa] array - remove duplicate from sorted array --- .../LeetCode_26_373/LeetCode_26_373_test.go | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 Week_01/G20200343030373/LeetCode_26_373/LeetCode_26_373_test.go diff --git a/Week_01/G20200343030373/LeetCode_26_373/LeetCode_26_373_test.go b/Week_01/G20200343030373/LeetCode_26_373/LeetCode_26_373_test.go new file mode 100644 index 00000000..3e2f4bf0 --- /dev/null +++ b/Week_01/G20200343030373/LeetCode_26_373/LeetCode_26_373_test.go @@ -0,0 +1,64 @@ +//https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/ +package remove_duplicates_from_sorted_array_test + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestArray(t *testing.T) { + t.Log("Array: Remove Duplicates from Sorted Array") + + nums1 := []int{1, 1, 2} + expect1 := []int{1, 2} + assert.Equal(t, expect1, nums1[:removeDuplicates(nums1)]) + nums1 = []int{1, 1, 2} + assert.Equal(t, expect1, nums1[:doublePointer(nums1)]) + nums1 = []int{1, 1, 2} + assert.Equal(t, expect1, nums1[:reverseTraversal(nums1)]) + + nums2 := []int{0, 0, 1, 1, 1, 2, 2, 3, 3, 4} + expect2 := []int{0, 1, 2, 3, 4} + assert.Equal(t, expect2, nums2[:removeDuplicates(nums2)]) + nums2 = []int{0, 0, 1, 1, 1, 2, 2, 3, 3, 4} + assert.Equal(t, expect2, nums2[:doublePointer(nums2)]) + nums2 = []int{0, 0, 1, 1, 1, 2, 2, 3, 3, 4} + assert.Equal(t, expect2, nums2[:reverseTraversal(nums2)]) +} + +func removeDuplicates(nums []int) int { + //Best + return doublePointer(nums) +} + +//快慢指针 +//快慢指针初始值相等,快指针先遍历,不相等时,慢指针右移一个后赋值 +//最终返回个数,慢指针从零开始,所以加一 +func doublePointer(nums []int) int { + fast, slow := 0, 0 + for ; fast < len(nums); fast++ { + if nums[slow] != nums[fast] { + slow++ + nums[slow] = nums[fast] + } + } + return slow + 1 +} + +//反向遍历 +//从最后一个元素遍历到第二个元素 +//如果后一个元素i与前一个元素i-1相等,则 +//切片操作,将后一个元素i从切片中间拔除 +//切片重复操作,最坏O(n^2),劣于双指针方法 +func reverseTraversal(nums []int) int { + if len(nums) == 0 { + return 0 + } + + for i := len(nums) - 1; i >= 1; i-- { + if nums[i] == nums[i-1] { + nums = append(nums[:i], nums[i+1:]...) + } + } + return len(nums) +} From efb42bbc644357ae3bbf8ae4d879a379312e4259 Mon Sep 17 00:00:00 2001 From: xiebor <904558398@qq.com> Date: Tue, 11 Feb 2020 18:37:34 +0800 Subject: [PATCH 0053/1268] =?UTF-8?q?=E6=8F=90=E4=BA=A4=20=E7=88=AC?= =?UTF-8?q?=E6=A5=BC=E6=A2=AF=20=20=E4=B8=89=E6=95=B0=E4=B9=8B=E5=92=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030437/3sum.java | 29 ++++++++++++++++++++ Week_01/G20200343030437/climbing-stairs.java | 16 +++++++++++ 2 files changed, 45 insertions(+) create mode 100644 Week_01/G20200343030437/3sum.java create mode 100644 Week_01/G20200343030437/climbing-stairs.java diff --git a/Week_01/G20200343030437/3sum.java b/Week_01/G20200343030437/3sum.java new file mode 100644 index 00000000..ad5a884b --- /dev/null +++ b/Week_01/G20200343030437/3sum.java @@ -0,0 +1,29 @@ +public List> threeSum(int[] nums) { + List> ans = new ArrayList<>(); + int length = nums.length; + if (nums == null || length < 3) return ans; + Arrays.sort(nums); + if (nums[0] > 0) return ans; + + int newlen = length - 2; //减少计算次数 + for (int i = 0; i < newlen; i++) { + int l = i + 1; + int r = length-1; + if (i > 0 && nums[i] == nums[i-1]) continue; + while (l < r){ + int sum = nums[i] + nums[l] + nums[r]; + if (sum == 0){ + ans.add(Arrays.asList(nums[i], nums[l], nums[r])); + while (l < r && nums[l] == nums[l + 1]) l++; //去重 + while (l < r && nums[r] == nums[r - 1]) r--; + l++; + r--; + } else if (sum > 0) { + r--; + } else { + l++; + } + } + } + return ans; + } diff --git a/Week_01/G20200343030437/climbing-stairs.java b/Week_01/G20200343030437/climbing-stairs.java new file mode 100644 index 00000000..2b2ad372 --- /dev/null +++ b/Week_01/G20200343030437/climbing-stairs.java @@ -0,0 +1,16 @@ +public int climbStairs(int n) { + //根据反证法得出 该题是求斐波那契函数 + //单纯用菲波那切函数会有n^2的时间复杂度,所以换用简单方法 + if (n == 0) return 0; + if (n == 1) return 1; + + int s0 = 1; + int s1 = 1; + int sum = 2; + for (int i = 2; i < n; i++) { + s0 = s1; + s1 = sum; + sum = s0 + s1; + } + return sum; + } From abcfa5673e2ff5c613d5ba3093466c0e817b699d Mon Sep 17 00:00:00 2001 From: xiebor <37875140+xiebor@users.noreply.github.com> Date: Tue, 11 Feb 2020 18:51:27 +0800 Subject: [PATCH 0054/1268] Update NOTE.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit note更新 --- Week_01/G20200343030437/NOTE.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Week_01/G20200343030437/NOTE.md b/Week_01/G20200343030437/NOTE.md index 50de3041..3cf131b9 100644 --- a/Week_01/G20200343030437/NOTE.md +++ b/Week_01/G20200343030437/NOTE.md @@ -1 +1,5 @@ -学习笔记 \ No newline at end of file +学习笔记 + +1、爬楼梯这里可以实际想像,跨出第一步时有f(n-1)种可能,跨出第二步时有f(n-2)种可能。 + +2、 From b7cde73d76f7ac964cb1252311f7bb63eaf905a4 Mon Sep 17 00:00:00 2001 From: pangshusong Date: Tue, 11 Feb 2020 18:58:20 +0800 Subject: [PATCH 0055/1268] [dsa] array - rotate array - shrink --- .../LeetCode_189_373/LeetCode_189_373_test.go | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 Week_01/G20200343030373/LeetCode_189_373/LeetCode_189_373_test.go diff --git a/Week_01/G20200343030373/LeetCode_189_373/LeetCode_189_373_test.go b/Week_01/G20200343030373/LeetCode_189_373/LeetCode_189_373_test.go new file mode 100644 index 00000000..ffe6b715 --- /dev/null +++ b/Week_01/G20200343030373/LeetCode_189_373/LeetCode_189_373_test.go @@ -0,0 +1,81 @@ +//https://leetcode-cn.com/problems/rotate-array/ +package rotate_array_test + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestRotateArray(t *testing.T) { + t.Log("Rotate Array") + + nums1 := []int{1, 2, 3, 4, 5, 6, 7} + expect1 := []int{5, 6, 7, 1, 2, 3, 4} + rotate(nums1, 3) + assert.Equal(t, expect1, nums1) + + nums2 := []int{1, 2} + expect2 := []int{2, 1} + rotate(nums2, 3) + assert.Equal(t, expect2, nums2) + + nums3 := []int{-1} + expect3 := nums3 + rotate(nums3, 2) + assert.Equal(t, expect3, nums3) +} + +func rotate(nums []int, k int) { + //Best + reverseRotate(nums, k) +} + +//暴力反转 +//将最后一个元素移动到第一位,移动k次 +//TC:O(kn), SC:O(1) - AC but Not Good +func bruteRotate(nums []int, k int) { + length := len(nums) + k %= length //k为非负数,取余后为最后需要移动的步数 + + for i := 0; i < k; i++ { + //将最后一个元素移动到首位 + //方法:取数组最后一个元素,遍历一遍数组,与最后一个元素进行交换 + end := nums[length-1] + for j := 0; j < length; j++ { + nums[j], end = end, nums[j] + } + } +} + +//切片分割 +//取后k个作为切片的初始,取前面的逐个累加到其后 - 直接得到结果 +//题目要求在数组原地修改,所以就将结果直接复制进去 +//TC:O(n), SC:O(n), not O(1) - AC but Not Good +func sliceRotate(nums []int, k int) { + length := len(nums) + k %= length + + res := append(nums[length-k:], nums[:length-k]...) + nums = append(nums[:0], res...) +} + +//多次反转 +//先将所有元素进行反转 +//将前k个反转恢复,k个是0~k-1,切片的右边是[:k] +//将之后的反转恢复 +//TC:O(n), SC:O(1), Good +func reverseRotate(nums []int, k int) { + k %= len(nums) + reverse(nums) + reverse(nums[:k]) + reverse(nums[k:]) +} + +//反转数组 +//左右夹逼 +//左右交换 +func reverse(nums []int) { + for i, j := 0, len(nums)-1; i < j; i, j = i+1, j-1 { + nums[i], nums[j] = nums[j], nums[i] + } +} From 4f612a636aebe61c551cc6d86f7c68aff15be895 Mon Sep 17 00:00:00 2001 From: pangshusong Date: Tue, 11 Feb 2020 19:07:29 +0800 Subject: [PATCH 0056/1268] [dsa] array - plus one --- .../LeetCode_66_373/LeetCode_66_373_test.go | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Week_01/G20200343030373/LeetCode_66_373/LeetCode_66_373_test.go diff --git a/Week_01/G20200343030373/LeetCode_66_373/LeetCode_66_373_test.go b/Week_01/G20200343030373/LeetCode_66_373/LeetCode_66_373_test.go new file mode 100644 index 00000000..0d3f108e --- /dev/null +++ b/Week_01/G20200343030373/LeetCode_66_373/LeetCode_66_373_test.go @@ -0,0 +1,38 @@ +//https://leetcode-cn.com/problems/plus-one/ +package plus_one_test + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestPlusOne(t *testing.T) { + digits1 := []int{1, 2, 3} + expect1 := []int{1, 2, 4} + assert.Equal(t, expect1, plusOne(digits1)) + + digits2 := []int{1, 2, 9} + expect2 := []int{1, 3, 0} + assert.Equal(t, expect2, plusOne(digits2)) + + digits3 := []int{9, 9} + expect3 := []int{1, 0, 0} + assert.Equal(t, expect3, plusOne(digits3)) +} + +//模拟进位 +//从后往前遍历 +//如果数字小于9,直接加一,直接返回 +//如果数字等于9。本位变零,向前看一位,同样与9判断大小 +//如果没有在小于9的地方返回,即每一位都是9。在遍历结束后首位加个1 +func plusOne(digits []int) []int { + for i := len(digits) - 1; i >= 0; i-- { + if digits[i] < 9 { + digits[i]++ + return digits + } else { + digits[i] = 0 + } + } + return append([]int{1}, digits...) +} From 10271d19730d740967f45fe29547cdb792e1b63e Mon Sep 17 00:00:00 2001 From: pangshusong Date: Tue, 11 Feb 2020 19:44:07 +0800 Subject: [PATCH 0057/1268] [dsa] linkedlist - merge two sorted list --- .../LeetCode_21_373/LeetCode_21_373_test.go | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 Week_01/G20200343030373/LeetCode_21_373/LeetCode_21_373_test.go diff --git a/Week_01/G20200343030373/LeetCode_21_373/LeetCode_21_373_test.go b/Week_01/G20200343030373/LeetCode_21_373/LeetCode_21_373_test.go new file mode 100644 index 00000000..07a7e23d --- /dev/null +++ b/Week_01/G20200343030373/LeetCode_21_373/LeetCode_21_373_test.go @@ -0,0 +1,94 @@ +//https://leetcode-cn.com/problems/merge-two-sorted-lists/ +package merge_two_sorted_lists + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestMergeList(t *testing.T) { + l1 := &ListNode{ + Val: 1, + Next: &ListNode{ + Val: 2, + Next: &ListNode{ + Val: 4, + Next: nil, + }, + }, + } + + l2 := &ListNode{ + Val: 1, + Next: &ListNode{ + Val: 3, + Next: &ListNode{ + Val: 4, + Next: nil, + }, + }, + } + + expect := &ListNode{ + Val: 1, + Next: &ListNode{ + Val: 1, + Next: &ListNode{ + Val: 2, + Next: &ListNode{ + Val: 3, + Next: &ListNode{ + Val: 4, + Next: &ListNode{ + Val: 4, + Next: nil, + }, + }, + }, + }, + }, + } + + assert.Equal(t, traversalList(expect), traversalList(mergeTwoLists(l1, l2))) +} + +type ListNode struct { + Val int + Next *ListNode +} + +func traversalList(head *ListNode) []int { + var res []int + for head != nil { + res = append(res, head.Val) + head = head.Next + } + return res +} + +func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode { + pre := &ListNode{} + hint := pre //哨兵或锚点 + + //迭代开始,退出时肯定是l1或l2为空了 + for l1 != nil && l2 != nil { + if l1.Val < l2.Val { + pre.Next = l1 //将pre指向l1当前节点 + l1 = l1.Next //l1后移 + } else { + pre.Next = l2 + l2 = l2.Next + } + pre = pre.Next //当前pre已经有了指向,则将pre后移一个元素 + } + + //l1或l2为空之后,跳出上面循环 + //将不为空的那个直接合并 + if l1 != nil { + pre.Next = l1 + } else { + pre.Next = l2 + } + + return hint.Next +} From 02d4fd4f6d4642a144d8600a97d4df614d893f5c Mon Sep 17 00:00:00 2001 From: pangshusong Date: Tue, 11 Feb 2020 20:41:00 +0800 Subject: [PATCH 0058/1268] [dsa] array - merge two sorted array --- .../LeetCode_88_373/LeetCode_88_373_test.go | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 Week_01/G20200343030373/LeetCode_88_373/LeetCode_88_373_test.go diff --git a/Week_01/G20200343030373/LeetCode_88_373/LeetCode_88_373_test.go b/Week_01/G20200343030373/LeetCode_88_373/LeetCode_88_373_test.go new file mode 100644 index 00000000..d53d2cdd --- /dev/null +++ b/Week_01/G20200343030373/LeetCode_88_373/LeetCode_88_373_test.go @@ -0,0 +1,62 @@ +package merge_two_sorted_array_test + +import ( + "github.com/stretchr/testify/assert" + "sort" + "testing" +) + +func TestMergeArray(t *testing.T) { + nums1 := []int{1, 2, 3, 0, 0, 0} + nums2 := []int{2, 5, 6} + m, n := 3, 3 + expect := []int{1, 2, 2, 3, 5, 6} + merge(nums1, m, nums2, n) + assert.Equal(t, expect, nums1) +} + +func merge(nums1 []int, m int, nums2 []int, n int) { + arrayMerge(nums1, m, nums2, n) +} + +//双指针法 +//处理数组,而不是处理切片 +//从后往前遍历,可以原地进行处理,直接将最后面的数放到nums1后面,已放好的数组无需再次移动 +func arrayMerge(nums1 []int, m int, nums2 []int, n int) { + //直接返回,nums1 + if n == 0 { + return + } + //直接将n个元素添加到nums1 + if m == 0 { + for i := 0; i < n; i++ { + nums1[i] = nums2[i] + } + return + } + + for m > 0 && n > 0 { + //从后往前,进行比较 + if nums1[m-1] < nums2[n-1] { + nums1[m+n-1] = nums2[n-1] //nums1数字比nums2小,则将nums2数字放到较后面 + n-- + } else { + nums1[m+n-1] = nums1[m-1] + m-- + } + //m总比n大 + if m == 0 && n > 0 { + for n > 0 { + nums1[m+n-1] = nums2[n-1] + n-- + } + } + } +} + +//切片排序 +//go语言特性 +func sliceMerge(nums1 []int, m int, nums2 []int, n int) { + nums1 = append(nums1[:m], nums2[:n]...) + sort.Ints(nums1) +} From dd77c3dc49fa6b53bc3c47b1c787744084b36d50 Mon Sep 17 00:00:00 2001 From: Huangzikun <381560728@qq.com> Date: Tue, 11 Feb 2020 21:40:55 +0800 Subject: [PATCH 0059/1268] =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_00/G20200343030395/LeetCode_141.java | 49 +++++++++++++++++ Week_00/G20200343030395/LeetCode_1_395.java | 13 +++-- Week_00/G20200343030395/LeetCode_2_395.java | 53 ++++++++++++++++++ Week_00/G20200343030395/LeetCode_3sum.java | 60 +++++++++++++++++++++ 4 files changed, 170 insertions(+), 5 deletions(-) create mode 100644 Week_00/G20200343030395/LeetCode_141.java create mode 100644 Week_00/G20200343030395/LeetCode_2_395.java create mode 100644 Week_00/G20200343030395/LeetCode_3sum.java diff --git a/Week_00/G20200343030395/LeetCode_141.java b/Week_00/G20200343030395/LeetCode_141.java new file mode 100644 index 00000000..404b80ea --- /dev/null +++ b/Week_00/G20200343030395/LeetCode_141.java @@ -0,0 +1,49 @@ +package Week_00.G20200343030395; + +import java.util.List; + +public class LeetCode_141 { + + static class ListNode { + int val; + ListNode next; + ListNode(int x) { + val = x; + next = null; + } + } + + public static void main(String[] args) { + ListNode head = new ListNode(1); + ListNode p = new ListNode(2); + head.next = p; + p.next = null; + + boolean bool = hasCycle(head); + System.out.print(bool); + + } + + public static boolean hasCycle(ListNode head) { + if(head == null || head.next == null){ + return false; + } + + ListNode p = head; + ListNode q = head.next; + + while(p != q) { + if(q.next == null || q.next.next == null){ + return false; + } + + p = p.next; + q = q.next.next; + } + + return true; + } +} + + + diff --git a/Week_00/G20200343030395/LeetCode_1_395.java b/Week_00/G20200343030395/LeetCode_1_395.java index 524b02c7..283f1fb4 100644 --- a/Week_00/G20200343030395/LeetCode_1_395.java +++ b/Week_00/G20200343030395/LeetCode_1_395.java @@ -1,14 +1,17 @@ +package Week_00.G20200343030395; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + public class LeetCode_1_395 { public static void main(String[] args) { int[] nums = new int[]{0,0,0,0,1,1,2,3}; - Solution s = new Solution(); - int num = s.removeDuplicates(nums); + int num = removeDuplicates(nums); System.out.println(num); } -} -class Solution { - public int removeDuplicates(int[] nums) { + public static int removeDuplicates(int[] nums) { if(nums.length == 1) { return 1; } diff --git a/Week_00/G20200343030395/LeetCode_2_395.java b/Week_00/G20200343030395/LeetCode_2_395.java new file mode 100644 index 00000000..e8f40899 --- /dev/null +++ b/Week_00/G20200343030395/LeetCode_2_395.java @@ -0,0 +1,53 @@ +package Week_00.G20200343030395; + +import java.util.Arrays; + +public class LeetCode_2_395 { + public static void main(String[] args) { + int[] nums = new int[]{1,2,3,4,5,6,7,8,9}; + rotate(nums, 4); + System.out.println(Arrays.toString(nums)); + } + + public static void rotate(int[] nums, int k) { + k = k%nums.length;//取余,因为长7,移动7次,等于没动,取剩下的就行了 + + reverse(nums, 0, nums.length - 1);//全部翻转 + reverse(nums, 0, k - 1);//把前k个再翻转过来 + reverse(nums, k, nums.length - 1);//把后n-k个翻转过来 + } + + //翻转start到end的数组 + public static void reverse(int[] nums, int start, int end) { + while (start < end) { + //头尾互换 + int temp = nums[start]; + nums[start] = nums[end]; + nums[end] = temp; + //往中间缩 + start++; + end--; + } + } + + public static void rotateFor(int[] nums, int k) { + + k = k%nums.length;//取余,因为长7,移动7次,等于没动,取剩下的就行了 + + //移动k次 + for (int i=0; i 0; j--) { + nums[j] = nums[j-1]; + } + + //脑袋赋值为最后一个 + nums[0] = temp; + } + + + } +} diff --git a/Week_00/G20200343030395/LeetCode_3sum.java b/Week_00/G20200343030395/LeetCode_3sum.java new file mode 100644 index 00000000..b28ca77d --- /dev/null +++ b/Week_00/G20200343030395/LeetCode_3sum.java @@ -0,0 +1,60 @@ +package Week_00.G20200343030395; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class LeetCode_3sum { + + public static void main(String[] args) { + int[] nums = new int[]{-1, 0, 1, 2, -1, -4}; + //List> x = s.threeSum(nums); + List> x = threeSum(nums); + System.out.print(x); + } + + public static List> threeSum(int[] nums) { + List> x = new ArrayList(); + for(int i=0;i> threeSum2(int[] nums) { + Arrays.sort(nums); + List> ls = new ArrayList<>(); + + for (int i = 0; i < nums.length - 2; i++) { + if (i == 0 || (i > 0 && nums[i] != nums[i - 1])) { // 跳过可能重复的答案 + + int l = i + 1, r = nums.length - 1, sum = 0 - nums[i]; + while (l < r) { + if (nums[l] + nums[r] == sum) { + ls.add(Arrays.asList(nums[i], nums[l], nums[r])); + while (l < r && nums[l] == nums[l + 1]) l++; + while (l < r && nums[r] == nums[r - 1]) r--; + l++; + r--; + } else if (nums[l] + nums[r] < sum) { + while (l < r && nums[l] == nums[l + 1]) l++; // 跳过重复值 + l++; + } else { + while (l < r && nums[r] == nums[r - 1]) r--; + r--; + } + } + } + } + return ls; + } + + +} From 1880afd1bc8ef8a6b445445b5b8708685b7cef26 Mon Sep 17 00:00:00 2001 From: Huangzikun <381560728@qq.com> Date: Tue, 11 Feb 2020 21:59:20 +0800 Subject: [PATCH 0060/1268] =?UTF-8?q?=E7=AC=AC=E4=B8=89=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_00/G20200343030395/LeetCode_3_395.java | 60 +++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 Week_00/G20200343030395/LeetCode_3_395.java diff --git a/Week_00/G20200343030395/LeetCode_3_395.java b/Week_00/G20200343030395/LeetCode_3_395.java new file mode 100644 index 00000000..78047256 --- /dev/null +++ b/Week_00/G20200343030395/LeetCode_3_395.java @@ -0,0 +1,60 @@ +package Week_00.G20200343030395; + +public class LeetCode_3_395 { + public static void main(String[] args) { + ListNode l1 = new ListNode(1); + ListNode l2 = new ListNode(1); + + ListNode ret; + //l1是空的,直接返回l2 + if(l1 == null) { + return l2; + } + //同上 + if(l2 == null) { + return l1; + } + + //先取个头 + if(l1.val < l2.val) { + ret = l1; + l1 = l1.next; + } else { + ret = l2; + l2 = l2.next; + } + + //保存头,返回用 + ListNode head = ret; + + //循环,到其中一个到尾为止,谁小取谁 + while(l1 != null && l2 != null) { + if(l1.val < l2.val) { + ret.next = l1; + ret = ret.next; + l1 = l1.next; + } else { + ret.next = l2; + ret = ret.next; + l2 = l2.next; + } + } + + //把剩下的接上去 + if(l1 != null) { + ret.next = l1; + } + //把剩下的接上去 + if(l2 != null) { + ret.next = l2; + } + + //return head; + } + + public static class ListNode { + int val; + ListNode next; + ListNode(int x) { val = x; } + } +} From 8ece81e78ee6dea5e3b2b4483134aed0d78798d4 Mon Sep 17 00:00:00 2001 From: Huangzikun <381560728@qq.com> Date: Tue, 11 Feb 2020 22:03:52 +0800 Subject: [PATCH 0061/1268] note --- Week_00/G20200343030395/NOTE.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Week_00/G20200343030395/NOTE.md b/Week_00/G20200343030395/NOTE.md index 8d82b7b3..857cfd2a 100644 --- a/Week_00/G20200343030395/NOTE.md +++ b/Week_00/G20200343030395/NOTE.md @@ -15,3 +15,12 @@ } } ``` +## 2020/2/11 +* 视频进度:今日看完了第三课3,4 +* 题目 +[3sum](https://leetcode-cn.com/problems/3sum/) +暴力解,怎么去重? +[环形链表](https://leetcode-cn.com/problems/linked-list-cycle/) +双指针法,1快1慢 +* 备注 +链表问题一定要考虑边界情况,node是空的情况 From f4d18fb790d350d4b6a117a1f9684fcf6371a70c Mon Sep 17 00:00:00 2001 From: dinglei Date: Tue, 11 Feb 2020 22:58:10 +0800 Subject: [PATCH 0062/1268] add homework --- Week_01/G20200343030377/LeetCode_189_377.java | 29 +++++++++++++++++ Week_01/G20200343030377/LeetCode_1_377.java | 31 +++++++++++++++++++ Week_01/G20200343030377/LeetCode_25_377.java | 16 ++++++++++ Week_01/G20200343030377/LeetCode_289_377.java | 20 ++++++++++++ 4 files changed, 96 insertions(+) create mode 100644 Week_01/G20200343030377/LeetCode_189_377.java create mode 100644 Week_01/G20200343030377/LeetCode_1_377.java create mode 100644 Week_01/G20200343030377/LeetCode_25_377.java create mode 100644 Week_01/G20200343030377/LeetCode_289_377.java diff --git a/Week_01/G20200343030377/LeetCode_189_377.java b/Week_01/G20200343030377/LeetCode_189_377.java new file mode 100644 index 00000000..40da37d5 --- /dev/null +++ b/Week_01/G20200343030377/LeetCode_189_377.java @@ -0,0 +1,29 @@ +public class LeetCode_189_377 { + + public void rotate(int[] nums, int k) { + k = k % nums.length; + reverse(nums, 0, nums.length - 1); + reverse(nums, 0, k - 1); + reverse(nums, k, nums.length - 1); + } + + private void reverse(int[] nums, int start, int end) { + int length = end - start + 1; + for (int i = 0; i < length / 2; i++) { + int temp = nums[start + i]; + nums[start + i] = nums[end - i]; + nums[end - i] = temp; + } + } + + public void rotate1(int[] nums, int k) { + for (int i = 0; i < k; i++) { + int temp = nums[nums.length - 1]; + for (int j = nums.length - 1; j > 0; j--) { + nums[j] = nums[j - 1]; + } + nums[0] = temp; + } + } +} + diff --git a/Week_01/G20200343030377/LeetCode_1_377.java b/Week_01/G20200343030377/LeetCode_1_377.java new file mode 100644 index 00000000..85d16d48 --- /dev/null +++ b/Week_01/G20200343030377/LeetCode_1_377.java @@ -0,0 +1,31 @@ + +import java.util.HashMap; +import java.util.Map; + +public class LeetCode_1_377 { + + public int[] twoSum(int[] nums, int target) { + Map map = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + Integer left = map.get(nums[i]); + if (null != left) { + return new int[]{left, i}; + } else { + map.put(target - nums[i], i); + } + } + return new int[]{}; + } + + public int[] twoSum1(int[] nums, int target) { + for (int i = 0; i < nums.length - 1; i++) { + for (int j = i + 1; j < nums.length; j++) { + if (target == (nums[i] + nums[j])) { + return new int[]{i, j}; + } + } + } + return new int[]{}; + } +} + diff --git a/Week_01/G20200343030377/LeetCode_25_377.java b/Week_01/G20200343030377/LeetCode_25_377.java new file mode 100644 index 00000000..35fc4f34 --- /dev/null +++ b/Week_01/G20200343030377/LeetCode_25_377.java @@ -0,0 +1,16 @@ +public class LeetCode_25_377 { + + public int removeDuplicates(int[] nums) { + int i = 0; + for (int j = 1; j < nums.length; j++) { + if (nums[j] != nums[i]) { + if (j - i > 1) { + nums[i + 1] = nums[j]; + } + i++; + } + } + return i + 1; + } + +} diff --git a/Week_01/G20200343030377/LeetCode_289_377.java b/Week_01/G20200343030377/LeetCode_289_377.java new file mode 100644 index 00000000..f7adeea7 --- /dev/null +++ b/Week_01/G20200343030377/LeetCode_289_377.java @@ -0,0 +1,20 @@ +public class LeetCode_289_377 { + + public void moveZeroes(int[] nums) { + if (null == nums) { + return; + } + int j = 0; + for (int i = 0; i < nums.length; i++) { + if (nums[i] != 0) { + nums[j] = nums[i]; + if (i != j) { + nums[i] = 0; + } + j++; + } + } + } + +} + From 88907d98a02bea2dcf6858b0f83a94c821c8fedd Mon Sep 17 00:00:00 2001 From: xuzhougeng <18868192325m0@sina.cn> Date: Wed, 12 Feb 2020 13:10:35 +0800 Subject: [PATCH 0063/1268] 641 --- Week_01/G20200343030533/LeetCode_155_533.c | 102 +++++++++++++++++++++ Week_01/G20200343030533/LeetCode_641_533.c | 87 +++++++++++------- 2 files changed, 158 insertions(+), 31 deletions(-) create mode 100644 Week_01/G20200343030533/LeetCode_155_533.c diff --git a/Week_01/G20200343030533/LeetCode_155_533.c b/Week_01/G20200343030533/LeetCode_155_533.c new file mode 100644 index 00000000..6f014b70 --- /dev/null +++ b/Week_01/G20200343030533/LeetCode_155_533.c @@ -0,0 +1,102 @@ +#define STACKSZIE 100 +typedef struct { + int *arr; + int count; + int size; +} Stack; + +typedef struct { + Stack *data; + Stack *helper; + +} MinStack; + +/** initialize your data structure here. */ + +MinStack* minStackCreate() { + + MinStack *obj = (MinStack *)malloc(sizeof(MinStack)); + // 使用数组作为栈, 大小固定 + obj->data = (Stack *)malloc(sizeof(Stack)); + obj->data->arr = (int *)malloc(sizeof(int) * STACKSZIE); + obj->data->size = STACKSZIE; + obj->data->count = 0; + + obj->helper = (Stack *)malloc(sizeof(Stack)); + obj->helper->arr = (int *)malloc(sizeof(int) * STACKSZIE); + obj->helper->size = STACKSZIE; + obj->helper->count = 0; + + return obj; + +} + +void minStackPush(MinStack* obj, int x) { + + //辅助栈为空 + if ( obj->helper->count == 0 ){ + obj->helper->arr[obj->helper->count] = x; + obj->helper->count++; + } else { + //判断新增的元素是否小于等于辅助栈的顶部元素 + if ( x <= obj->helper->arr[obj->helper->count-1] ){ + obj->helper->arr[obj->helper->count] = x; + obj->helper->count++; + } + } + + obj->data->arr[obj->data->count] = x; + obj->data->count++; + +} + +void minStackPop(MinStack* obj) { + //检查是否为空 + if ( obj->data->count == 0 ) return ; + + //检查数据栈和辅助栈是否相同 + int x = obj->data->arr[obj->data->count-1]; + int y = obj->helper->arr[obj->helper->count-1]; + + if ( x == y) { + obj->helper->count--; + } + + obj->data->count--; + +} + +int minStackTop(MinStack* obj) { + + return obj->data->arr[obj->data->count-1]; + +} + +int minStackGetMin(MinStack* obj) { + + return obj->helper->arr[obj->helper->count-1]; + +} + +void minStackFree(MinStack* obj) { + + free(obj->data->arr); + free(obj->data); + free(obj->helper->arr); + free(obj->helper); + free(obj); +} + +/** + * Your MinStack struct will be instantiated and called as such: + * MinStack* obj = minStackCreate(); + * minStackPush(obj, x); + + * minStackPop(obj); + + * int param_3 = minStackTop(obj); + + * int param_4 = minStackGetMin(obj); + + * minStackFree(obj); +*/ diff --git a/Week_01/G20200343030533/LeetCode_641_533.c b/Week_01/G20200343030533/LeetCode_641_533.c index a441b4a3..8963529c 100644 --- a/Week_01/G20200343030533/LeetCode_641_533.c +++ b/Week_01/G20200343030533/LeetCode_641_533.c @@ -14,102 +14,127 @@ //代码思路参考了 https://leetcode-cn.com/problems/design-circular-deque/solution/shu-zu-shi-xian-de-xun-huan-shuang-duan-dui-lie-by/ - typedef struct { - int *arr; //存放数据 - int head; //对首 - int rear; //队尾 - int capacity; //容量 - + int *arr; + int head; + int tail; + int size; + } MyCircularDeque; /** Initialize your data structure here. Set the size of the deque to be k. */ - -//浪费一个空格用于检查空间 +bool myCircularDequeIsFull(MyCircularDeque* obj); +bool myCircularDequeIsEmpty(MyCircularDeque* obj); MyCircularDeque* myCircularDequeCreate(int k) { - MycircularDeque *obj = (MyCircularDeque *)malloc(sizeof(MyCircularDeque)); + + MyCircularDeque *obj = malloc(sizeof(MyCircularDeque) * (k+1)); + obj->arr = malloc(sizeof(int) * (k+1)); obj->head = 0; obj->tail = 0; - obj->arr = (int *)malloc(sizeof(int) * (k+1)); - obj->capacity = k; + obj->size = k + 1; + return obj; + } /** Adds an item at the front of Deque. Return true if the operation is successful. */ bool myCircularDequeInsertFront(MyCircularDeque* obj, int value) { - if (myCircularDequeIsFull(obj)) return false; - - obj->arr[obj->rear] = value; + if ( myCircularDequeIsFull(obj)) return false; + int pos = (obj->head+obj->size-1) % obj->size; + obj->arr[pos] = value; + obj->head = pos; + return true; + } /** Adds an item at the rear of Deque. Return true if the operation is successful. */ bool myCircularDequeInsertLast(MyCircularDeque* obj, int value) { + if ( myCircularDequeIsFull(obj)) return false; + obj->arr[obj->tail] = value; + obj->tail = (obj->tail+1) % obj->size; + + return true; + } /** Deletes an item from the front of Deque. Return true if the operation is successful. */ bool myCircularDequeDeleteFront(MyCircularDeque* obj) { + if ( myCircularDequeIsEmpty(obj)) return false; + obj->head = (obj->head+1) % obj->size; + return true; + } /** Deletes an item from the rear of Deque. Return true if the operation is successful. */ bool myCircularDequeDeleteLast(MyCircularDeque* obj) { - + if ( myCircularDequeIsEmpty(obj)) return false; + + obj->tail = (obj->tail-1+obj->size) % obj->size; + return true; } /** Get the front item from the deque. */ int myCircularDequeGetFront(MyCircularDeque* obj) { + if ( myCircularDequeIsEmpty(obj) ) return -1; + return obj->arr[obj->head]; + } /** Get the last item from the deque. */ int myCircularDequeGetRear(MyCircularDeque* obj) { + if ( myCircularDequeIsEmpty(obj) ) return -1; + + int pos = (obj->tail+obj->size-1) % obj->size; + + return obj->arr[pos]; + } /** Checks whether the circular deque is empty or not. */ bool myCircularDequeIsEmpty(MyCircularDeque* obj) { - return obj->head == obj->rear ? true : false; - + return (obj->head == obj->tail) ? true : false; + } /** Checks whether the circular deque is full or not. */ bool myCircularDequeIsFull(MyCircularDeque* obj) { - //队尾追到队首 - if ( (obj->rear + 1) % obj->capacity == obj->head) { - return true; - } else{ - return false; - } + return (obj->head == (obj->tail+1) % obj->size) ? true : false; + } void myCircularDequeFree(MyCircularDeque* obj) { free(obj->arr); free(obj); + return ; + } /** * Your MyCircularDeque struct will be instantiated and called as such: * MyCircularDeque* obj = myCircularDequeCreate(k); * bool param_1 = myCircularDequeInsertFront(obj, value); - + * bool param_2 = myCircularDequeInsertLast(obj, value); - + * bool param_3 = myCircularDequeDeleteFront(obj); - + * bool param_4 = myCircularDequeDeleteLast(obj); - + * int param_5 = myCircularDequeGetFront(obj); - + * int param_6 = myCircularDequeGetRear(obj); - + * bool param_7 = myCircularDequeIsEmpty(obj); - + * bool param_8 = myCircularDequeIsFull(obj); - + * myCircularDequeFree(obj); */ From 99df9a59f06cfbc47567faa4f54fe119643491c8 Mon Sep 17 00:00:00 2001 From: fpanda Date: Wed, 12 Feb 2020 13:12:04 +0800 Subject: [PATCH 0064/1268] Add LeetCode 066 Plus One --- Week_01/G20200343030449/LeetCode_066_449.cpp | 43 ++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 Week_01/G20200343030449/LeetCode_066_449.cpp diff --git a/Week_01/G20200343030449/LeetCode_066_449.cpp b/Week_01/G20200343030449/LeetCode_066_449.cpp new file mode 100644 index 00000000..ab666b17 --- /dev/null +++ b/Week_01/G20200343030449/LeetCode_066_449.cpp @@ -0,0 +1,43 @@ +class Solution { +public: + vector plusOne(vector& digits) { + stack resultTemp; + vector result; + + if (digits.size()==0) { + digits.push_back(0); + } + + auto isIncrement = true; + + for (int i = digits.size()-1; i >= 0; i--) { + auto num = digits[i]; + + isIncrement?num++:num; + + if (num > 9) { + isIncrement = true; + num -= 10; + } + else { + isIncrement = false; + } + + resultTemp.push(num); + } + + if (isIncrement) { + resultTemp.push(1); + } + + while (!resultTemp.empty()) { + auto i = resultTemp.top(); + resultTemp.pop(); + result.push_back(i); + } + + return result; + } +}; + + From 7f0ae724c3645e1805af860911b8045138cbacfe Mon Sep 17 00:00:00 2001 From: FPanda Date: Wed, 12 Feb 2020 13:22:42 +0800 Subject: [PATCH 0065/1268] Add some comments for 066 --- Week_01/G20200343030449/NOTE.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/Week_01/G20200343030449/NOTE.md b/Week_01/G20200343030449/NOTE.md index 50de3041..70ea7063 100644 --- a/Week_01/G20200343030449/NOTE.md +++ b/Week_01/G20200343030449/NOTE.md @@ -1 +1,15 @@ -学习笔记 \ No newline at end of file +学习笔记 + +066 加一: +因为数字的排列是从高位到低位,要处理的时候要从vector的最后开始处理,有点奇怪。 +所以一开始用了两个Stack来实现。 +第一步将数字压栈,这样得到的栈里的数字就是从低位到高位的,然后循环处理栈里的元素。 +第二步将处理好的数字压栈,这样得到的数字又是从高位到低位的,最后循环把栈里的元素push back到vector里。 + +时间复杂度o(n) 空间复杂度o(n),使用了两个额外的元素。 + +LeetCode的解答是在原数组上进行+1,当发现不需要再进行进位的时候直接返回,否则继续一直到最后如果没有返回说明还需要进一位。 +这时候有个技巧是在最后一位补0后在第一位补1。 + +在原vector基础上操作的问题是最后补1的时候需要移动整个数组,即使这样空间复杂度应该比我的也要更好一些。 +我上传了自己的实现方法,在下一次刷题的时候会使用like最多的方法。 From b5b519590917a0f4af4f30cd48f47d4869287011 Mon Sep 17 00:00:00 2001 From: xiebor <904558398@qq.com> Date: Wed, 12 Feb 2020 13:41:04 +0800 Subject: [PATCH 0066/1268] =?UTF-8?q?=E6=95=B0=E7=BB=84-=E9=93=BE=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../G20200343030437/linked-list-cycle.java | 13 ++++++++ .../merge-two-sorted-lists.java | 33 +++++++++++++++++++ .../remove-duplicates-from-sort-array.java | 23 +++++++++++++ .../G20200343030437/reverse-linked-list.java | 16 +++++++++ Week_01/G20200343030437/rotate-array.java | 20 +++++++++++ 5 files changed, 105 insertions(+) create mode 100644 Week_01/G20200343030437/linked-list-cycle.java create mode 100644 Week_01/G20200343030437/merge-two-sorted-lists.java create mode 100644 Week_01/G20200343030437/remove-duplicates-from-sort-array.java create mode 100644 Week_01/G20200343030437/reverse-linked-list.java create mode 100644 Week_01/G20200343030437/rotate-array.java diff --git a/Week_01/G20200343030437/linked-list-cycle.java b/Week_01/G20200343030437/linked-list-cycle.java new file mode 100644 index 00000000..ad9fc7ec --- /dev/null +++ b/Week_01/G20200343030437/linked-list-cycle.java @@ -0,0 +1,13 @@ +public boolean hasCycle(ListNode head) { + ListNode slow = head; + if (head == null) return false; + ListNode fast = head.next; + while (fast != slow) { + if (fast == null || fast.next == null) { + return false; + } + slow = slow.next; + fast = fast.next.next; + } + return true; + } diff --git a/Week_01/G20200343030437/merge-two-sorted-lists.java b/Week_01/G20200343030437/merge-two-sorted-lists.java new file mode 100644 index 00000000..f5f5f1f0 --- /dev/null +++ b/Week_01/G20200343030437/merge-two-sorted-lists.java @@ -0,0 +1,33 @@ +public ListNode mergeTwoLists(ListNode l1, ListNode l2) { + //本题没有多大技巧,无非就是利用几个o(1)的变量进行相互转换 + if (l1 == null) return l2; + if (l2 == null) return l1; + ListNode merge; + if (l1.val < l2.val) { + merge = l1; + l1 = l1.next; + } else { + merge = l2; + l2 = l2.next; + } + ListNode index = merge; + while (l1 != null && l2 != null) { + ListNode max; + if (l1.val < l2.val) { + max = l1; + l1 = l1.next; + } else { + max = l2; + l2 = l2.next; + } + index.next = max; + index = max; + } + if (l1 != null) { + index.next = l1; + } + if (l2 != null) { + index.next = l2; + } + return merge; + } diff --git a/Week_01/G20200343030437/remove-duplicates-from-sort-array.java b/Week_01/G20200343030437/remove-duplicates-from-sort-array.java new file mode 100644 index 00000000..58ae25ad --- /dev/null +++ b/Week_01/G20200343030437/remove-duplicates-from-sort-array.java @@ -0,0 +1,23 @@ +public int removeDuplicates(int[] nums) { + if (nums.length == 0 || nums.length == 1) return nums.length; + int j = 1; + int i = 0; + int index = 0; + for (; i < j; i++) { + + while (nums[i] == nums[j]){ + index++; + if(j >= nums.length - 1){ + break; + } + j++; + } + nums[i+1] = nums[j]; + j++; + if(j >= nums.length){ + break; + } + } + return nums.length - index; + + } diff --git a/Week_01/G20200343030437/reverse-linked-list.java b/Week_01/G20200343030437/reverse-linked-list.java new file mode 100644 index 00000000..afea7d52 --- /dev/null +++ b/Week_01/G20200343030437/reverse-linked-list.java @@ -0,0 +1,16 @@ +public ListNode reverseList(ListNode head) { + ListNode newhead = head; + ListNode newhead2 = head; + Stack stack = new Stack<>(); + + while (newhead != null) { + stack.push(newhead.val); + newhead = newhead.next; + } + + while(newhead2 != null) { + newhead2.val = stack.pop(); + newhead2 = newhead2.next; + } + return head; + } diff --git a/Week_01/G20200343030437/rotate-array.java b/Week_01/G20200343030437/rotate-array.java new file mode 100644 index 00000000..ef273ed9 --- /dev/null +++ b/Week_01/G20200343030437/rotate-array.java @@ -0,0 +1,20 @@ + public void rotate(int[] nums, int k) { + int length = nums.length; + k = k % length; + + int current; + int count = 0; + for (int i = 0; count < length; i++) { + int pre = nums[i]; + current = i; + do { + int next = (current + k) % length; + int temp = nums[next]; + + nums[next] = pre; + pre = temp; + current = next; + count++; + } while (i != current); + } + } From 73b4456dd48bd2e75a9191023ff99f8a98150bb3 Mon Sep 17 00:00:00 2001 From: fpanda Date: Wed, 12 Feb 2020 15:09:15 +0800 Subject: [PATCH 0067/1268] Add LeetCode 21 Merge Two Sorted Lists --- Week_01/G20200343030449/LeetCode_021_449.cpp | 33 ++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 Week_01/G20200343030449/LeetCode_021_449.cpp diff --git a/Week_01/G20200343030449/LeetCode_021_449.cpp b/Week_01/G20200343030449/LeetCode_021_449.cpp new file mode 100644 index 00000000..9381cf77 --- /dev/null +++ b/Week_01/G20200343030449/LeetCode_021_449.cpp @@ -0,0 +1,33 @@ +class Solution { +public: + ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { + if (l1 == nullptr) return l2; + if (l2 == nullptr) return l1; + + ListNode* newHead = (l1->val < l2->val)?l1:l2; + ListNode* sub = (newHead==l1)?l2:l1; + ListNode* main = newHead; + ListNode* last = main; + + while (main!=nullptr && sub!=nullptr) { + if (main->val > sub->val) { + last->next = sub; + sub = sub->next; + last->next->next = main; + last = last->next; + } + else { + last = main; + main = main->next; + } + + } + + if (sub!=nullptr) { + last->next = sub; + } + + return newHead; + + } +}; From ca53a01a922d1c64af1b311e3aa8b419b337d5d2 Mon Sep 17 00:00:00 2001 From: xuzhougeng <18868192325m0@sina.cn> Date: Wed, 12 Feb 2020 15:20:31 +0800 Subject: [PATCH 0068/1268] 041 --- Week_01/G20200343030533/LeetCdoe_041_533.c | 111 +++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 Week_01/G20200343030533/LeetCdoe_041_533.c diff --git a/Week_01/G20200343030533/LeetCdoe_041_533.c b/Week_01/G20200343030533/LeetCdoe_041_533.c new file mode 100644 index 00000000..9723b049 --- /dev/null +++ b/Week_01/G20200343030533/LeetCdoe_041_533.c @@ -0,0 +1,111 @@ +/*接雨水 + * 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 + * 例如[0,1,0,2,1,0,1,3,2,1,2,1], 输出6 +*/ + +//暴力法: 通过 224ms +//计算每个位置的左右最高的高度 +//然后选择两者的较小者减去本身的高度 +int trap(int* height, int heightSize){ + + int ans = 0; + + //第0个位置和最后一个位置无法接水 + for ( int i = 1; i < heightSize - 1; i++){ + int max_left = height[i]; + int max_right = height[i]; + for ( int j = i ;j >= 0; j--){ + max_left = (max_left > height[j]) ? max_left : height[j]; + } + for ( int j = i ;j < heightSize; j++){ + max_right = (max_right > height[j]) ? max_right : height[j]; + } + ans += (max_left < max_right ? max_left : max_right) - height[i]; + + } + return ans; + +} + +//空间换时间: 8ms +//两次遍历,存放给定位置的左右最大值 +int trap(int* height, int heightSize){ + if (heightSize == 0) return NULL; //特殊值 + int ans = 0; + int *max_left = malloc(sizeof(int) * heightSize); + int *max_right= malloc(sizeof(int) * heightSize); + //记录每个位置的最大左边界 + max_left[0] = height[0]; + for (int i = 1; i < heightSize; i++){ + max_left[i] = height[i] > max_left[i-1] ? height[i] : max_left[i-1]; + } + //记录每个位置的最大右边界 + max_right[heightSize-1] = height[heightSize-1]; + for (int i = heightSize-2; i >= 0; i--){ + max_right[i] = height[i] > max_right[i+1] ? height[i] : max_right[i+1]; + } + + for (int i = 1; i < heightSize - 1; i++){ + ans += (max_left[i] < max_right[i] ? max_left[i] : max_right[i]) - height[i]; + } + + free(max_left); + free(max_right); + return ans; +} + +//栈: +typedef struct { + int *arr; + int count; +} Stack; + +int peek(Stack *st){ + return st->arr[st->count-1]; +} + +void pop(Stack *st){ + st->count--; + return; +} + +void push(Stack *st, int val){ + + st->arr[st->count] = val; + st->count++; + return ; +} + +bool empty(Stack *st){ + return st->count == 0 ? true : false; +} + +int min(int a, int b){ + return a > b ? b : a; +} + +int trap(int* height, int heightSize){ + if (heightSize == 0) return NULL; + + int ans = 0, current = 0; + Stack * st = malloc(sizeof(Stack)); + st->arr = malloc(sizeof(int) * (heightSize+1)); + st->count = 0; + + while( current < heightSize){ + while( !empty(st) && height[current] > height[peek(st)]){ + int top = peek(st); + pop(st); + if ( empty(st)) break; + int distance = current - peek(st) - 1; + int bounded_height = min(height[current], height[peek(st)]) -height[top]; + ans += distance * bounded_height; + } + push(st, current++); + } + return ans; + + +} + + From b6d66b5ef7ff2c64a7429104d25cd379403b74c0 Mon Sep 17 00:00:00 2001 From: Kimmy <952451021@qq.com> Date: Wed, 12 Feb 2020 23:58:44 +0800 Subject: [PATCH 0069/1268] =?UTF-8?q?=C3=A5=C2=A2591-Week=2001?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030591/LeetCode_155_591.java | 40 ++++++ Week_01/G20200343030591/LeetCode_20_591.java | 60 +++++++++ Week_01/G20200343030591/LeetCode_239_591.java | 42 +++++++ Week_01/G20200343030591/LeetCode_42_591.java | 65 ++++++++++ Week_01/G20200343030591/LeetCode_641_591.java | 114 ++++++++++++++++++ 5 files changed, 321 insertions(+) create mode 100644 Week_01/G20200343030591/LeetCode_155_591.java create mode 100644 Week_01/G20200343030591/LeetCode_20_591.java create mode 100644 Week_01/G20200343030591/LeetCode_239_591.java create mode 100644 Week_01/G20200343030591/LeetCode_42_591.java create mode 100644 Week_01/G20200343030591/LeetCode_641_591.java diff --git a/Week_01/G20200343030591/LeetCode_155_591.java b/Week_01/G20200343030591/LeetCode_155_591.java new file mode 100644 index 00000000..03780c5a --- /dev/null +++ b/Week_01/G20200343030591/LeetCode_155_591.java @@ -0,0 +1,40 @@ +class MinStack { + + + /** + * 用两个栈实现,普通栈和只放最小栈的栈 (永远保证栈顶是最小的值可以O(1)的获取) + * 入栈:只有栈顶元素大于当前要入栈的元素 最小栈才能放值 + * 出栈:只有最小栈与普通栈值一样 才能出栈 + * 获取栈顶元素:用的是普通栈的值 + * 获取最小值:用的是最小栈 + */ + + Stack stack; + Stack minStack; + + /** initialize your data structure here. */ + public MinStack() { + stack = new Stack<>(); + minStack = new Stack<>(); + } + + public void push(int x) { + stack.push(x); + if (minStack.isEmpty() || minStack.peek() >= x) { + minStack.push(x); + } + } + + public void pop() { + if (stack.pop().equals(minStack.peek())) + minStack.pop(); + } + + public int top() { + return stack.peek(); + } + + public int getMin() { + return minStack.peek(); + } +} \ No newline at end of file diff --git a/Week_01/G20200343030591/LeetCode_20_591.java b/Week_01/G20200343030591/LeetCode_20_591.java new file mode 100644 index 00000000..37625514 --- /dev/null +++ b/Week_01/G20200343030591/LeetCode_20_591.java @@ -0,0 +1,60 @@ + +class Solution { + + private static final Integer CACHE_NUMBER = 3; + + public static Map cache = new HashMap<>(CACHE_NUMBER); + + /** + * 题目名称:有效的括号 + * 思路解析: + * 1、先把所有右括号当做key放入 哈希表中 + * 2、判断是否是左括号 是则入栈,不是则表示是不合法的括号 + * 3、判断是否为右括号,如果是右括号,则与栈顶元素匹配出栈,不是则为非法括号 + * 4、最后如果循环完成,栈为空则表示所有扩好都匹配上了 + * + * @param nums + * @return + */ + public boolean isValid(String s) { + cache.put('}', '{'); + cache.put(')', '('); + cache.put(']', '['); + Stack stack = new Stack(); + for (Character item : s.toCharArray()) { + // 先判断左括号 如果加入的是左括号 则可以加入 是右括号 则是不正确的 + if (!cache.containsKey(item)) { + stack.push(item); + // 判断是否栈为空或者栈顶元素与当前存放的元素无法匹配 则为不和发括号组合 + } else if (stack.isEmpty() || stack.pop() != cache.get(item)) { + return false; + } + } + return stack.isEmpty(); + } + + /** + * 国际站java解法 + * @return + */ + public boolean isValid(String s) { + + Stack stack = new Stack(); + for (Character item : s.toCharArray()) { + if (item=='(') { + stack.push(")"); + } else if (item=='[') { + stack.push("]"); + } else if (item=='{') { + stack.push("}"); + } else if (stack.isEmpty() || stack.pop() != item) { + return false; + } + } + return stack.isEmpty(); + } + +} + + + diff --git a/Week_01/G20200343030591/LeetCode_239_591.java b/Week_01/G20200343030591/LeetCode_239_591.java new file mode 100644 index 00000000..b39170df --- /dev/null +++ b/Week_01/G20200343030591/LeetCode_239_591.java @@ -0,0 +1,42 @@ +class Solution { + +// 输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3 +// 输出: [3,3,5,5,6,7] +// +// 解释过程中队列中都是具体的值,方便理解,具体见代码。 +// 初始状态:L=R=0,队列:{} +// i=0,nums[0]=1。队列为空,直接加入。队列:{1} +// i=1,nums[1]=3。队尾值为1,3>1,弹出队尾值,加入3。队列:{3} +// i=2,nums[2]=-1。队尾值为3,-1<3,直接加入。队列:{3,-1}。此时窗口已经形成,L=0,R=2,result=[3] +// i=3,nums[3]=-3。队尾值为-1,-3<-1,直接加入。队列:{3,-1,-3}。队首3对应的下标为1,L=1,R=3,有效。result=[3,3] +// i=4,nums[4]=5。队尾值为-3,5>-3,依次弹出后加入。队列:{5}。此时L=2,R=4,有效。result=[3,3,5] +// i=5,nums[5]=3。队尾值为5,3<5,直接加入。队列:{5,3}。此时L=3,R=5,有效。result=[3,3,5,5] +// i=6,nums[6]=6。队尾值为3,6>3,依次弹出后加入。队列:{6}。此时L=4,R=6,有效。result=[3,3,5,5,6] +// i=7,nums[7]=7。队尾值为6,7>6,弹出队尾值后加入。队列:{7}。此时L=5,R=7,有效。result=[3,3,5,5,6,7] + + public int[] maxSlidingWindow(int[] nums, int k) { + if(nums == null || nums.length < 2) return nums; + // 双向队列 保存当前窗口最大值的数组位置 保证队列中数组位置的数值按从大到小排序 + LinkedList queue = new LinkedList(); + // 结果数组 + int[] result = new int[nums.length-k+1]; + // 遍历nums数组 + for(int i = 0;i < nums.length;i++){ + // 保证从大到小 如果前面数小则需要依次弹出,直至满足要求 + while(!queue.isEmpty() && nums[queue.peekLast()] <= nums[i]){ + queue.pollLast(); + } + // 添加当前值对应的数组下标 + queue.addLast(i); + // 判断当前队列中队首的值是否有效 + if(queue.peek() <= i-k){ + queue.poll(); + } + // 当窗口长度为k时 保存当前窗口中最大值 + if(i+1 >= k){ + result[i+1-k] = nums[queue.peek()]; + } + } + return result; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030591/LeetCode_42_591.java b/Week_01/G20200343030591/LeetCode_42_591.java new file mode 100644 index 00000000..052888ed --- /dev/null +++ b/Week_01/G20200343030591/LeetCode_42_591.java @@ -0,0 +1,65 @@ + +class Solution { + + /** + * 暴力法 + * 每轮遍历找到 最大左右边界 计算并累加面积 + * 直到都遍历完 + * @param height + * @return + */ + public int trap(int[] height) { + int n = height.length; + int area = 0; + for (int i=1; i < n - 1;i++) { + int maxLeft = 0, maxRight = 0; + // 找到左边界 + for (int j=i; j >= 0; j--) { + maxLeft = Math.max(maxLeft, height[j]); + } + // 找到右边界 + for (int j=i; j < n; j++) { + maxRight = Math.max(maxRight, height[j]); + } + + area += Math.min(maxLeft, maxRight) - height[i]; + } + return area; + } + + /** + * 双指针法 + * 1、定义两个指针 一个指向最左边,一个指向最右边 + * 2、如果左边的值比右边的值小,则更新左边的数据 + * 3、反之,则更新右边数据 + * 4、左边和右边相遇则结束 + * @param height + * @return + */ + public int trap(int[] height) { + int n = height.length; + int left = 0, right = height.length - 1; + int max_left = 0, max_right = 0; + int trapArea = 0; + while(left < right) { + // 左边小 则更新左边 + if (height[left] < height[right]) { + if (height[left] > max_left) { + max_left = height[left]; + } else { + trapArea += max_left - height[left]; + } + left++; + // 右边小,则更新右边 + } else { + if (height[right] > max_right) { + max_right = height[right]; + } else { + trapArea += max_right - height[right]; + } + right--; + } + } + return trapArea; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030591/LeetCode_641_591.java b/Week_01/G20200343030591/LeetCode_641_591.java new file mode 100644 index 00000000..5304b98a --- /dev/null +++ b/Week_01/G20200343030591/LeetCode_641_591.java @@ -0,0 +1,114 @@ +class Solution { + + // 1、不用设计成动态数组,使用静态数组即可 + // 2、设计 head 和 tail 指针变量 + // 3、head == tail 成立的时候表示队列为空 + // 4、tail + 1 == head + + private int capacity; + private int[] arr; + private int front; + private int rear; + + /** + * Initialize your data structure here. Set the size of the deque to be k. + */ + public MyCircularDeque(int k) { + capacity = k + 1; + arr = new int[capacity]; + + // 头部指向第 1 个存放元素的位置 + // 插入时,先减,再赋值 + // 删除时,索引 +1(注意取模) + front = 0; + // 尾部指向下一个插入元素的位置 + // 插入时,先赋值,再加 + // 删除时,索引 -1(注意取模) + rear = 0; + } + + /** + * Adds an item at the front of Deque. Return true if the operation is successful. + */ + public boolean insertFront(int value) { + if (isFull()) { + return false; + } + front = (front - 1 + capacity) % capacity; + arr[front] = value; + return true; + } + + /** + * Adds an item at the rear of Deque. Return true if the operation is successful. + */ + public boolean insertLast(int value) { + if (isFull()) { + return false; + } + arr[rear] = value; + rear = (rear + 1) % capacity; + return true; + } + + /** + * Deletes an item from the front of Deque. Return true if the operation is successful. + */ + public boolean deleteFront() { + if (isEmpty()) { + return false; + } + // front 被设计在数组的开头,所以是 +1 + front = (front + 1) % capacity; + return true; + } + + /** + * Deletes an item from the rear of Deque. Return true if the operation is successful. + */ + public boolean deleteLast() { + if (isEmpty()) { + return false; + } + // rear 被设计在数组的末尾,所以是 -1 + rear = (rear - 1 + capacity) % capacity; + return true; + } + + /** + * Get the front item from the deque. + */ + public int getFront() { + if (isEmpty()) { + return -1; + } + return arr[front]; + } + + /** + * Get the last item from the deque. + */ + public int getRear() { + if (isEmpty()) { + return -1; + } + // 当 rear 为 0 时防止数组越界 + return arr[(rear - 1 + capacity) % capacity]; + } + + /** + * Checks whether the circular deque is empty or not. + */ + public boolean isEmpty() { + return front == rear; + } + + /** + * Checks whether the circular deque is full or not. + */ + public boolean isFull() { + // 注意:这个设计是非常经典的做法 + return (rear + 1) % capacity == front; + } + +} \ No newline at end of file From e92143d3137960e4e84d6ccd7bd2065a58debb1a Mon Sep 17 00:00:00 2001 From: xManApp <952451021@qq.com> Date: Thu, 13 Feb 2020 00:06:20 +0800 Subject: [PATCH 0070/1268] Delete .gitignore --- .gitignore | 51 --------------------------------------------------- 1 file changed, 51 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 37e7b7e6..00000000 --- a/.gitignore +++ /dev/null @@ -1,51 +0,0 @@ -# Created by .ignore support plugin (hsz.mobi) -### JetBrains template -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff: -.idea/**/workspace.xml -.idea/**/tasks.xml -.idea/dictionaries - -# Sensitive or high-churn files: -.idea/**/dataSources/ -.idea/**/dataSources.ids -.idea/**/dataSources.xml -.idea/**/dataSources.local.xml -.idea/**/sqlDataSources.xml -.idea/**/dynamic.xml -.idea/**/uiDesigner.xml - -# Gradle: -.idea/**/gradle.xml -.idea/**/libraries - -# CMake -cmake-build-debug/ - -# Mongo Explorer plugin: -.idea/**/mongoSettings.xml - -## File-based project format: -*.iws - -## Plugin-specific files: - -# IntelliJ -out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Cursive Clojure plugin -.idea/replstate.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties From 73f9ad78811273f1dad6504d405a88ceb76207a2 Mon Sep 17 00:00:00 2001 From: xManApp <952451021@qq.com> Date: Thu, 13 Feb 2020 00:06:31 +0800 Subject: [PATCH 0071/1268] Delete Administrator.xml --- .idea/dictionaries/Administrator.xml | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 .idea/dictionaries/Administrator.xml diff --git a/.idea/dictionaries/Administrator.xml b/.idea/dictionaries/Administrator.xml deleted file mode 100644 index d87a1619..00000000 --- a/.idea/dictionaries/Administrator.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file From 799355de643fe861ece78be072ef342bfd9cc9cf Mon Sep 17 00:00:00 2001 From: xManApp <952451021@qq.com> Date: Thu, 13 Feb 2020 00:06:40 +0800 Subject: [PATCH 0072/1268] Delete encodings.xml --- .idea/encodings.xml | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 .idea/encodings.xml diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index 4987ecab..00000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file From b7274f9291b2d9a439b2f546b5fe92e41c8fca6b Mon Sep 17 00:00:00 2001 From: xManApp <952451021@qq.com> Date: Thu, 13 Feb 2020 00:06:50 +0800 Subject: [PATCH 0073/1268] Delete Project_Default.xml --- .idea/inspectionProfiles/Project_Default.xml | 36 -------------------- 1 file changed, 36 deletions(-) delete mode 100644 .idea/inspectionProfiles/Project_Default.xml diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index 6560a989..00000000 --- a/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - \ No newline at end of file From 1c26a4a1d962407455745431cdb79f5904359e7a Mon Sep 17 00:00:00 2001 From: xManApp <952451021@qq.com> Date: Thu, 13 Feb 2020 00:06:59 +0800 Subject: [PATCH 0074/1268] Delete misc.xml --- .idea/misc.xml | 94 -------------------------------------------------- 1 file changed, 94 deletions(-) delete mode 100644 .idea/misc.xml diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 69eea533..00000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1.8 - - - - - - - - 1.8 - - - - - - - - - - - - - - - \ No newline at end of file From e7494aa17f0e1b5773c8a0a50ac72d11dbaca33d Mon Sep 17 00:00:00 2001 From: xManApp <952451021@qq.com> Date: Thu, 13 Feb 2020 00:07:08 +0800 Subject: [PATCH 0075/1268] Delete modules.xml --- .idea/modules.xml | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 .idea/modules.xml diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 6d1a9eab..00000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file From 495722815fbe01b4c7587f78b5dd38265fdc5cd5 Mon Sep 17 00:00:00 2001 From: xManApp <952451021@qq.com> Date: Thu, 13 Feb 2020 00:07:19 +0800 Subject: [PATCH 0076/1268] Delete vcs.xml --- .idea/vcs.xml | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 .idea/vcs.xml diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1ddf..00000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file From 25367a43593e7514efbfa91cbfcb968207360814 Mon Sep 17 00:00:00 2001 From: xManApp <952451021@qq.com> Date: Thu, 13 Feb 2020 00:07:41 +0800 Subject: [PATCH 0077/1268] Delete algorithm006-class01.iml --- algorithm006-class01.iml | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 algorithm006-class01.iml diff --git a/algorithm006-class01.iml b/algorithm006-class01.iml deleted file mode 100644 index 8021953e..00000000 --- a/algorithm006-class01.iml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file From d0ff1a282c1f65eb907c2ab3189c96cfe264ca51 Mon Sep 17 00:00:00 2001 From: wangzihao Date: Thu, 13 Feb 2020 10:43:47 +0800 Subject: [PATCH 0078/1268] =?UTF-8?q?=E3=80=90567-Week0=E3=80=91=E7=AC=AC?= =?UTF-8?q?=E4=B8=80=E8=AF=BE=E6=95=B0=E6=8D=AE=E7=BB=93=E6=9E=9C=E4=B8=8E?= =?UTF-8?q?=E7=AE=97=E6=B3=95=E6=80=BB=E8=A7=88=E8=84=91=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_00/G20200343030567/NOTE.md | 7 ++++++- ...04\344\270\216\347\256\227\346\263\225.png" | Bin 0 -> 479202 bytes ...66\345\260\226\346\260\264\345\271\263.png" | Bin 0 -> 641263 bytes 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 "Week_00/G20200343030567/\346\225\260\346\215\256\347\273\223\346\236\204\344\270\216\347\256\227\346\263\225.png" create mode 100644 "Week_00/G20200343030567/\351\241\266\345\260\226\346\260\264\345\271\263.png" diff --git a/Week_00/G20200343030567/NOTE.md b/Week_00/G20200343030567/NOTE.md index 50de3041..88a8f3cb 100644 --- a/Week_00/G20200343030567/NOTE.md +++ b/Week_00/G20200343030567/NOTE.md @@ -1 +1,6 @@ -学习笔记 \ No newline at end of file +# 第一课 数据结果与算法总览 + +## 作业 + +![顶尖水平](./顶尖水平.png) +![数据结构与算法](./数据结构与算法.png) \ No newline at end of file diff --git "a/Week_00/G20200343030567/\346\225\260\346\215\256\347\273\223\346\236\204\344\270\216\347\256\227\346\263\225.png" "b/Week_00/G20200343030567/\346\225\260\346\215\256\347\273\223\346\236\204\344\270\216\347\256\227\346\263\225.png" new file mode 100644 index 0000000000000000000000000000000000000000..e71a97a74f322f0eee1568919648ac756dd5f609 GIT binary patch literal 479202 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 z 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 z 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φxgtR9xEHXP_5R5O{KnE^|G>++dJ`J8jPoAQ_yw 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%0AU<8tXA;kalEj-I&6tHomtz(w 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]{tJuJ7F~X@Kds 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

a4PNAQN=gV+5p*3dhCpzw_c>Qi(5aB`M@$(y+1 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

XyFZRqEwJ=$AVI} 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 z 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%0Di)|g`jHA38gWrs4)8!1U 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 Date: Thu, 13 Feb 2020 11:30:44 +0800 Subject: [PATCH 0079/1268] nt --- .DS_Store | Bin 0 -> 12292 bytes Week_00/.DS_Store | Bin 0 -> 6148 bytes Week_01/.DS_Store | Bin 0 -> 40964 bytes Week_01/G20200343030371/.DS_Store | Bin 0 -> 6148 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 .DS_Store create mode 100644 Week_00/.DS_Store create mode 100644 Week_01/.DS_Store create mode 100644 Week_01/G20200343030371/.DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..a6f79292d1715ebf3b9392c902be8f0b82abe6a8 GIT binary patch literal 12292 zcmeHNYitx%6uxKsnrR0*l*&styLE+DEVA2eyHrrN?SedtRJWz&A?-fKc4WI#cD7rf zK&pvGMWX!UVN?xn2&o~2aG0qS1uVt~XBj>i64lc@DHUJ|V6MfC_aY$@ z*+P1Vn|Q**ldP}30vkf2_zN+YkS;`Tz^@L5V@en`r^16VSxvg#XTVlaSX5lXaiv`8 zl+uTT{mO7K8A=YREuq9l`qUmu_J{TR4n>KL--p8MWNElZtZY@{$&ehE5?Wu3G0vlh0f0toJtV+QoA-=X&m4 z**ma($H>lIyAL8-OhCs(Q#ljk*FzL=y3g@a>&EhcWK}`m zVgRd-ymyG3pLfscE`4{^zQgvdUwp1mI+hrt5&zIc|hn9D^j@eT|1bRmAJZ2N~kD% z#BvpPqAMdxygeaNeOE+@4GqNA9&uVE6pIYSLP@DP77NNdBrGdeBMBuIYgbg6HnYAv zDQ!zq-6U1_231KUTeZfzWo(~Wi9@RNkc5rODJg(Wt0M46r_OZTQL~`Vx5U3}tX!N{ zAyf)8x>B+#hhtLbupCYHuMepaDIS&MeH(Do98b!R$Wnrz2DN-gJTxGURm_?_=hoZo z_H65PE8Rn3dFzmz+%CE}j`dMxck$vo+@>g^SffN~i&0Huud-Kj+(ug7nvn3yiiP?1 zT3!rs9V!l&HL+0e@S@6hY{5eVR<&MeWud>_M)AHtMRElyO=kll6%hlztVcc*r zL5SuMm*35vd3=}KNgWB0HquKHWQ6P``^jPQHaSL)lMl(KWQ?36-;!U*ujC^6ja&vB za8Lnrzy)(*9#n%HJm7_TXogj=8rq;6LJ)>1Nbo4Akc1Qr!%lbto`k31X?PCy!vQ!1 zFTfFa9o~R9;axZZAHYfY2*%(`_#S?M3-BXcge$fpTd8e2gK5*364IU?hF)HYGJ8&_ zDg8XicF3IZj^+2SSh?yNX8hTyl;+bbZ<#UEId}fT`lkC@#>tTN`x|+vQIBy;<6N3k z+E1QIWHuiJM<-HK+Lmith$VCiabwiF>UM`iqy%J-^Q!UDh7*K6-c{=m!~�uNk{N zfkhBZH2TPH%0aymhVJ$oeLFj-^*bKc$-U!ln02J5?38e5&*bSrb7(5PpU@sE* zdDsUBk-#s)OYkzh3P<5Jr1CL1j#PdRseBrVd=}1U5w|UqxbV$n;tnW*fPRq49X@h; z-!s3TXg0Ho{tc_ae#64Re?>dbnkK1WA|6xXeW;<6D^pvScVVeBqCNTkXXa?pY65L; ztGsBvdGUCScuFhJnBzgK2|T&2^5SX8i>JYe$Fc1Tb3AA@fhV_BUObI?@iZFoTzczk zb3AA@fhV_BUOc|Mczi}YXRmx`jt8wK@Z`42i)T?@Jd2EYp1t!Yb3AA@fhV_>2_8BF ztz>z?@_^+5%LA4N{(%QD=8q?EcauIMlVrw%Rc@>ueSk1?)CLF1%2*-Ij#u2q;}tIV&feHvPAhz^6lpIPQbXha%X0t!k6Bq)%LA4NZb%P6VIUZ2 z!J(xCBH5#)v34isUd%L6yHR?B3GcN~JW4GTk5UW8qtwGenvGw#9c2==nEvxW0sM;r TMJv4G@>}b_X?W$DT>t+9K(Un| literal 0 HcmV?d00001 diff --git a/Week_00/.DS_Store b/Week_00/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..41835b4ae6aa27e4101ad48953ce3c314521de7b GIT binary patch literal 6148 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 J_GWpj;Xm-mHa-9V literal 0 HcmV?d00001 diff --git a/Week_01/G20200343030371/.DS_Store b/Week_01/G20200343030371/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f7567bc31e4c4cddec735fdbf29ada8ed72024f4 GIT binary patch literal 6148 zcmeHKJ5Iwu5SY%XoPrxr@#YgmSS2L| zypd*~cXr;c{fZrri0I;JJr|jYNCP*N7aMA`b@R$58JPmr_P8JVZIyLCVBAT6`}($d zm@j|uJ>Cypx7rLVCKn1=Ou=}CF4co*q(60^*-U0yaH{K1;-b(Ec=g9;3)W{aUgN4#WS zn>YprUDQv;K6$cchoXKu;>FWN+dz&~fC?Nda1qm))&Cp#iT?kX#2FQ!0)I*Yop#G^ zfltcXT78_=+5*3W9}Kykj=@VY&`U8UR*J8_ Date: Thu, 13 Feb 2020 12:07:45 +0800 Subject: [PATCH 0080/1268] first commit --- Week_01/G20200343030635/id635/1.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Week_01/G20200343030635/id635/1.cpp diff --git a/Week_01/G20200343030635/id635/1.cpp b/Week_01/G20200343030635/id635/1.cpp new file mode 100644 index 00000000..bb19e15d --- /dev/null +++ b/Week_01/G20200343030635/id635/1.cpp @@ -0,0 +1,19 @@ +class Solution { +public: + vector twoSum(vector& nums, int target) { + map a_map; + vector b_vec(2,-1); + for(int i=0;i0) + { + b_vec[0]=a_map[target-nums[i]]; + b_vec[1]=i; + break; + } + a_map[nums[i]]=i; + } + return b_vec; + } +}; From 2e4c07f121f154fac0cff7591cda0461b562c22a Mon Sep 17 00:00:00 2001 From: sunshined Date: Thu, 13 Feb 2020 13:40:29 +0800 Subject: [PATCH 0081/1268] =?UTF-8?q?631-Week=2000=20=E6=95=B4=E7=90=86?= =?UTF-8?q?=E8=87=AA=E6=88=91=E7=9F=A5=E8=AF=86=E8=84=91=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +++ ...5\350\256\255\347\273\203\350\220\245.xmind" | Bin 0 -> 34174 bytes 2 files changed, 3 insertions(+) create mode 100644 .gitignore create mode 100644 "Week_00/G20200343030631/\347\256\227\346\263\225\350\256\255\347\273\203\350\220\245.xmind" diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..26af9a84 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/workspace.xml +.idea diff --git "a/Week_00/G20200343030631/\347\256\227\346\263\225\350\256\255\347\273\203\350\220\245.xmind" "b/Week_00/G20200343030631/\347\256\227\346\263\225\350\256\255\347\273\203\350\220\245.xmind" new file mode 100644 index 0000000000000000000000000000000000000000..1b531a0b945ebe6bc4741059de198c16412d1ece GIT binary patch literal 34174 zcmV)RK(oJ4O9KQ7000000P-wNPyhe`000000000001E&B090soZDMX=X>4;ZP)h>@ z3IG5A2mtadO;Bs2?XBff008b`000;O002~Ib!}p9VQFl0FLY>iZDMX=X>2ZVZfESf z_g7O*+cpe{N)Z835Ky`zU8RFmMVj;up;!PR5Ht{auPV}eM`=<5QbR(Ciel(U3mt@z z0HH(Z<=x!Z_1y2b-v8iR>&Xv0E0aC5&pGRH?3sD5ud7Z+!$w0!MnnU zMqWjA323pE?WrOo<08|1qGIfAvpRLT@%r$|+2;D1>-CE&l-GYvGwE0Vy7}@~)Vg^3>uAkeR9YZ_f|68Ux)x7RTVOFN(SZsT)0#z9;iaXeUpm0g2^bT{&TrW zt}04T@$V0=U}YR76*7Tn$QJ%TH*hIq7Fd=4JIK3iGHz+8wN@Czf7_^#k1kOCcfX@V`pS}|XawO6sGc&WWsHjNwPUxQ%bK$$2-k`Gb z@}jabEoU&er%K>IeUN~v+}-DeDOH8?Lw1kW(bD8;*FfZSEns+ks>fnKcVkMS!}*MZ zFH#}N*KUG2T zT00l>>;JgZUuwkfG}9W;D5&Gg2w3PLEd#V`l6;aQ#E`neyjsx&9@@_&5#k{{-Qvg6G95nonaTYEV1#twVJ~iLxie_+ zGYrL-lkfjxu}$_{L#m@ZmUvif{i~fqBY*pBcKMS3bva{m_5^4b~c2 z6N6j+)qHEd*{LDlawVRKx2t-&w>Cv9HPEF2SvswF!w(1+2?)k^q9Me95!A=TALX4L z^WW)r-hiFvwx}*qtZXfG=}{JGvg2CrWV$ge16okGF7 z4vM4@my_bH41z#T!W2~3f&61d_Cz#9IiAwA!kn9qj!wXqL?V6uRL=0r^%Q=xr+B>a zI78kGqV;WCoZn2{k@g0ZcGyN0!p(=gbnfDofKNKLAlWHoY5h+R2sL)!DVWGsZMD-x zQ>xIXmds){*}LOFfO7=y|IJ=^ReCV7Oyh<=X_)k$j}hRlETTaobw&Dji~RmRtJ1`X zU<%sQ&J$%K4FgoWv!@4e@QsBu+fE?<#m-LFgBAe0il0^S)*(|>qb6O-g=ExUow3dGNM*c0KzIq>X@O8Txb0RsouAKApTx&b#sbGG}_+K1urm4$!NueuiNbh;VFy z=0?O1-k@QG*21HRBNolxrv2*a(dWsx704>B9Wvx0#}_@qcVncd@7tc8?xDBYiiXD* z4M9XWBDbQpSI*GNN(csn;kD0f(c|@Cen8(ZPH(UzxVS?}HX~GJr)FN)X&+1a*#t_12?amdDsiYx`)ChIn|xxR&qkijxh` zpnkb6yUW**60phKGL7k|Cp&9H|A%_E&=TFvw+!V%``_mDfjq4I1W4nTsID6*+fwzqW znu3{)*{4~*0)kWA=;{Xp8dm5O{>vI*Dc6w(SZwO<>V&lY(X>aF$}2XX`iWN)SAKM9 zR90Sk;Lv@u+U?=aOpFIjMX}JS$j?0*(UVq`6=99V83q{d<$^vixcVJ^%j7@ zXqg;jBe$-3rMdM6kudH5!>+;U(nw58Mdj?sUAkIv$KGeGpN8iL;I|S)uK2y}^0>k+ zZL89&P8OoYWXFdX@Xg+3Hl7`G%#-9a5wonrkWg&TJbs$CtzMO1(eL*=YB3jhT!}>; zP$NgGxA8q)H?wp0diimppvJE~Bh3)8G9+B)6DjABPt6sMM>4W8-^-&X-iA;5@5rzK z)z<)s^!F{gS=-F}JA--)TU}y$@**l`k8jGn$v?(RqZ0r#5dzSvAg*`Z2!_>8&lu2S zNCPqT@F;xJFxp*-l7XrTNRlfG8YkL<`AxA)sr7r)epSQ(znw+yl5FUQTRyl1hn#V) z6fHWW%5s?hvMQ!WJddK%>*EN669_?U+n+n;H=sYbXZhKMh1pYzS-lf z2edZ;lx%Ic-rJA)@+a1Ey{3J(+US+)N=dCpYv9(Brr3y24A8cI?IofHhR*BEzz;|a zEr2)g;3psOQJ`{{KeCFC4|$%DuxZhvC``p$_F`2GosnBTT1o2w*iD;mTW_BS{INR92;H_OS-jL z0>DF1M@Q#5Jn$E`$(_*qxsUteIga`UQ~_)jle$Upw+T12NLwUb5@*oygQEH@*M zA++(tI&-vTm|s9ZK(%NeEL!;M8j7d|q@INJ9}DNeWf6#qg2A*pKKhU}+dvDzvH##{ ze&2Hc2u$y8oX};0aez-R>ui{jymO*XzTe*3wdh|px7+v5J)F`MP@&ItL7Un0tU)W* z{52-*bed8979(q3d;3$11{aH0<3^fvf1GIKtV2T2QQfR{a6ED9126Brjg2V8v$OK`mBqU;U)C@!wRFJzA+X zvMl0tFe=ea2|PJetEdNOZV&1yWx#^0EG>B^+P_FtG&GpX!It?+8y|N?6o8o7AM9W6Vitmq-neSS~l> zjp_b{y3IgYYSDTN;-h31Hn*c#18_mo>Yuo9x7GuPvB0BM-ak*-LjDE4Jb)XAeqiip zsnnJEO9|ALw^~_MO>1&v0ee$I?IDpo|3Sz4)aMm^(SH0j<>~%!rA}~FOX}wbP6K>n zK$2zn7h{LKJLe4}pCo=;+qHjWg|60Pi~Zeq7XLtjOs^XG?*kdH1IYcWk&|KBH~IBu z-jZBj=T5h$PW`kU`HR^KQ(;ldGX-Ib`iDdm z0ag+^p?>FmbeWEg52#F#nv~TEMB33>lirAJ(8)VQHvS)mqCW57WECHwHRNU_Dg zT)~dTjxUYCok)QOiv0o{F|F0$S`Z_Zc$w4xexhrU!N0flo91(IBNhq{2DW+({TZpk zzcu@89aWC0?o$kV)OM?Gnl>=%VGZcNI%f@fZ-y_z_ zBa#=8U`r>%9uiFbQ)=Q#+0}7d=cldB~)f^t0S8y!DR+8MzXLi8`lfy;;njJI!yNfB9U-#Ya(-sc}jP zCYNs+;FqC(l$~4*aoSBj?srU0Od_+~wf_|pqxQ`m;~Kcd>Lhcbhnx&^XP{~c&Zzl% zQ2fd5GTlGiE#Ht57_FGyEumeg#PkF0>Ju)te9v)7!{H!X*@h@6$fKu~)mEHNDms`6XzRoavcPV%mnhsBvmE-oD6E(eX%OZbfEc1Q z|J9G{{pw}AQ`(shN_Ry#d-VJS1}i_6Xm%x5sj;yaEo?`$-^Uu(pD7x`zA5qyo8YhY zR5jo2p?{Rz400KaDe|4&yk=G64$ccWNRhB1VL@(Y8{1UKi~I|r|7i8P36}&n0@5z= ze*J(p!Tecaky<9FpCMah9^r!#?D&D9Jl-WiH^=hAVAFb6S)1MlrA5HVl3~Cc;17#R zMQ@K&Ec#02oP&pKpdlE`+g9r&be#Qgh`POk9{rcYo&-a`={&v%XG~5vkJ6I+S!e9| zOLOk)zL>&->H0W>cu49eQme4?OSkwWU-l)LM_q+;Zw+IM{_Z)}%eL-zqBVvMqTWkL zYR`rF40vp>whvf1w`U6tm*nypT2C#X?42b={$cTRPMc7Xbj%YNeyqn-3U`9fw4B99 zKA2C8TBd(cZ)SU!?eIhn4-(+yzXlDkdwcI+A7P+U!$^|9#0c=fVDMKWB0Ng)Ynpt9 zR5}c|WS%UqwW`epG}vypn3O;J;x4qiVSX|(qtSD~YuWZzJDSfX$cT+!H{mCGMwe66 z{R&c&a3yJ3g}*-XWeXN>?Kw>^uYPJ06==QaB#AD)m)v*B^zfMAN(^}6yMlQ^=^SjC01kY8=AdNqBD@-RR zo-iI0IB(0q5MNE%G$~LHRY7iXRAL+vZzbro7WR)TKBuJMgo1lzjmn~qD`vY&pLev$%59bLzN?qkN!jmfux9#M5eGQT)6BDV1FX=3Tq2Qql1U6LNOC;x z2=A=p#y*&Him(vlmX`g%9*2nSRorf7U4=JoyInh5SR3;m44h$0fsJqzXdQ^Pzic(z zkSyt(SF}v1kVT1jMXGRZt^^H@&qxbPkFTni?RJEM?=VMe3Uj1+3*R+4q_)n`b~j4e zbk^kic)O^MLdB2c!|>s3<(PJQxoP=fHW;ftvzICYDVsa6+D^hdpl z-@ZI@j#xH2P`#F=;*shLqUVi2Vj?;^_`SkU-;W0rqfEmfJ!%Do&Sx!FO2xL;maUdN zJ@nnFqla+LqLSp;+eOP*^t0H9#On8EHm-gkqgn|iQiX)liOZIsP|-W(rd7)IlX*=AtHfuJQ@ z!?WM+g=?wAJFQ@}Y1S}jk+wB_DEr`Y!myaA6ITPp%btUv#O3cL?}jRJZ8M)MR@v0x z=l;O|8mY$-iA7F_x3A6oCHTa6YCSHHnDQu>&_ya1>4B@*&<;3@iT!bqQ{$WFpCd%P zocb_pU`s4+#Ky14`1SxAmW)DLWUjU9vHjM$4-**DfD}ii$RdB87IXvIINz8;ZfkV3 zpW%=ZlR0krp2+WaM^J7V4oSA785$aTBD#1<3YWPdc_R0Iy~&K2Jv>Zq_84ASqkqyg zqt!KFpP0Ub}Cf zQ8BiP!?%pOGbX9BL!PRb7CBHIHZS8Q`OgPWxSjp?YTb#Trk13N;ABVsioe z2@=oJg(XYqlJP9I54fiVU7yA)9c!507VqC)rk7)pYd9!&btR5#g4D;&&LYOQNYVo} z(1pzT7jNH_Rz$0Zw=1mzk2Nh*g`NCz+V5&MZ<<2aprxl}b|}@-LL@!Kcb3;9A))Q< zvt~n&>A=M0CrT($&-b15mwtH)5=bQ3eolX_%}2>)IU!e(CQ+O`^)LHa{=}i0Dvb1* zl*+jlW58~w<;JTG+7oiGUk@&{RiOC>TJ8^z-itv@{$;D2Z(0?uo@URyab+N~XSiHy zpQB@#!8M4{jnw5Jw>Mf*!w~&mxB7MSv9nVkj#`uTtqxzI6aHkt`>%K3E{f+#N^B@g zd4;(E9g8iH_Z1B*}`ybdB36?@;WrR=0 z41m0Hovbqu_EK5m&T%nK<7-p|XghIYT{jV*M$niqN_rH-j6a;SXt*jmlnoMJ-z%I? z+)jqU?Q+;b?uT{>5cqa-k1uj~_}btB3Ka_{CFb>J445!vVk=(!*_w}YaFV3^35kf$ zf;%24Qc#6kD68{H;+_^6o0+BI)avfV1gaOUPmLR#OB4D1Dzf~BA^sy?CNa(Rwkcuj zIa?^ZXzL^5rEAFWNz~=_gvNQ^07q|OV~makP4{Z)K*AJy>h3WAtt3!^)O=goFQq#; zpulF@9-3|4L1%M1A9V%D?gsVl*#z+LA`fVwiWGks-i^O2Y;`Gge-Lf$;Tv_yTI=gY zEz+Z8EpC5qgn^m*{^ZJ!h4P>C4qCyIT27oDl3h_cs8>A>Od}C!i@PyKZuiBUii7}p zJkR{~UsyqMeKpm+g#d}hhQ1du9?n_L(+wKgK!KKFCk7qtiH^iKg3$|Wltxe9=_soB zKDRWdR<9aa$fJv&rFcrW#b7p&YVG7=@9Ps~*;ujRZT&K-NHH9mbYdX||Npi&mtQbL_r zEg~hpIz-2^v+!sNI_hH8ywna~-4jo2TA3JeM|pOXV?BPOM(?sSLAMQYuK@lV9$dLT zUbt>kC=mB(>s@z_yxG$jwmYjX#3uB?h}G7{%9v}Q5>{@B#4G~3cj3~Nc$0F|jzY~O zTt`W+mLC!zDW;y|Z`HBuSReB!MXawS!JY;=6R?-_5xw$|)f1ml({VS8&#ed@bo#{r z3NW;$k&||Ix8xY9aSf@(VQrfnarIuA`72mw=e*YjLXHN%od%0LZY169kRuib?WwQB zuv1=+_KRZ$QJ?_QaEGTqFa~srgzXxo71clnq6puexBb>z9M^`=f-e~6W_a|aot}oj zXR00Ple6ny{8Pyh4(bb!kiTz_3KeDDMNAYfL`Sqj7>Glf&Zja@UbR5*%^qU884K-~ zP8wi8_m0+!Hb0bJI~(S>Hsj5^XD1j){XcsFj)sRcD)yejyONv^o=4OPyI3Qza0!LY zI^)$^Gor`Eskw%R2GUoa7~D9~&a_D8q;3S}bK8p7jQ)|0^V1v=IeJU&xeS)VK+OH^ zGXdT{3)RYu3;sKQ;q6^%+7$su&5t2-t9zDaHjDk=Khij6GOZ9lZM?ldc*Fl3x-c?h zu0tjJv;EePHT&fwIYRJ<8-+>TXL64Rb|>8OBtiC{>r|&tkJjB(*PcglLVn~cC@&rC zt|P6hCb^}psp>SH63XA!Zt=k>f0TN*lq{y?RO~bxsYDAjfyzxbl-!QJJP3 z0`o|{YhKW)PZsg@gy%%Sp44CKst2%TW7Y>R!n@CKNm5ETEtL8_)~6K~GIiTLo|_YM z1a_F9T^ng;S{RWZ9v2;x%KGH2oplveG947SV$5u_*tWJ@(Dm}^Hg^X>^Qt;#U(3pQ z>tND4IL6O7d@*;bXwz@;)uhYchb{| z#Th|;f{Vu?KV75eDp&+I$ipWo!l1I0s)F&NILp5Uw&=jSLyJ@elF%<9!~+(acvzDs z?Dj%Wit4)0ge#)MK%G-WS|^LSGXdoH#c!!7Eit5D@kbfDYPBvdet9p7o^wsBJTk)tJGZX{RX_NaeKtQM}lu_~JpSlh)pth30Cjl!Dey7L5 z9Vg#L9s5?bbe~Pc2^sUkgKxJdfWS}OYjvb`BIRLkb&bBN!Y`>H62JtHh-bXWA{ykb zqw++dD?s3@9+8HOIt;vstY4p+N#dL*26fCd_PR&=u)FY<5laV&(ag~2oMZKIE=*7} z+C|gap0jl8FG@+Rl}4RQG?vxNO4)+L{G4L%)9~r_uCVJ>JsuIUxA{iEVL1FHhpxYU zEDfT_luwHu5yfa-arMR++}&v(G>m;N)48-|`Qdw*ZQm_$1ayXoTh>?sNTV-C0Ng-7 zvKouF5Uj4W?qNfVtOszt-#fM1i6@p1x?UDf%qqV{;0{*)bn&5%**(1a-(Am9^<|G& zkS13I-9k2~B&|WMtunH?jb6T@C)?mioy4E({W)X1!WN<=lkA5Ijm4oNCeH$P5KXTw|Tg5P17X*7AELCOq#Y!2~Jv zAxh%-v_h&xmbjcy)bl)i60~r>@X<`Oc!;1^*okjGT5H-mUq1P)7Tq0`BbJf#=uN&4 zV<)&eN`$CZ2U4W*YRZ$OagLY-J%ysrPW@!};~zIm@e}49rrqOq)}|&%{$RP^>$B@7!a-@j z?*m1Xp!A}YzZkGnIn~ePEGDgt_o{WR)^~cPbe5rR z!LaI;%?^4@t2mzM#kV(Pq}L-y zK{Vwg#`xuwEbne5=B3=K>y1KH$i?@3U*8*y03BsdJ}YN`h02>rm;^nB6yLa27idGk zEq8^mt%x-pLy@z6K~jU}lf|y)V!0OFW^F5TzoL`MB^MRo4X-gL>&-q}Rc1C1#1zNF z;NlynTWM&C?Y1e?EIZxG8U7}+--t0otYS?%gx$KuEpn>K16OnUWu~Fjdia65#;RJu zlM$OP|Eh(-zQVwbj1I1}8mDlM{z>5;dIiD5$IAX`Ifc75(R{^1{EJd(AOs{%u5NE- zT4_pS&C}MMefBP#6M-!WuxQmx0;na}V$*JR6Al|FrLh&0Echj|t(5XpeqD2JYERAV z{+DHR)le*2EXf}4;X$&M|w(7j>1)JQ*lDO z2g7*Hs-?h^oP*r`JsvTg+DnAwtvK}wJ8 zB@p_9*R$;wvKy2!B8TXZNwSbc+SlLY=ic#lQ)Qd%%+Iy#O6sQEFiM{8Lm!v!1FZg^;K+EVuK(V%?q zvoQKZu@eh)o&b&+%!e&2*p1e8FLisZ(dxg*3|)2YluGp5-dU=d9n@P0t$x{4^KvBm zl~RTIUpedVs0PWNAFa38xTVRsvB(b95v3v|hn?+S{maWv(nP8Eu4vb+H>HCN%aG=$ zbLdGCRy$Z-?ccsMjk$xgL@zJVVf)ZVUMj202x_E=NTT432>bQMjpeQcQa1^cXQ{_Y{wFLvoh-SYq1ygwIREONd+KT>ZKb`!d) z((U>|}40ADZvYc0)CecAKq z67OzNqK_^|3+i%R= zuK)4q%Y@lV$}Ag4>`Pf`k~;YL5DZdAY#iw#bOmC%o$Wy_B}2Nm_^Ualtb+6|tewBj zdXT0uMQ2t;Jub(&SC2Fd`caC%kLE_~whK61mo6R@TN!-h5>Qc4eHd!Jr6zY<_LL~$ zl<8S6Th^03seMVUo|5)Hi+eesczaQiUyEOphaeB#_Pys{{MJ9@VDy3^1x&zZ^w| zgt}iX7sn}XcZ=6Rf6;6kw7N@+5sNDQrNTDk`o=QPe8+*BuaxKgxu?q=ax#0R+;n2K zU_h>@9og|t@q%eQtkt`C#=Vyj@zk9fNlt~_33ka+o}ML+ z+-VIw6exm;D8UokiIBvfwPIR5w(Xh2bgxLZ*`{9}a?Y=xluMFJr=d;Lg2d?3Z1400 zohi9Dux_3ZZ(N&j0RHpBng3xymj&%jNXma1#v(5Dvb%K%;6{4V9XwsS%uP>6vjQhNvdX}>nVmL)V@h|U01oy z)#zmbbwh|qb^4I8nfBy(*`&G}EPRlrKFh5YISJ6I+}_?g-O5N!gsU|?9?TiB?NNK> zvc-3dB~NGTg;eo)`w0#Nh!<(vQkOB(fEqJ>@aE|6H`nB0j*XRoM50Dz8axTUHgLaG z>;_7N+o9#&V)popoR>X4EiT92OwNO@XmEu2QMBV2-hP6Uzkvih{wuhbJ-PfmC_eLh z37@(}y>Bn$6T-}8fhKSJtR!M~nVo#=ZsvP{6n_Wf$ME}zq}EB3paDB3j{3!i_Hxk4 znth>C&Iej$o~!(lggAz!ApxJL)U#8)<-SM!vV`Gv4M>kYizbQscO%yNY_qJ&jjpWx zLS-*EByjUa>3Gok$V@G|xdh+v$MtCFYR-s$P^bPNbFmO^KllwB1v%sE5!r*781hn` zU1wu6Gi?*nGJLp}6B6q^A0wTp9dg@q^f`3%7g*7$%j3NZFOtKJ^GjRj4d{gkhON$5 zY&kHgm;_K-uc#R&hP1+6Z**6~9~)Sz(zBU>n%G|A$H|$Q+!y;8gEY@Po7w(sM7vyh z9Ib(XZ6Cdyl?sC8*=8_0(7ktvUE=`bk26_%T?Q}h;2kbTQO_r4JuwFl6|<9u>@m)# z9+9P9U5G9n4V~k?$C}4SuA0Y07?W0cRBq}qxvH1yU<^;U?CQAaNs2fAVkzgtZcr8e zSV@zVKa-il%2tK8xF**6A}}vLYv$#TF{)%EWpxPqPSi|%O6Itw?I4Rs$gxmm{{s?QnhCuq-A0d!dyBkwnJguZuhmNm5e~78Ip0!HK1R^Gd zzo!Vt=p=g2!$(Z6?AX^gxjhi`S$gNR4aCym3`Ck-+`3fOG2NJ6t|L3k`}|F+yjyf^ z$;oTm67R+FCd<4lY9)Hcs|bX|l%#f<=Zu;&KZs|}oT9@1FOSnrdBuazIj3ZwvrJ^9 zzrALHii>QgmKw^rJ}D_TAG~K;bpsTs{uPF86c4hEwQ|>^)Dr9;?dOs+;dW6YERKwf z_*ORb#$-Qu87Uh$+4!~+9Eq}i<~npw@K=>pIRYE2av{i} ztI8RSZ+iqwO#Aym3&kfS%VHlHmt9rRXXCe?_qi-dw}jfUcxEd)D1g~ke5f6}U@Yeu zKicPt!gx0 z>K9c=seU6pg)aG1sLx$N6|NQX%7)6`issoO2B=kv#H{mI0Z;0QN9!;AC`pG!z8qS^ zfk2l+q~4c{RLDPxp4Vq$T+d0_J95F|@9OggHzRQ`v<>Z&% zD>A&TFUa)&b`6dv(sfcwojm8lbd~$O*3!|@(e0}8X{;l1zsEZ`UHMaX8`&UUK{zR1D`^5Jg0C{8Zy zi-ODYnkM_s@*Vlr#saWi06xR<)mE|q6!`8Gm0uUGb?8YiN2w-eCRndPpJ1i_B4AeEy$6MMKb*~frH-E9z zbXMPm#H~#&%!bi>M)ber*U7}Ospjx6UXL^=c$zUY;_kur9pm07nI-9eLc%`u?Y=4d zH7H1St#O`4E>RwUsW_#xgSe8|YOKNb ze>mq(Y`%!^%M+Xb9hZif(M3;uo_&_e0N#o5+k=Q#VQmsZ_;X$bW;pSA4K4oJ z8qgN=sYJtO6Vy2b&e=%-2R~P^^4Ig_=`~Jg76x)vh_YO$^ZvE|gRg9=>n(dWdR8O{ z8YJ=~E^xa?`r%gd_LB?C!Q>a7P1WljCXRRB5PHU7)9n5ByUinB+@bFynVTV)^Huhl zUlLy#&R5y*L1PSQCt+A?Xpbb8&#j#Jd9C_4$N9FuPN@kOUNF4gR4YZ!bCK(OM-fx5CLN{xWXdg0hR{@aZ6CZs(>N z7*W#P)89_3HViN%{)S(t{K1t^ZWOi?>V)w2row8he#gLAQAgDw#YD+nf3sf$XpKTr}^o% zECkz|VI4m-+U#U9Z}ms607$#|ubjf)_x!mV;qgv6ATZJT2*7)IoI_J-K$$A)B@7jM zBNtAB!c%T#6Oy5PW^fOynXj?RrY2@taFDk3P87w|>c`MvTXLnKRyf%2D$Xa+p4)P}K6z9IuAc4LQhU zBW{`ArmXUN!>88iu1_I~Pt`rj%gVG&)lXijsJ{`Q!U@h2`WmO(%rLG_kkrF~OB!7) zwC-?D0yl$T$bQvsJc@Nt)x=RS`dhZF`zrv%T$+o2d^JH^tYwHvYqZVE)jEd|_jj8b zDHmF9bp5mbar(mG^j9UTgSs4dT7HJ;-#x_-ZKA8^_c~9QJZMIHuKX-c03FwBR~_W0LBY>QK%yqn^)4fqIol`Vlj& z&tK`aGWuYfDy}u4Sw-)?8>;%J)R;MdZcGZTu!%!ySzP+BLqLx!M;yzXz>GC3>}@#Rk~jf0+mjC>J6ORooSHEZ*#4c zZPSO8)@^9GvC-FlhwILwh?PkbZfJ#~>A_;1q#UnlSr6AwKdAO^VEA#7q8&gW$% zYu=s*3u)}*-@`6v_1tYv{(8y~U+Nn8^jphKF{j>ickX zcYQ{Q)w{M{)(SIxrw`woBUJD-<{B6))#A_~8C*MsJqT!-{tP7YGKLY;4n0MZ@p#v0 zTA(|Jac?}aXl?g!S7|o55FS9?Bt7Fl=%NWHst_fsnofOXchg@ERMNY;$_5-Rm2~OK zucbFf)OWnEJ=-B$wGwe&6E>B1^7oYYueN%nz*Avx4dL;AIlQx@*Aj~Se)2s5}`lBok$5m!W*F2Yt!hZQ9^LKSJ`7(Z( z$v%dlcE`PbY(u++s+xHaQ-MvO4T4funHNsMf8@nzw z>WlXH-b<4|)#RmjYKLdG%TbZH!oWuUOq;^vPGkqb#IDSdwMb;-WRzo{?rHpsi%>e` zyjat-$Q+;IgHJz2xF(LGhR`O@D*cYJrU=T+8+g*y8&k0|LX?uDp^gXGi4 zJS7wEixsB0Z<|b|kBqMw5fbr6bs{LC>>G1>iU+T@>Af2gMRAto=SxFdKs@pz1V@NV zO5=U#jnImT`f}nuw+6rBqtp z#=QQz+lX0xsd3YotFIb}$v$H3fN{vr$I9cdeyjGO`4jZyHevNy5mv!ow8+O%S5vYe zD1rG}yhP29qhmeAguiW3CH`3npenuVzq#X|&L$h_ChW}wDJ?X0_bt4AU!(l#F~k^N z{49gVtBS*VST>N57u4!QE;5*kSW>MF*pnjMOH;`99$VT~riA905#?4k3#B41y1ToWg#BjoBo1PYgm z6`hN}PhrIf#_vcdSW>QnA8Ps=4cjg< zV##^#ivG0oq;GP7Wq4%4YQxmXGfj*=pP72yjQbUe{nBXcOT;)-+ctXNFQYPl`tZTt z?4Yjry4B+E19sQC1XfLKV7;OZR&RS}ZwfzPnY&ahJvu?Ke}ZK-%~^dzTiGj%Fny=6 zKN~jDJu}Q{=Mn$3WNyjFG+mFyf7R&904aqu$q_jET;SzI{$G70Oe zb0WcKZOaI4IekCh_~F`{th@=hm9+SWw&>S4NcW7Nyrf1>H~B0L6af^UC3@`|p(y*& zoBXOJUC5_)k$7(;V*94hEemexG+89uo2xLN1i`e!S8|Scg*}b+=@tcBDJx999(^_1 z-?7IE#{TP>w4;zmT@CVqaf{RUrcLK)(7pwIU{qt~x-jck)@osbjwhNW2n8ae^VbHluId)2E zPCft~(BtRu-}s)KHuFI?5lnhsMJE-1;i`;sul$++HleR|Kn*3u0Iem7&QzI){3%e6 zKDB=?cDRWHFqP0qc%-^saD0|k-tzBBxnborj-e_s^l^>OqJrJoiCP-JhY;lNKwtFJ zK(K2B$Xd(g$IthydV11=#qv*L*%Zdt;Q^dMe@Ckw;+i$@#wX6;KLI0m}4J*yPNNx z;c*z+a=zF3q0iQky=lb(#q?v&R|#m(m+)$Rj>=56da3w=+nh?QGQy+vkc>s{A|xPu$rvN!k!{T-!e zJ$OkOPoa|W6KQ_6p}u*F0pk@-E;>HdKS~3xmWvM+(;|15=usbYm|J3Dt_YSsk2`VN z?J-HeYy(nANT?$55Nv9;@vHqi)jrGqQc2#EG{(Uo$`$*(fZYTjyAPaQd>j}VXk0$g zxEv&~z|=2&*n_GvG4U}Ajn9&PK2CdnYDex5n?147ch%ajzq6tJ3w9jLFvzesIvNn@xT>8MvKuobltCQjJ2 zdz_BTjT~rRCgOZgl6v1#?O*RlQ(dBC%Inj(HlOb3z zHaX(_2W_zv^cES#FJ9+lgQ+J7c@rf!%=7pbk8MOe`8^*AP0wh9SVN>Jc;bd6`cDD=_PJmzd6sq&QwdSGwz49Y*Mx&?L9JK+d8bQIJ^GcI zL~QU+ZGBSoOZG)7gx0G3@4~GP5}V9wPO{U55T;lqn@aTQVKPfyg-=PUUIUryMV*tz z>DEVCX-jt?Duc+ot|+dR$uZ$U%Z6PO&I$wDse@kUf~hW76Y8S_Ul&w7c%2iD5Cs<# zuT%laG)wjeBq)AG>7B^Y?gWnBR_ ze8V<)_{Imf?%O65qgz0DMu*0Y$t zrTa)@gCLBqgfsyvNZ^X+(YH35KS+X`)4Jts>~q;sdYleo5_qk>6bDXL`sCLiZ9mjE zj}ClgW^2nivTWwx(&V`+C@CqKdy5L0n+}!JIO`ZP==gG7so=#yorT$(KcyVkDYtI) zb9QD=xRx~C<(9T}?TyR+mUnjS=(E+qKT!vskC9Fls%%vCNUOWgoRj*Av)=HBz`rM+ zTS_{apb8Hb{PmL+efOAdLN75Te2EDry!?(lpkCZztIBg`gl^a3SKiS~2JB5ewC}u* z9iiiRBtt|csl5F2hu_-f-8CEXDPPNyK5v0=keC*dlPTq!X;~>vs)P|UGzc$KYx1qn z_@Y8?d{!^;(0Ck<7mq@&x0!q0ZW(qQA>I?^mj2lCEJs@~zsuFyRepsyC%lA%xrbtnREDMJr?y@W!~837f~TY)^aOScySJQ z1SiN*&cTt0a7fJ50FTN9mwYkjMEkr0<+GA|`>fPL%w?Ned>^x7H!k&5n6Khd)08`` zl6}NwN7EOF*N?=)L1zxx2A?RRnMEF|nC*po3AOl=5|i{4En*dRN0n(9p%=zPa)s0| zq-VcE&W|uKa^bePxMq!JZO;zVo@GjCw(if-V#S+0mU#HH--O-@I^N8+y}o4;k$sgP zhyTf(o&*THL?akVM!^mAjVvtq;;=ypX(5^Z5km-Ev9!u*f3x#PJI^{^@ zmRE)7rze@ZZkCO?50&;~ z%Hl8XZU#pD1Z?=cDv+OEtmIAn(G>g`SB+_KT9aUzMmkjhz~kY#V&P#7g&Ojg z6Xp)Z%Dw6poNBjNt8(2$=@zD*ciVbP`#nUaFQl%;*@a=pZ zB3AAJFNJ}*&f_YoyO0n#;^c#B8pW&^39YI93llCXnQ0%27-ltn^Xm?~Mysv3Oknwj znSbI2bS+*&1?kr~KF*T+Vo|(h%(m~7Mq(h%225DXR&OB6mCX?X19nU_=i1F*VSaMd z5uY=tU5tGO+{C9oY**VgCREc+(~BlnN7pieRZQhH#u7$}(OlxyurE{9MhOOjlY(nBPvTq zbnI-Vms~^H`jL(B>2+#L$UavsQ=_jxyJLo*Uq(#`p1s;?-n(m-UAnH%eWQ`1DuXPj zv#vUA(4T)+H^g(=o%u-icPv3eabcb>(=lPCOtNu0VPhGAPsh{B?FQlMR}q=qUd6}M z8~i)rc#4z7*(w^b310W5&`Tf)W}i{G&I=>c(@p7xhm#(`7-||XlVYu*WZlk z%&ohDII4uc4LThsHfvvi?|F^v)_w;~?_AC`JzI9)>xc7l*V#eF#$jaX7&;tS?NDoI zkun+cSB$}>@SnVb0QGdOsLt}ux%>5EHquMWCvDdE>M^iBcX>452eEI7hh@Lb?tz`6 zRnhmXWL0l@muCFY$W7(PzVgim=7;DaAI)Qv#pG9N@t0-D;HIxdy@;Xm!|SpD!_6PZ z*jF0}g%q`{Us77{Z^Xa$$a9kAB2FE6TH6KkJPgXs{D(qce!|C2l}pY2f{Vtzg?D49 zIE8$!0Y{*&hi4CB$_~gd+Fl-}>@7F=p+2eQdre|zS>&gVk$3&Gyor||Z!vObm~fo5 zt?lX%Ik_%=1U{_?8|!4%LbXD7LWn1|m>RT#ziW=X5bQ7FxZtx5|6Aa8 z+%Sh$Zb5V1>-k|-tKn9`g)6)fo4sEyrla-tc^h2F3mZk!czfBuFyfpq+B6TZx2W^@p43sVbb?$Q zM)YG+&{&fu!|LDIWW>06cy>%&Z5`l0--dLorEP~qkQI^c+q*m`$1--pn@x&j)WN|F zilmar2GHR0DDFv+o>^5BbR~7~iREA;d+CYHq;cV196MA$yRyDl{PQ}*U`R)MPswW{ z;$vL%ab(Z_uH@C_-c=U{{84_mkKc@cyZy~>*Pa9}A}mX1p;hhEHLZpzX*t+JRe3Te zq#aIRPUfGMQ7Ld!K~L|TS2$*MkcLY@_9x+IdSOf#sHm$^(`}Oj=~Yz5ONNy#7#3LQIty$Cxn)hvIA|LamH_A7vQlA34?Hx zl*JmRHS#W>1R?snDidT&{?JWkFFn%wJnQsfnorKxvmak}dAf|1d6dWa6sr}A!Q;I5 zt%djea;a(&@$2}Hi@ptb!~S1^aFTBo1$9mOfb~NKHpKA3>q4F74fA73=?y4S%U;B& z+@Db_(iS0+_H;3>!}FWtvPEI7Kf`836l+;#%NcqTS|XZBOJ}_oa*vS0bo_FR^0sV5xtig>6zfVf8>a0&$DR40e5QkI<22&Aj>pCD9T#pp-X zDSCkW<*8;GS3k|RAFcLK`zW&8oti!gZltJGAhGwgJzhMa>`ZvyScw+LB zQ{l)H4V!fNXPEx286PA1n&8>U0uE<^UIBnTcPh%=GAzC|HSi*z6FNR6LfjLBGFuq% z%q2NR`YG61hJTrw8yVWk@5Qz#d^^Rqc!Ktg*h)zUOFIOaB9O2cQ#n`1f^*S(HYMz3 zMkH1`4AuGP_Y}pq@lI^qslU;Paqj-ReVC7DLZ`xli{jQIHK6p|`qLqX&@(ny`->zGf+C z26CbyAJaH|GTS03^Z3+VD{UdNzEgc;LsXWlz@3M4%ysNZc&ykyI+fC9gOBssXMVTS`tV zTsa;WjQ-9NKzlvb-=+;J24NXlDjt3(i?R}{?wGy>$FCa8{=7V~xcU}BwYF&s|K_x{ zO(MT*9o>tLw-FapUc9VEDM7$aWccff=gy5j zeOP$7hw@u|f&86%b)1xu^l1Dwm_`bp1&`&~O*nONl}@at)$5n6zg1i{l$H$@)B5TM z7ky)cilNT7fTSAc|H_v{~&GyCx>t>HECcknf9fv8GpGSmv`R;_2LI{QF@9EuDN0ubib2bVIG?>x%< zp5Yj2*&^{$az4qTs0#q7O}Y5`gL&=xxn^)g)QQT@01Tu_-}hxjF0b% z{R5PlJy^?G$2TZA9xb1&AYHWW)gk_oN#JLy_CTnDRkjnYw>{g$R~||$I9_L9Z{+I$ z6~~H?_B`00<#(-`g#~3EH-Smr+i%V43)d&|;9zR!;h_e#A28g8iXavD>?D-D?}L}q znxC|q$uN_vFhCNlI+&)$PSIT|3kVaWt!aHpPPPY=A_>6ihS-f%~a6%3d_XcQZqwZn5W|3=!d3-uR%zAt|nO#mD zxD|4@amwUPPB@!PN=rZ0x@V2#?9Q=qLHN(ugsiIO(hZq(4$lnTpb@ z0I|gh$_^GjTbl1#moXn?J;&^nkY-S#MzpUQ9|mef0syO;&mGYn7Q_9^z5=xaYePqD zBdxt$F*hr1rkC(jtK#hG(B7G~n}rKGVmP(>W~HUzcN*$>VGwSjNp0Wjc&>-z%`k9L z^F$!R9cr?SU)YA#Fvnb~7r@`uJ(A~RVUFL@D%UA28xbST)vx05$G!e>UQh+MT=;CU ze7xjWt1giI^J732Q)tH(uo?2ytUMcI)_pvL^vloU6E&>8gR_fS?t~%o#Smnb_N5FJ zRQ_mYaB-UV#|omTGk8q@o^9?Es%n!YMplKgdOyde&$E|o$&c=82vnHmK^ZahO^mAh z#+UTS(w9VS*SJTvZP4Xf2x%yK1BJ}6Q+=CdU+lgiXH^S3w3o5isp$`<7lbVzh9A{4 z8~Ht(^Ol@1;2c$de+NO0H5h6Y%@EwmH99j;cDawA<&j7(g7XUP?|WFY%8+17Sm>rr zmls>~MSV6S(Q9G7)68|U{Ui5a0S(>HQ|--4mL2uvcyo)!jTJeFuO<97-GA{c zZ6ArS(D5#byDDYQXXm3Sf|+J(?$5H?U#HXj z6vtJsY7$X=d)W7^q5T7cZYQyWW80}UF_v#m; z$P8DeWrZmzCQ@|-%P3enOt2#KJtUPSahqd_zFi*JO)2uO=w@=~A`HEFr=LO5;1Sg}Q%y*3=X! zp*9;HGosI~I`Q+88(OZ{&oW)Zp93ah0|OSn+o8w!&ersR*RU_yf3&(5?<%y6onEEi zzVL5gxO3x#y)he`XVdp{L-!Rg@HyT* zlA2*+v({F?ZgX0v937ZsJJDy?CltllasN*6G}KLgz=K|6c|M=@)XvrP?l%b%Yu5?# zzAtfPa%ExkSiF~i%RS_Tf3eQ`QM~!tkiaLUA&BIVm167&0zUz1$_U$SI>l1PJQe5M zwma9A1aI)#$IoHkp#N!&*;fN$`p*>;#PZ)j_&4m#oQ+J4oQ)W)fe!WvW6X#_Oz@C1 z9Us`@3L7)2xX#rJn^>|;Y*JQ#16#ecbGCliRQoujDyV((P5AO^@fv<0DX=kD3_Li+oSAL&KlO}r%2w;2iZ_w5=~SSWJ8c# zGp~M>M5^jNitxf#OH%Rh#J}>%I%J>>D4&`*EwJu)fYj>+NLY0c7&L0fH6$W>9HG3s zY`$@~?gS5(bHMj?^=;!hbcc*-ccPkXLZu;3h>Ck{C!+20v)kYgLDnEZ`fA2KU3U(C zPS(gvx7Tsk)bcUr^~Ti{p$^|WwLw~Tdiv+&!q;uV^DP`P+VMD<>=Qq_gJj0zHzDbr6{?{Zjzafx{6L!6Z-0cvC@8vJv|>6 zOrK=D+m|u$Vtudx!1mm8X5b6FoovaVRn#c7*mz%CbSbjdrO|FJfi{8d)Q~R4E3E7I zy6fn9P=_7NsN|}E*vE6As)lu;c29`{V|>-AOme5ZRsEgLL$(Q zLGMe+D@0f-BN&GFA{|rLs@boP!LJ#0FyoR)8YEM@4#uddrbc)EFf%Om)63p|>c7S` zcsQARTRRnVZga7RUt5IsYz;C$6mCmSrxR>9xHYHq)iNGf!QXxAzn7GJF=gLO9_1}~ ztz2x$1<|e3LhfrBlZ!H4X(3?$Z0Q#lXI*Xav-Vt4tj_Pf$ay*rKpqA@AD^z?@`*Ag zml2|c>2@Vc3w-FLrsuv4PVX=LMU#Hs_A~c0_cezB|EfKPHuE+P^d0f^bL}JOAbMSR zkoC>H`aI=l`2O|%;;bEgIOT0Vzp~t z75eGolAlfvKUL26O_6P>Jx){n>eEW{lE3=JXaA@BeD!zMcWlWwrX26h-o#6eG#bUz zG~$=Dw#bQ7P7aoPUJb44^2;y9zl)SMQ!k3Yli0c0({_(LJW0PY`6S4aP$cVUBysHS94g0!hDU5&w9&Q?J76pifMCz?d_bK2#b6t*n%HFKJ{6* z!whfu)co01M{VT}yXKROgaWBbR2WCX{jQ? za#tSV5k{W4Xao44`W0AT`37jgX#E(v;>x6PGzOZ{vbrA0x$O4V=mSt|YsbTsfMU4C z=`!l3^0Fk0h~01<_48D;Ok(2uF)EWo_AgMonJsDbs7G7{=kGUa#5Ti<(>x2}iomB) zmAdw!20aM0#ijy3ks}UI`^~e46BPG%=j;>Vhl#CQ1cK9&k`jXoku6pM?Ln7|#^VivTbdhn4jP?nx(`pHg-|rPeLR@y>;7}lv!e3S$8+rZMX28w9#%FZR$~_2 zpESd(0e_JQYD3jHXIN=QzywuvOn5iizT zh<&io+p^hv4g;Xgx#((?>E8Ydy~~4bod=_(7FH;!S*K+&ij=5(X#UkpdbvhFU#2FJ z3!=LIyj?gTyMV*=WhY4e65Uct0;foBG8R-Bph-|E{F_LaY2J?HM%g5)U8%G-Vu944C^r~p zCIocj)7$5n?ekfFE%&<_g@>KcQZlOB;EWrJGABj9Pq&Xxw>bS)EtLahlUPK<>G%}s zT6L(-Merju+7P>>Ry_NN732oDdpHCd!ksfxPDrKdSgz)v2{|mbblaVqd7m4BH$!`i z8S6Z6i*4pt6Hl@TcFxBwZhwJpyp#aK_d~(j>nIn-o;K%KxqmvUL0-j_t&aPPVfadR zzTtxOPyi<(p1wO%Xo>t&_7eBK0`O)2C@W#IE+&ORfBOoWVe6|Bc=EB=LfL+-$dJ|1 z=>B}QO^{`KC7{FiHn~#6{B%9+`$G=*ef95xO@_dmTM#G+ehc84=y!gjOxN3mn~m?a z8zafxT!&)1BxB#Nbk$?#2M({-{vg$=cX&?(wa$mHzQJh&faj+g@J$Nn+5O3VBzEq* zZo9`$u#owh@8kYF8zt!s;^AhwvEOclFjNkUITHc-hPRRX&EF3kjYJFZun|i zZS}0W38!C60yit5F$pq>$a`&j&@76DXaGvT6uVEdyWdfr-L9oOEVmSpzBw$muPQEjtea&C z_0I6TyRt4GseY=*olX7CcaDsC6BdAzLb&C@Em1D);H!+W!kQW)^3_P;3j<~fuChF&!I4_en)CIJUlOjWbWOh5pt9IP zkz9IKX|^4#%$uObyGF{A=Wwe%W3y!4k`WE; zp|_@fNkUc+3^#*SgNC|C9|z&n3wX4C-jiT>9sMM!mpr}^_cKU^I~%3?Qqee4!rICqHpksbJDmpqOwPlbfKFEm5F4V0(_JQ?Q$pFXcRmz#C( zrao(y_>6Sp@F!r+Ef*U$^BMVCKj(%h7xH(wTvftmM|Iw@(xL;~;udbG0V{{bMqHPX)+!$Son? zmdE-1CF;(g9;9nl>KbcXSF+FB;ap$L7aaOJpKpoB%cUFoPRAgTU5zbmRL@%$<-;DV zekU;L3FLb`d)u3>#b+Au&)WH7pT{a|M7RSh2z6`KGSR7@rpu-R@lGH2a@M*)bZ5-G z*zUkZi3WJwd1r0d8HGFS#_!hi^4;UQR)xnOa#57B@F(+3=7@+^YfVGjCM~gy6w|tO zYK_GeqJUzPN3-8rTN*|C5d1z#PDjj)rQ)Yw-W$zoZ!20+{M@O`-9&kBT6u5-1@BSg z)MGo2*|>5M-71SU(&4Nc3#_yca<|h2Cj6Q8G4%U`-(3TshKKmi*7%Nyx|hNv1dBQY zI^Z857MJHLogVP~6}H9euM_vWquq$Uk)k=b0wzxmSnR}j05FJGEvw}aR1XD~B~?`Q z0@))i8%n+Dy_2jR+Tbaco4her@r19Z!cW?M&HNd-$^T0OQ$$;Xc08y2?2Uu<75aVm zr;hm6`l>5|Tb*3ml6sD<%fE3+qKJ)^7}44)sT{HC5;)a`(K%M$`vMt#)Z^LQPl05=tN=hF0Rp8e7cym<^rCI{RTX;;f!qWJwDc!V_8JJ7NjA`YDm z!utHGI;!AIKX-7QCcy56NztxJLmKNR3IK^A0teCbW}z@+FRjXvi&2z|{4_ml8vTB8 zcZmh*Ri!(GEsHaXRnc4`*SAW6=PQUF>u`y0oImB`g7+B8ULW%($bj%yAHp$b$_7s} z3&wU1gO5YXs_v6oc`i`o9d2-i3c{YO6Kiw8rWreFOK+MO zI72HQf;n`C}MGcQgL(;a&>FcIP0-T;q7oclrdT7)~qo*QJF(9 zhcXvQi>Dk&hlF&X&?lBxjas3t&s)@nAK95#Vt48d=D~Wd#qDt7494pGMdME~$^%E> z-8i6jZwNf&GY`o<)9YN%*9PwGUlq7ztYc~>g}^7V;X?sk^7~rL@k*J^^vuhU)Y|$? zJ01=PuQsCkjCe~NI6@uRW2WGty8p0ah{YXII` z9|x6)HU?0({z*y9@5L|7-+Bj8Y8jR0>t{;j5G5rnEZSYSNXeLZ+wa{I)02hF576SQ zlV}9_LWP!|7~v4E(d^yZ*WJXu&w@kh;N14~-MP<&kLVp;isjo|Wf%|)Rz!^@G+hWP zGugc@8!WLv$sGTaoGxDP|&^BJ*aZs z&-|Qedb(MtISpk!tI03|m2MzMnSLGZ=-m8gZmyB_)*}^7kz!Nn^u>3Q!KPr5X ziqgSH0i8}~rf@!F3mv@9u+_D`L5L@x>m4^L=6WU9%=flp+g_f)q>+d(e8elC1?-ky?pi2vfn!vKl7op%{*F^X z?x4;O&t@vqcB;E;gRhyU04+Zl=a77kYbLFqC->@aj5yPfZUz*-hhjFq%@#K|N6M`}0&ev9IhirmT!#Nlh0g5Zif+pI>N=PDP6-y+1atsDM=;k_f6YNdleL z=ro{i$SVlY}y%@I*WEoPOkYO_Cjz3-|Ne{0q0rUQ3I!rn22M3r}Yo% z=cils3N2;1d~u2+GJ2w3f#zaJ2)U4g4-o(MJPQT6OYDq~t(E?d-KnYyIAF;#oPQ{y ziVvUL4x_ld&eO`EWzXsKx*ub%y!ZPrl<c2D@$k zrkj_~fO8xbyQn6DPAb(nOyL0%5E-f&T*hEJ10=!Y?U!em&E)8899q?R6T6g)9WYhr zStpt`6Hr9UnP@OZRroKv0t_NBQSdvzpc8uTLV_9gDdv$#=LjmG67o`b5Rf?*UiO28 z)jpm{`J~ZTc#nI7iyTe|i#87AAs(72RW#OAO&e@uJP%px*rG(xdaI{JqfD=GEeJ`I zCzwDPBPpqL*%;pjSItr3rfJBA0AJ7hZq})W`ffjbTK9GMjT0xbzHi2&hnrXdq9V08 zM3Mrv2v0SMtTHJZ==j(di+70^K}ThUuO3bPP(5*yC0a$h4?;lX6NsRXT>tVgaP@K7 z1P31oS*_2IgzB6k7U%$RvoNN8j%S&z=Ap!G*T|;WBi7rvZricm0D6fdcYM=?Qrf>J zqe7kyCuw95tMpG}#qFIeHMBvMB624KFR>iPzoYUB&jV|a?lsPP@b+UBU9?=qL@IGL z=<9XW`}l*>W-)=jLio-^9ak}Q1Jzi-Qwcy+$qQZCW7;fQg6tp=e81fgV7Y3VdfeK|EnD5VJ=Lm8>A- zg;t{})`9TKu!*W~B#}<8R`JW0lGw>rifAJ>Sl%EqDnknCmKMa{HsPet-%lFRS0@+B zA^zabhq_LXD~qrNES63PBL~VlwMrl9LQt94AF^?^lES)#9Ec95pqM*q-l$?~D-~ma zR$3$Tc6UOw{40V^%{BcAA{SK4vsx`P5383e`SVi^d<{qcN5b#VCcpQ&8|OHi=e?bqhfXvXAeOM8sKw)02at7C_L2he1CDvF<%^XXz^rQ!d7!RLIk zTr)N!L8tV-#75c(Mb#=hwVFPAu(kJVzPZ_->U+KV=;+`$dyd56BbBvE5LZ8u50imJ zqb9lZbnQ7#S8jPs-pMTlhO<&fOyhwH;g<#!<(bWWb+wrUX@0X^XWHVj60Pn<$ya=Q z3HkZdJKs2Y0sqc5kxohy&N|(Wc~om$m-e6I85dj6W zE-atdP8rZ!B-cb8Xg}4d{KYFH(evZQp7p`fsEZlEB&1z74wQC#Z-AH>1fAXP`w3UK zv=t^Dh0gflO7r-CAs_vy2)OylXsu}rF+|<=8M-|>dB1(1$ASh+2&>`aS)XYv%eQQT zbq^YOgyrd+-L+*8(IQaKYA;Pra@AsLT%xn=9y{D05Bh_~D|EhI>^j%Z{$>7-&6?wP z&NVv5)DplPU|C2wojl3>v53w3m}eNB%wWhE3R>J^W{qt{rR(kNL`Td~ zGQ(!cVx}aZiPLFjYbd1q8yFnZeDl2nw;?NAC?Z~k%yUcRaR4DMYTbq4mmcbF@+n@h zt#HI9Aj=AhdWf!`k_ut5KrMc$GN@~lv+F;_7ML`~1S6N;) z-kA7TS?ffo!y$uXr*{LjStF^RWz>mtDUxiOVOFtV z$B#a5_9Ef2#AN+J`}MN z52*TR?VJ#4mYO%6vDDj>Y^Zd$6&85JKTk!BY^9^vGEp@-YC~z9Q@%Y{cve5}u4*Ik z*c80vi}CVhaIaZ$JiiOg%;e9{8ya2;~j1=p7?QPMadLj zg?h;Yu53uo6j5n{Jt?~$^ph5X*edD*-znezM5n)L2La;w;X1VKId$)QrUg`=oWK82(FJ(pf{G z0yI@c6|)?ItgjNXkR?Kox;jExuY?DISKUin5ssz(Kx8G2i<_N&Mtj_hT+ObrmXDi1 z(kW=&^ztD8nR-A%hS!>;t`xVguEJEbxeP<+ckOSh%4};Z<#0+0o4C^PI2d7kLl5NS zRBLj)g+Y&%zyAQouqH#YBFEU7$QwsG;(3u;TiLQSI-9QcUe^E}(XQjhj=4IJ1cm4~?~7-Wj;m4iOfrIU++)oNQD0 z7(H?t>maR;?7(^#R6q+xV=A}>_+LYp9?W9>e4-*n`9i)4o_G9jJ9*0@iZ>1HB#>$- z?hRcm>UmH)NSx>hLuann^#YU0UER$F$*-pqcfYMt&^FM35&<%umr%$Z7xbE_z?~3a z6ZNy+l=IG)p^jPwNz<}FR1T|5}&jnb6OIwOJTx|=AAg`jNOrLb>VzjH1W8l~z;Pwh7*4@HDZuL}M$>(3YD z2#-3bU5-}r;wn9B2Nc4}y#;PExRugCM7r(pG>)<)?CQ=UF^IsG4}0l;*3nmTu* z{HEM$zT(E{Ab7$zE&KXNc&plKCZeY6BeBn<;y{wFAP1eJ`&cZSX!@qQ-+(#D2XQh* zUr-GQf!Ojy^fS?$>Uviclb0|BI57e`HsyKtk}P!s{>w@gq~?gyPLF66#QC)Q=k)a) zynqn}~uB z=O25#ymJvtF_a$7XU`5R! zm)V6$SyXd>st-{g^0n;TI92`mzF(M_;BwiUmXpUju^Xt2G(Vw&zygTt>&{RqP1szO zXU5mbz~oFw;pp?ZTi(vCr+PjQQKNb+9+JsONC*_O(qq6BfIiiwp`CjAxTQrU%a2$Sk zKqssuhLP?m4K;9Z)iy{O3I%!9vVLW-O|w1~Oly58PBR}(1GiwI^uk~19Ow5GgUIvj?%L$oEbkdQTR}aAUpkc8dT++E2Rt;ZTdJh4b3;h+# zc@uZBA*Ru=H4`xu!L$PPBWNzkre$v8Qnd^YZ;QFDDlzUOtYvK%_Y!`DupL(V^LWn)%iE{-s+bX}mGD%*pGJ z9gwBr>s0Tu@uWMJODUjzNF1Q>`>~u$hfT5x6l1h(ZAS;EqzyYdU{I72^ZJYT18DU{ z@{#-c!0f}b?f6iPw?(NlgEu@^zFFUBqJxl~pWM?!Wr@5NQw$UO*R=U$3~1osz(%1Xtuin( zz&_|cUKmI}OXe7qVeTShmZbZ~Re!AVmIl0KEo}PAuFGIua@UOuoI>$a=V7`jL9-jvEPHs{DQaj4CnR}(BQcurAg|e*gbhj z*|^A^T*~vxz+CLCA+daj@KVw_3M?_91>O>gyFR39`Yrx#Ji)~=1<=_Q<_Cjiglf0q=i-$%!Ril-9EYK2@?+20i;M!EO+s{7m0g;(eme(dn6&1T#0Khy*eZh2hfPV$ zcFygy?Cy2FbJ{;vz3?>8um_teG3~`(Kj>KO?p90m$OywZr!FRc{`3JH8i2y;i7#WA zC|#d^!LRC)(Dc$%Y)YN(PqS7up@qKZC6~JAvn!AiQb+#!>*q*AQTOO-CvJgfg+^l$$mRW=;IAaC; zWk)h1i)S@&uIPmfbhm{Y$<+-ILAWKu4*-`1+lPwq7X(o&+!7i}+E|zlWDYS6s*Xo$ zJcR)5^=8Me}F6s7_qcBo}j5cd}sv3eU- z_4j{-UuD%c{td-qBFC}YZ6mKNs2N#x4tiZ}!6fJux9x@o9oU35SVmN*GG0(VojQfL z$_0M+hv9fo6u{t$^LtrXJWqcZKHFQnZ}X-B*Uq13;}$oKjIF2b4VGQqE?rrhcoj?q zwc|p{nb;rSt$DtU_9jG_7u5HR`7;cU^vVt2pN;p0eff3{Wsk2?A=F@`;tZGQcp)9Qa~eq-V}#x?M?vf#cJ6KX}5*|F+?44=Z>CHwv`RLZ&k@aO!;-Pa^ z077D{rE-HrXJ~wW{e;J*qz;0%z}T7rabr6%u@M;o5w2rWdgvOQs2rpu$B)JKl*e{< z)ia4!U>bw?S%u6GX~Jv-xBLgO=TVPBK6}#5a+o@ zLH>GGe*4n*u;ea@a8=Xyp+M8O+~9Rr5%5dU`>^B)U9)HI-@Oyjo-#><+@7VW{|TeK z3=BiNZNfvWHCSGA(YNLP$0qNwkL%R?MdtG=_w~KoEO<9?>tEZ7=_!w#tb2j~`>5^X z(s(b>+`M!aPiOtBuMH*hsi&37S#`W&>b)_A)7EKA686|Rg06N)t~TxsNaD@B9-zFO z{jAM;)|~yE#~adEFXM?~$xcH4aqNB<^vpgJ|K8RyZuk9}Vf}mkOS1+dZuQ+zK8)OQ znr%KHFT!kAz((vV62%R6EGy8dBzJ?F>ff{nDZWls=?X287xGX+xb1(ZrI3f$Uxfb& zD_&M$iCsW}fGi?|fc$s!@&APt-R*3Pw6-wz0nCrGfZk-=(PpmR>@TkO1p%{` zO@Zj5IyNnw(e$_gK4L~NWwthJXc zEOEy6X9c6T*w9`D?c)$eU;)rWlqvz!L*{s6k#+9Qbf@^d4cOyD(H;6`ZX{+ucB9N# z=I7^6PxaOwCnGDZbdDO%d&a#l-VibPO$=CT>ZfGl69ek9S0l;sI%?KUA2t?>E9bV^ z2;_;OVW?D%Ba_W3RmcTrq+x%YAshDJ`ctTnNn0zctEq$P9X||GQ4Y6>hY2mDN})SS zW1${<22c|uX~&j?sB9hmUZe~b$J@~=#|q|3RKO;i4vf$siiow&E};=@h#38~>#3%= zH^vUAcM-0yE(@az^vK7v&v8F_>uh3XVGUVFNLxw8%A7XF=~MHXOzVvF+kS5zbsrs+cowU!Wg z)+I=Eahcul6(5){mh)=Eh-=%+DHmP@Jh|>)^b%t$E!66?W%f3nA}i~~T4<7ekv73L zVKCj72CAK0;b@o8Vd(x+||p+VzPv(9!^^HYx%0e+Lc-z;DD z`>Ffu!_NEB-1*RXNtG941|xvYz=7j=Ij_gVt)%V6%*`0MYkq$^ezYsH|5CBEtGs_W zxwK)we{wx}>4!+GH#JMQtX^Bl%zm7F>Al(%>2IauL9{Rk+{LMBPN#*AA|zl(;#5S^ zz^yUpX?uPVz18{itc#T0az)tP*0r+cK38NUbqMP_rFrMnSFWw2;2Lt2Tv}e{`-=#E zY?`X&xstXw<25uT>HYRgrE;T1_IQjv+I36y>ZywL(Ef^IY}4A#+gG}+=aX>kkbRYv zmdk<1{9}PRxl&KNxmX4~uUn?=v1$IF6jh%)_uroiosti{YgC4k%N(cGb}W|@I~fsz zg)hGmqWT&0Z>TM2JRQ+Op!E;)Z*;Ys(E7Ip^BoD`^Bp4o=KQRzj69-S$-rbS*o;R!%FAm0v$0)pIC`!%hildp6o7~>A29ux2Ac6$uHB^AjY{l#?3!?VwV>j2x4l_xb9kBCLq5_ zuCeTVTd+mp&eIkai}negx18-bBXOS0?YjxzPIAjxTX36A`A~HAa;Vd$sEemRX|0^5 z@wsHp6Yti>6Q{nbu0HKhvxQB-=Aii}IZi&&@Hr4KITP?kDxqTsgPaT# zu5J=}vFTYTcMGfQI&IbEZtTA{iT_%DB%dQBVgplzZujbi4hsCmPuLh@=7dHDuo)XN zg|GyeOqAxh^FzIw%`{PH3D5C_oTLet*gtAEJ002g;Z$e;W3AI13hd`j>&{(rF<{f` z)RW6ijWq&iZ7n>|z&u-YN1$ZJe(_(Y|FN4tIMMy_zC%l~4Yx#3{Gr|cwJf4b>sp^V zmMbJY*(35fr+``KrGuEmzPrB`hJCQ~YQ{ozi5?{8%Lj;v2;z16OrV0-=NuZz2{em(b2 zChNUk*|cxg-qLfwzBQ@({Wq}sb=aNzk$Wfm)b>>+UJKm)Z_nqeap}Ty*0<;X|N128 zK?eql(KoB-iGj*L7x}{yO{;A?HBmv@cY}Z zyWi$ka|rCMHt4@~{+V_3XU_Rw)fr6EGTxqacolEzmiFM1&~nlJSKQ{kzowD1>;Eo= zL#6hz8-%tQzS%Tm-e&9bPb!KsWl|f1mHs_hVKc9CJu}lc9^>bZdfR_474iKLe0IZS0AS9zSHz_YMGpAS|p^*cuF?;db zwNHZ>7~TQ*K1e{7Lnuukg`}|rW`IZKXihioVwYq4fe#E37dA z+Ju3w6TRVq&{8M^%6~E3j$9z`zEC8H_+i3y22*5HcD1 literal 0 HcmV?d00001 From 1c580988d7a1eed3b3c5620933fad27ab79b38fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=89=E8=B4=9E?= Date: Thu, 13 Feb 2020 18:02:01 +0800 Subject: [PATCH 0082/1268] week01-391 --- Week_00/G20200343030391/LeetCode_11_391.java | 48 ++++++++++ Week_00/G20200343030391/LeetCode_283_391.java | 49 ++++++++++ Week_00/G20200343030391/LeetCode_70_391.java | 11 +++ Week_01/G20200343030391/LeetCode_189_391.java | 8 ++ Week_01/G20200343030391/LeetCode_1_391.java | 50 +++++++++++ Week_01/G20200343030391/LeetCode_21_391.java | 90 +++++++++++++++++++ Week_01/G20200343030391/LeetCode_26_391.java | 36 ++++++++ Week_01/G20200343030391/LeetCode_283_391.java | 8 ++ Week_01/G20200343030391/LeetCode_66_391.java | 8 ++ Week_01/G20200343030391/LeetCode_88_391.java | 8 ++ 10 files changed, 316 insertions(+) create mode 100644 Week_00/G20200343030391/LeetCode_11_391.java create mode 100644 Week_00/G20200343030391/LeetCode_283_391.java create mode 100644 Week_00/G20200343030391/LeetCode_70_391.java create mode 100644 Week_01/G20200343030391/LeetCode_189_391.java create mode 100644 Week_01/G20200343030391/LeetCode_1_391.java create mode 100644 Week_01/G20200343030391/LeetCode_21_391.java create mode 100644 Week_01/G20200343030391/LeetCode_26_391.java create mode 100644 Week_01/G20200343030391/LeetCode_283_391.java create mode 100644 Week_01/G20200343030391/LeetCode_66_391.java create mode 100644 Week_01/G20200343030391/LeetCode_88_391.java diff --git a/Week_00/G20200343030391/LeetCode_11_391.java b/Week_00/G20200343030391/LeetCode_11_391.java new file mode 100644 index 00000000..0aa83518 --- /dev/null +++ b/Week_00/G20200343030391/LeetCode_11_391.java @@ -0,0 +1,48 @@ +public class LeetCode_11_391 { + public static void main(String[] args) { + int[] nums = {1, 8, 6, 2, 5, 4, 8, 3, 7}; + int max = maxAreaDoubleCursor(nums); + System.out.println(max); + + } + + /** + * 暴力解法 + * 时间复杂度O(n^2) + * @param height + * @return + */ + public static int maxAreaViolence(int[] height) { + int max = 0; + for (int i = 0; i < height.length; i++) { + for (int j = i + 1; j < height.length; j++) { + max = Math.max(max, Math.min(height[i], height[j]) * (j - i)); + } + } + return max; + } + + /** + * 双指针: + * 两侧夹逼移动最小板 + * 时间复杂度O(n^2) + * @param height + * @return + */ + public static int maxAreaDoubleCursor(int[] height) { + int max = 0; + int i = 0; + int j = height.length - 1; + while (i < j) { + if (height[i] < height[j]) { + max = Math.max(max, height[i] * (j - i)); + i++; + } else { + max = Math.max(max, height[j] * (j - i)); + j--; + } + + } + return max; + } +} diff --git a/Week_00/G20200343030391/LeetCode_283_391.java b/Week_00/G20200343030391/LeetCode_283_391.java new file mode 100644 index 00000000..7a57fbb0 --- /dev/null +++ b/Week_00/G20200343030391/LeetCode_283_391.java @@ -0,0 +1,49 @@ +import java.util.Arrays; + +public class LeetCode_283_391 { + + public static void main(String[] args) { + int[] nums = {0, 0, 1}; + moveZeroesDoubleCursor(nums); + System.out.println(Arrays.toString(nums)); + } + + /** + * 暴力补0 + * index记录非0下标,若有0则直接向前移动;最后补0 + * 时间复杂度O(n) + * @param nums + */ + public static void moveZeroes_1(int[] nums) { + int index = 0; + for (int i = 0; i < nums.length; i++) { + if (nums[i] != 0) { + nums[index] = nums[i]; + index++; + } + } + for (int i = index; i < nums.length; i++) { + nums[i] = 0; + } + } + + /** + * 双指针: + * 快指针i 满指针j 非0元素直接前移 + * 时间复杂度O(n) + * @param nums + */ + public static void moveZeroesDoubleCursor(int[] nums) { + + int j = 0; + for (int i = 0; i < nums.length; i++) { + if (nums[i] != 0) { + int tmp = nums[i]; + nums[i] = nums[j]; + nums[j] = tmp; + j++; + } + } + } + +} diff --git a/Week_00/G20200343030391/LeetCode_70_391.java b/Week_00/G20200343030391/LeetCode_70_391.java new file mode 100644 index 00000000..59a5cd2b --- /dev/null +++ b/Week_00/G20200343030391/LeetCode_70_391.java @@ -0,0 +1,11 @@ +public class LeetCode_70_391 { + + public static void main(String[] args) { + System.out.println(climbStairs(3)); + } + + public static int climbStairs(int n) { + + return 0; + } +} diff --git a/Week_01/G20200343030391/LeetCode_189_391.java b/Week_01/G20200343030391/LeetCode_189_391.java new file mode 100644 index 00000000..e1a75f7d --- /dev/null +++ b/Week_01/G20200343030391/LeetCode_189_391.java @@ -0,0 +1,8 @@ +package G20200343030391; + +public class LeetCode_189_391 { + + public static void main(String[] args) { + + } +} diff --git a/Week_01/G20200343030391/LeetCode_1_391.java b/Week_01/G20200343030391/LeetCode_1_391.java new file mode 100644 index 00000000..23bf5fe6 --- /dev/null +++ b/Week_01/G20200343030391/LeetCode_1_391.java @@ -0,0 +1,50 @@ +package G20200343030391; + +import java.util.Arrays; +import java.util.HashMap; + +public class LeetCode_1_391 { + + public static void main(String[] args) { + int[] nums = {2, 7, 11, 15}; + int target = 9; + int[] ints = twoSum_2(nums, target); + System.out.println(Arrays.toString(ints)); + } + + /** + * 解法1:暴力求解 + * 时间复杂度:O(n^2) + * @param nums + * @param target + * @return + */ + public static int[] twoSum_1(int[] nums, int target) { + for (int i = 0; i < nums.length; i++) { + for (int j = i; j < nums.length; j++) { + if (nums[i] + nums[j] == target) { + return new int[]{i, j}; + } + } + } + return null; + } + /** + * 解法2:hash表 + * 时间复杂度:O(n) + * @param nums + * @param target + * @return + */ + public static int[] twoSum_2(int[] nums, int target) { + HashMap hashMap = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + int n2 = target - nums[i]; + if (hashMap.containsKey(n2)) { + return new int[]{i, hashMap.get(n2)}; + } + hashMap.put(nums[i], i); + } + return null; + } +} diff --git a/Week_01/G20200343030391/LeetCode_21_391.java b/Week_01/G20200343030391/LeetCode_21_391.java new file mode 100644 index 00000000..47ed8f46 --- /dev/null +++ b/Week_01/G20200343030391/LeetCode_21_391.java @@ -0,0 +1,90 @@ +package G20200343030391; + +public class LeetCode_21_391 { + + public static void main(String[] args) { + + // 1->2->4 + ListNode l11 = new ListNode(1); + ListNode l12 = new ListNode(2); + ListNode l14 = new ListNode(4); + l11.next = l12; + l12.next = l14; + // 1->3->4 + ListNode l21 = new ListNode(1); + ListNode l23 = new ListNode(3); + ListNode l24 = new ListNode(4); + l21.next = l23; + l23.next = l24; + + ListNode listNode = mergeTwoLists_2(l11, l21); + System.out.println(listNode); + } + + /** + * 解法1:allNode为合并后的结果,currentNode连接l1和l2的最小的next节点 + * 时间复杂度:O(n) + * @param l1 + * @param l2 + * @return + */ + public static ListNode mergeTwoLists_1(ListNode l1, ListNode l2) { + ListNode allNode = new ListNode(-1); + + ListNode currentNode = allNode; + while (l1 != null && l2 != null) { + if (l1.val <= l2.val) { + currentNode.next = l1; + l1 = l1.next; + } else { + currentNode.next = l2; + l2 = l2.next; + } + currentNode = currentNode.next; + } + + currentNode.next = l1 == null ? l2 : l1; + + return allNode.next; + + } + /** + * 解法2:递归查找 + * 时间复杂度:O(n) + * @param l1 + * @param l2 + * @return + */ + public static ListNode mergeTwoLists_2(ListNode l1, ListNode l2) { + if (l1 == null) { + return l2; + } else if (l2 == null) { + return l1; + } else if (l1.val <= l2.val) { + l1.next = mergeTwoLists_2(l1.next, l2); + return l1; + } else { + l2.next = mergeTwoLists_2(l1, l2.next); + return l2; + } + } + + public static class ListNode { + int val; + ListNode next; + + ListNode(int x) { + val = x; + } + @Override + public String toString() { + String toString = this.val + "->"; + ListNode next = this.next; + while (next != null) { + toString = toString + next.val + "->"; + next = next.next; + } + return toString + "null"; + } + } +} diff --git a/Week_01/G20200343030391/LeetCode_26_391.java b/Week_01/G20200343030391/LeetCode_26_391.java new file mode 100644 index 00000000..28c909e8 --- /dev/null +++ b/Week_01/G20200343030391/LeetCode_26_391.java @@ -0,0 +1,36 @@ +package G20200343030391; + +import java.util.Arrays; + +public class LeetCode_26_391 { + + public static void main(String[] args) { + int[] nums = {0, 0, 1, 1, 1, 2, 2, 3, 3, 4}; + int i = removeDuplicates_1(nums); + System.out.println(i + ":" + Arrays.toString(nums)); + } + + /** + * 双指针 + * @param nums + * @return + */ + public static int removeDuplicates_1(int[] nums) { + int j = 1; + for (int i = 0; i < nums.length; i++) { + if (nums[i] == nums[j]) { + nums[] + } + } + return j; + } + + /** + * 递归 + * @param nums + * @return + */ + public static int removeDuplicates_2(int[] nums) { + return 0; + } +} diff --git a/Week_01/G20200343030391/LeetCode_283_391.java b/Week_01/G20200343030391/LeetCode_283_391.java new file mode 100644 index 00000000..11a800ae --- /dev/null +++ b/Week_01/G20200343030391/LeetCode_283_391.java @@ -0,0 +1,8 @@ +package G20200343030391; + +public class LeetCode_283_391 { + + public static void main(String[] args) { + + } +} diff --git a/Week_01/G20200343030391/LeetCode_66_391.java b/Week_01/G20200343030391/LeetCode_66_391.java new file mode 100644 index 00000000..abc0ecd1 --- /dev/null +++ b/Week_01/G20200343030391/LeetCode_66_391.java @@ -0,0 +1,8 @@ +package G20200343030391; + +public class LeetCode_66_391 { + + public static void main(String[] args) { + + } +} diff --git a/Week_01/G20200343030391/LeetCode_88_391.java b/Week_01/G20200343030391/LeetCode_88_391.java new file mode 100644 index 00000000..79917bc3 --- /dev/null +++ b/Week_01/G20200343030391/LeetCode_88_391.java @@ -0,0 +1,8 @@ +package G20200343030391; + +public class LeetCode_88_391 { + + public static void main(String[] args) { + + } +} From 46e04d7a6633551762af620f7a8dcad7213ba973 Mon Sep 17 00:00:00 2001 From: fpanda Date: Thu, 13 Feb 2020 19:23:20 +0800 Subject: [PATCH 0083/1268] Add LeetCode 088 Merge Two Sorted Array --- Week_01/G20200343030449/LeetCode_088_449.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Week_01/G20200343030449/LeetCode_088_449.cpp diff --git a/Week_01/G20200343030449/LeetCode_088_449.cpp b/Week_01/G20200343030449/LeetCode_088_449.cpp new file mode 100644 index 00000000..5d527cd5 --- /dev/null +++ b/Week_01/G20200343030449/LeetCode_088_449.cpp @@ -0,0 +1,14 @@ +class Solution { +public: + void merge(vector& nums1, int m, vector& nums2, int n) { + auto i = m-1; + auto j = n-1; + auto k = m+n-1; + while (i>=0&&j>=0) nums1[k--]=nums1[i]>nums2[j]?nums1[i--]:nums2[j--]; + while (i>=0) nums1[k--]=nums1[i--]; + while (j>=0) nums1[k--]=nums2[j--]; + + return; + + } +}; From eee7b0ef30bf1d09970e891587143309c49b7bc8 Mon Sep 17 00:00:00 2001 From: Huangzikun <381560728@qq.com> Date: Thu, 13 Feb 2020 20:39:55 +0800 Subject: [PATCH 0084/1268] 4 --- Week_00/G20200343030395/LeetCode_3_395.java | 100 +++++++++---------- Week_00/G20200343030395/LeetCode_4__395.java | 38 +++++++ 2 files changed, 88 insertions(+), 50 deletions(-) create mode 100644 Week_00/G20200343030395/LeetCode_4__395.java diff --git a/Week_00/G20200343030395/LeetCode_3_395.java b/Week_00/G20200343030395/LeetCode_3_395.java index 78047256..c2ac251b 100644 --- a/Week_00/G20200343030395/LeetCode_3_395.java +++ b/Week_00/G20200343030395/LeetCode_3_395.java @@ -1,56 +1,56 @@ package Week_00.G20200343030395; public class LeetCode_3_395 { - public static void main(String[] args) { - ListNode l1 = new ListNode(1); - ListNode l2 = new ListNode(1); - - ListNode ret; - //l1是空的,直接返回l2 - if(l1 == null) { - return l2; - } - //同上 - if(l2 == null) { - return l1; - } - - //先取个头 - if(l1.val < l2.val) { - ret = l1; - l1 = l1.next; - } else { - ret = l2; - l2 = l2.next; - } - - //保存头,返回用 - ListNode head = ret; - - //循环,到其中一个到尾为止,谁小取谁 - while(l1 != null && l2 != null) { - if(l1.val < l2.val) { - ret.next = l1; - ret = ret.next; - l1 = l1.next; - } else { - ret.next = l2; - ret = ret.next; - l2 = l2.next; - } - } - - //把剩下的接上去 - if(l1 != null) { - ret.next = l1; - } - //把剩下的接上去 - if(l2 != null) { - ret.next = l2; - } - - //return head; - } +// public static void main(String[] args) { +// ListNode l1 = new ListNode(1); +// ListNode l2 = new ListNode(1); +// +// ListNode ret; +// //l1是空的,直接返回l2 +// if(l1 == null) { +// return l2; +// } +// //同上 +// if(l2 == null) { +// return l1; +// } +// +// //先取个头 +// if(l1.val < l2.val) { +// ret = l1; +// l1 = l1.next; +// } else { +// ret = l2; +// l2 = l2.next; +// } +// +// //保存头,返回用 +// ListNode head = ret; +// +// //循环,到其中一个到尾为止,谁小取谁 +// while(l1 != null && l2 != null) { +// if(l1.val < l2.val) { +// ret.next = l1; +// ret = ret.next; +// l1 = l1.next; +// } else { +// ret.next = l2; +// ret = ret.next; +// l2 = l2.next; +// } +// } +// +// //把剩下的接上去 +// if(l1 != null) { +// ret.next = l1; +// } +// //把剩下的接上去 +// if(l2 != null) { +// ret.next = l2; +// } +// +// //return head; +// } public static class ListNode { int val; diff --git a/Week_00/G20200343030395/LeetCode_4__395.java b/Week_00/G20200343030395/LeetCode_4__395.java new file mode 100644 index 00000000..c64b02d1 --- /dev/null +++ b/Week_00/G20200343030395/LeetCode_4__395.java @@ -0,0 +1,38 @@ +package Week_00.G20200343030395; + +import java.util.Arrays; + +public class LeetCode_4__395 { + public static void main(String[] args) { + int[] nums1 = new int[]{1,2,3,0,0,0}; + int[] nums2 = new int[]{2,5,6}; + + merge(nums1, 3, nums2, 3); + System.out.println(Arrays.toString(nums1)); + + } + + public static void merge(int[] nums1, int m, int[] nums2, int n) { + //复制一个一样的nums1 + int [] nums1Copy = new int[m]; + System.arraycopy(nums1, 0, nums1Copy, 0, m); + + int p1 = 0; + int p2 = 0; + int p = 0; + + //循环比较两个数组里面的值,直到有其中一个用完为止 + while ((p1 < m) && (p2 < n)) { + nums1[p++] = (nums1Copy[p1] < nums2[p2]) ? nums1Copy[p1++] : nums2[p2++]; + } + + //把两个数组剩下的数据丢到num1 + if (p1 < m) { + System.arraycopy(nums1Copy, p1, nums1, p1 + p2, m + n - p1 - p2); + } + if (p2 < n) { + System.arraycopy(nums2, p2, nums1, p1 + p2, m + n - p1 - p2); + } + + } +} From 91fbe638b9be0cd729f01cb0201b7c709f5b7a6e Mon Sep 17 00:00:00 2001 From: Huangzikun <381560728@qq.com> Date: Thu, 13 Feb 2020 21:02:41 +0800 Subject: [PATCH 0085/1268] 5 --- Week_00/G20200343030395/LeetCode_5_395.java | 45 +++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Week_00/G20200343030395/LeetCode_5_395.java diff --git a/Week_00/G20200343030395/LeetCode_5_395.java b/Week_00/G20200343030395/LeetCode_5_395.java new file mode 100644 index 00000000..689bd1f0 --- /dev/null +++ b/Week_00/G20200343030395/LeetCode_5_395.java @@ -0,0 +1,45 @@ +package Week_00.G20200343030395; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +public class LeetCode_5_395 { + public static void main(String[] args) { + int[] nums1 = new int[]{2, 7, 11, 15}; + + int[] ret = twoSum(nums1, 9); + System.out.println(Arrays.toString(ret)); + + } + + public static int[] twoSum(int[] nums, int target) { + int[] x = new int[2]; + for(int i = 0;i map = new HashMap<>(); + // + for (int i = 0; i < nums.length; i++) { + int complement = target - nums[i]; + if (map.containsKey(complement)) { + return new int[] { + map.get(complement), i + }; + } + map.put(nums[i], i); + } + throw new IllegalArgumentException("No two sum solution"); + } +} From c2620de7d556ecd2f58ff350eb6789823bbfa9ea Mon Sep 17 00:00:00 2001 From: tanxujko <52782836@qq.com> Date: Thu, 13 Feb 2020 21:49:40 +0800 Subject: [PATCH 0086/1268] first commit --- .../G20200343030511/LeetCode_189(1)_511.java | 21 ++++++++++++++ .../G20200343030511/LeetCode_189(2)_511.java | 14 +++++++++ .../G20200343030511/LeetCode_21(2)_511.java | 28 ++++++++++++++++++ Week_01/G20200343030511/LeetCode_21_511.java | 22 ++++++++++++++ Week_01/G20200343030511/LeetCode_26_511.java | 18 ++++++++++++ Week_01/G20200343030511/LeetCode_283_511.java | 19 ++++++++++++ .../G20200343030511/LeetCode_42(2)_511.java | 21 ++++++++++++++ .../G20200343030511/LeetCode_42(3)_511.java | 24 +++++++++++++++ .../G20200343030511/LeetCode_42(4)_511.java | 2 ++ Week_01/G20200343030511/LeetCode_42_511.java | 29 +++++++++++++++++++ Week_01/G20200343030511/LeetCode_66_511.java | 15 ++++++++++ .../G20200343030511/LeetCode_88(2)_511.java | 26 +++++++++++++++++ Week_01/G20200343030511/LeetCode_88_511.java | 24 +++++++++++++++ 13 files changed, 263 insertions(+) create mode 100644 Week_01/G20200343030511/LeetCode_189(1)_511.java create mode 100644 Week_01/G20200343030511/LeetCode_189(2)_511.java create mode 100644 Week_01/G20200343030511/LeetCode_21(2)_511.java create mode 100644 Week_01/G20200343030511/LeetCode_21_511.java create mode 100644 Week_01/G20200343030511/LeetCode_26_511.java create mode 100644 Week_01/G20200343030511/LeetCode_283_511.java create mode 100644 Week_01/G20200343030511/LeetCode_42(2)_511.java create mode 100644 Week_01/G20200343030511/LeetCode_42(3)_511.java create mode 100644 Week_01/G20200343030511/LeetCode_42(4)_511.java create mode 100644 Week_01/G20200343030511/LeetCode_42_511.java create mode 100644 Week_01/G20200343030511/LeetCode_66_511.java create mode 100644 Week_01/G20200343030511/LeetCode_88(2)_511.java create mode 100644 Week_01/G20200343030511/LeetCode_88_511.java diff --git a/Week_01/G20200343030511/LeetCode_189(1)_511.java b/Week_01/G20200343030511/LeetCode_189(1)_511.java new file mode 100644 index 00000000..563366f1 --- /dev/null +++ b/Week_01/G20200343030511/LeetCode_189(1)_511.java @@ -0,0 +1,21 @@ +class Solution { + public void rotate(int[] nums, int k) { + if(nums==null||nums.length<=1) return; + + reverise(nums,0,nums.length-1); + reverise(nums,0,k%nums.length-1); + reverise(nums,k%nums.length,nums.length-1); + + } + + private void reverise(int[] nums, int start, int end) { + while(start0; j--) { + nums[j]=nums[j-1]; + } + nums[0]=temp; + } + } + +} \ No newline at end of file diff --git a/Week_01/G20200343030511/LeetCode_21(2)_511.java b/Week_01/G20200343030511/LeetCode_21(2)_511.java new file mode 100644 index 00000000..16678086 --- /dev/null +++ b/Week_01/G20200343030511/LeetCode_21(2)_511.java @@ -0,0 +1,28 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode(int x) { val = x; } + * } + */ +class Solution { + public ListNode mergeTwoLists(ListNode l1, ListNode l2) { + ListNode prehead = new ListNode(-1); + + ListNode prev = prehead; + //һ㣬ֻҪһΪգľͲҪˡ + while (l1 != null && l2 != null) { + if (l1.val <= l2.val) { + prev.next = l1; + l1 = l1.next; + } else { + prev.next = l2; + l2 = l2.next; + } + prev = prev.next; + } + prev.next = l1 == null ? l2 : l1; + return prehead.next; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030511/LeetCode_21_511.java b/Week_01/G20200343030511/LeetCode_21_511.java new file mode 100644 index 00000000..15f1008d --- /dev/null +++ b/Week_01/G20200343030511/LeetCode_21_511.java @@ -0,0 +1,22 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode(int x) { val = x; } + * } + */ +class Solution { + public ListNode mergeTwoLists(ListNode l1, ListNode l2) { + if(l1==null) return l2; + if(l2==null) return l1; + if(l1.val<=l2.val){ + l1.next = mergeTwoLists(l1.next, l2); + return l1; + } + else{ + l2.next = mergeTwoLists(l1, l2.next); + return l2; + } + } +} \ No newline at end of file diff --git a/Week_01/G20200343030511/LeetCode_26_511.java b/Week_01/G20200343030511/LeetCode_26_511.java new file mode 100644 index 00000000..074d2594 --- /dev/null +++ b/Week_01/G20200343030511/LeetCode_26_511.java @@ -0,0 +1,18 @@ +class Solution { + public int removeDuplicates(int[] nums) { + + if(nums ==null||nums.length==0) return 0; + if(nums.length==1)return 1; + + int i=1,j=1; + for (; i < nums.length; i++) { + if(nums[i]!=nums[i-1]){ + nums[j++]=nums[i]; + } + } + + + + return j; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030511/LeetCode_283_511.java b/Week_01/G20200343030511/LeetCode_283_511.java new file mode 100644 index 00000000..384e7b91 --- /dev/null +++ b/Week_01/G20200343030511/LeetCode_283_511.java @@ -0,0 +1,19 @@ +class Solution { + public void moveZeroes(int[] nums) { + int i =0; + for (; i < nums.length; i++) { + if(nums[i]==0) break; + } + int j=i; + for (; j < nums.length; j++) { + if(nums[j]!=0){ + nums[i]=nums[j]; + i++; + } + } + + for (int j2 = i; j2 < nums.length; j2++) { + nums[j2]=0; + } + } +} \ No newline at end of file diff --git a/Week_01/G20200343030511/LeetCode_42(2)_511.java b/Week_01/G20200343030511/LeetCode_42(2)_511.java new file mode 100644 index 00000000..f8f0d05c --- /dev/null +++ b/Week_01/G20200343030511/LeetCode_42(2)_511.java @@ -0,0 +1,21 @@ +class Solution { + public int trap(int[] height) { + if(height==null&&height.length<=1) return 0; + int[] max_left = new int[height.length]; + int[] max_right = new int[height.length]; + for (int i = 1; i < max_left.length-1; i++) { + max_left[i] = Math.max(max_left[i-1], height[i-1]); + } + for (int i = max_right.length-2; i > 0 ; i--) { + max_right[i] = Math.max(max_right[i+1], height[i+1]); + } + int maxArea =0; + for (int i = 1; i < height.length-1; i++) { + if(height[i]>=max_left[i]||height[i]>=max_right[i]){ + continue; + } + maxArea = maxArea+ Math.min(max_left[i], max_right[i])-height[i]; + } + return maxArea; + } +} diff --git a/Week_01/G20200343030511/LeetCode_42(3)_511.java b/Week_01/G20200343030511/LeetCode_42(3)_511.java new file mode 100644 index 00000000..4c811901 --- /dev/null +++ b/Week_01/G20200343030511/LeetCode_42(3)_511.java @@ -0,0 +1,24 @@ +class Solution { + public int trap(int[] height) { + int left =1; + int right =height.length-2; + int sum =0; + int max =0; + int maxRight =0; + for (int i = 1; i < height.length-1; i++) { + if(height[left-1]height[left]){ + sum = sum +max-height[left]; + } + left++; + }else{ + maxRight =Math.max(maxRight, height[right+1]); + if(maxRight>height[right]){ + sum =sum+maxRight-height[right]; + } + right--; + } + } + return sum; + } diff --git a/Week_01/G20200343030511/LeetCode_42(4)_511.java b/Week_01/G20200343030511/LeetCode_42(4)_511.java new file mode 100644 index 00000000..311baac3 --- /dev/null +++ b/Week_01/G20200343030511/LeetCode_42(4)_511.java @@ -0,0 +1,2 @@ +class Solution { +} diff --git a/Week_01/G20200343030511/LeetCode_42_511.java b/Week_01/G20200343030511/LeetCode_42_511.java new file mode 100644 index 00000000..f226bafe --- /dev/null +++ b/Week_01/G20200343030511/LeetCode_42_511.java @@ -0,0 +1,29 @@ +class Solution { + public int trap(int[] height) { + if(height==null&&height.length<=1) return 0; + + int[] h = height; + int maxArea =0; + + for (int i = 1; i < h.length-1; i++) { + + int maxLeft =0; + int maxRight =0; + int area; + + + for (int j = 0; j < i; j++) { + maxLeft = Math.max(h[j], maxLeft); + } + for (int j = i+1; j < h.length; j++) { + maxRight =Math.max(maxRight, h[j]); + } + if(h[i]>=maxLeft||h[i]>=maxRight){ + continue; + } + area = Math.min(maxRight,maxLeft) - h[i]; + maxArea = maxArea + area; + } + return maxArea; + } + } diff --git a/Week_01/G20200343030511/LeetCode_66_511.java b/Week_01/G20200343030511/LeetCode_66_511.java new file mode 100644 index 00000000..c1f8a09a --- /dev/null +++ b/Week_01/G20200343030511/LeetCode_66_511.java @@ -0,0 +1,15 @@ +class Solution { + public int[] plusOne(int[] digits) { + for (int i = digits.length-1; i >= 0; i--) { + if(digits[i]!=9) { + digits[i]++; + return digits; + }else{ + digits[i]=0; + } + } + int[] result = new int[digits.length+1]; + result[0]=1; + return result; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030511/LeetCode_88(2)_511.java b/Week_01/G20200343030511/LeetCode_88(2)_511.java new file mode 100644 index 00000000..e6b106fb --- /dev/null +++ b/Week_01/G20200343030511/LeetCode_88(2)_511.java @@ -0,0 +1,26 @@ +class Solution { + public void merge(int[] nums1, int m, int[] nums2, int n) { + if (nums1.length < nums2.length) + return ; + int[] nums3 = new int[m]; + System.arraycopy(nums1, 0, nums3, 0, m); + + int i = 0, j = 0, k = 0; + while (i < m && j < n) { + if (nums3[i] < nums2[j]) { + nums1[k++] = nums3[i]; + i++; + } else { + nums1[k++] = nums2[j]; + j++; + } + } + // ϲ + if (i < m) { + System.arraycopy(nums3, i, nums1, k, m - i); + } + if (j < n) { + System.arraycopy(nums2, j, nums1, k, n - j); + } + } +} \ No newline at end of file diff --git a/Week_01/G20200343030511/LeetCode_88_511.java b/Week_01/G20200343030511/LeetCode_88_511.java new file mode 100644 index 00000000..f69481d3 --- /dev/null +++ b/Week_01/G20200343030511/LeetCode_88_511.java @@ -0,0 +1,24 @@ +class Solution { + public void merge(int[] nums1, int m, int[] nums2, int n) { + if (nums1.length < nums2.length) + return ; + + int l =m-1; + int k= n-1; + int p =m+n-1; + + while(l>=0&&k>=0){ + if(nums1[l] Date: Thu, 13 Feb 2020 23:02:19 +0800 Subject: [PATCH 0087/1268] second commit --- Week_01/G20200343030635/id635/283.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Week_01/G20200343030635/id635/283.cpp diff --git a/Week_01/G20200343030635/id635/283.cpp b/Week_01/G20200343030635/id635/283.cpp new file mode 100644 index 00000000..78ad62ce --- /dev/null +++ b/Week_01/G20200343030635/id635/283.cpp @@ -0,0 +1,17 @@ +class Solution { +public: + void moveZeroes(vector& nums) { + int count=0; + for(auto it=nums.begin();it!=nums.end();) + { + if((*it)==0) + { + it=nums.erase(it); + count++; + } + else + ++it; + } + nums.insert(nums.end(),count,0); + } +}; From 6b500017992778ef2fdff58cd51b6d3f9f4bd700 Mon Sep 17 00:00:00 2001 From: fpanda Date: Fri, 14 Feb 2020 10:19:18 +0800 Subject: [PATCH 0088/1268] Rename the filename to satisified --- .../G20200343030449/{LeetCode_021_449.cpp => LeetCode_21_449.cpp} | 0 .../G20200343030449/{LeetCode_026_449.cpp => LeetCode_26_449.cpp} | 0 .../G20200343030449/{LeetCode_066_449.cpp => LeetCode_66_449.cpp} | 0 .../G20200343030449/{LeetCode_088_449.cpp => LeetCode_88_449.cpp} | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename Week_01/G20200343030449/{LeetCode_021_449.cpp => LeetCode_21_449.cpp} (100%) rename Week_01/G20200343030449/{LeetCode_026_449.cpp => LeetCode_26_449.cpp} (100%) rename Week_01/G20200343030449/{LeetCode_066_449.cpp => LeetCode_66_449.cpp} (100%) rename Week_01/G20200343030449/{LeetCode_088_449.cpp => LeetCode_88_449.cpp} (100%) diff --git a/Week_01/G20200343030449/LeetCode_021_449.cpp b/Week_01/G20200343030449/LeetCode_21_449.cpp similarity index 100% rename from Week_01/G20200343030449/LeetCode_021_449.cpp rename to Week_01/G20200343030449/LeetCode_21_449.cpp diff --git a/Week_01/G20200343030449/LeetCode_026_449.cpp b/Week_01/G20200343030449/LeetCode_26_449.cpp similarity index 100% rename from Week_01/G20200343030449/LeetCode_026_449.cpp rename to Week_01/G20200343030449/LeetCode_26_449.cpp diff --git a/Week_01/G20200343030449/LeetCode_066_449.cpp b/Week_01/G20200343030449/LeetCode_66_449.cpp similarity index 100% rename from Week_01/G20200343030449/LeetCode_066_449.cpp rename to Week_01/G20200343030449/LeetCode_66_449.cpp diff --git a/Week_01/G20200343030449/LeetCode_088_449.cpp b/Week_01/G20200343030449/LeetCode_88_449.cpp similarity index 100% rename from Week_01/G20200343030449/LeetCode_088_449.cpp rename to Week_01/G20200343030449/LeetCode_88_449.cpp From b19868a18575b73f75edcf2a7863a0e89c359eae Mon Sep 17 00:00:00 2001 From: fpanda Date: Fri, 14 Feb 2020 10:44:30 +0800 Subject: [PATCH 0089/1268] Add LeetCode 1 Two Sum --- Week_01/G20200343030449/LeetCode_1_449.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Week_01/G20200343030449/LeetCode_1_449.cpp diff --git a/Week_01/G20200343030449/LeetCode_1_449.cpp b/Week_01/G20200343030449/LeetCode_1_449.cpp new file mode 100644 index 00000000..557c6359 --- /dev/null +++ b/Week_01/G20200343030449/LeetCode_1_449.cpp @@ -0,0 +1,17 @@ +class Solution { +public: + vector twoSum(vector& nums, int target) { + unordered_map var2index; + + for (auto i = 0; i < nums.size(); i++) { + auto iter = var2index.find(target-nums[i]); + if (iter!=var2index.end()) { + return vector({iter->second, i}); + } + + var2index.insert(make_pair(nums[i],i)); + } + + return vector(0); + } +}; From 974053d8ea3916805adcbd175c90585cf289e381 Mon Sep 17 00:00:00 2001 From: fpanda Date: Fri, 14 Feb 2020 11:50:48 +0800 Subject: [PATCH 0090/1268] Add LeetCode 641 Design Double Queue --- Week_01/G20200343030449/LeetCode_641_449.cpp | 148 +++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 Week_01/G20200343030449/LeetCode_641_449.cpp diff --git a/Week_01/G20200343030449/LeetCode_641_449.cpp b/Week_01/G20200343030449/LeetCode_641_449.cpp new file mode 100644 index 00000000..ff75987b --- /dev/null +++ b/Week_01/G20200343030449/LeetCode_641_449.cpp @@ -0,0 +1,148 @@ +class DoubleListNode { +public: + DoubleListNode() {val=0,next=nullptr,pre=nullptr;} + DoubleListNode(int _val):val(_val) {next=nullptr,pre=nullptr;} + ~DoubleListNode() {} + int val; + DoubleListNode* next; + DoubleListNode* pre; +}; + +class MyCircularDeque { +public: + /** Initialize your data structure here. Set the size of the deque to be k. */ + MyCircularDeque(int k) { + capacity = k; + size = 0; + head = new DoubleListNode(); + tail = new DoubleListNode(); + } + + /** Adds an item at the front of Deque. Return true if the operation is successful. */ + bool insertFront(int value) { + if (size == capacity) { + return false; + } + + size++; + + DoubleListNode* oldFirst = head->next; + DoubleListNode* newNode = new DoubleListNode(value); + + if (oldFirst==nullptr) { + head->next = newNode; + newNode->pre = head; + newNode->next = tail; + tail->pre = newNode; + } + else { + head->next = newNode; + newNode->pre = head; + newNode->next = oldFirst; + oldFirst->pre = newNode; + } + + return true; + } + + /** Adds an item at the rear of Deque. Return true if the operation is successful. */ + bool insertLast(int value) { + if (size == capacity) { + return false; + } + + size++; + + DoubleListNode* oldLast = tail->pre; + DoubleListNode* newNode = new DoubleListNode(value); + + if (oldLast==nullptr) { + head->next = newNode; + newNode->pre = head; + newNode->next = tail; + tail->pre = newNode; + } + else { + oldLast->next = newNode; + newNode->pre = oldLast; + newNode->next = tail; + tail->pre = newNode; + } + + return true; + } + + /** Deletes an item from the front of Deque. Return true if the operation is successful. */ + bool deleteFront() { + if (size==0) { + return false; + } + + size--; + + DoubleListNode* node = head->next; + + head->next = node->next; + node->next->pre=head; + + delete node; + + return true; + } + + /** Deletes an item from the rear of Deque. Return true if the operation is successful. */ + bool deleteLast() { + if (size==0) { + return false; + } + + size--; + + DoubleListNode* node = tail->pre; + + node->pre->next = tail; + tail->pre = node->pre; + + delete node; + + return true; + } + + /** Get the front item from the deque. */ + int getFront() { + return size==0?-1:head->next->val; + } + + /** Get the last item from the deque. */ + int getRear() { + return size==0?-1:tail->pre->val; + } + + /** Checks whether the circular deque is empty or not. */ + bool isEmpty() { + return size==0?true:false; + } + + /** Checks whether the circular deque is full or not. */ + bool isFull() { + return size==capacity?true:false; + } +private: + unsigned int capacity; + unsigned int size; + DoubleListNode* head; + DoubleListNode* tail; +}; + +/** + * Your MyCircularDeque object will be instantiated and called as such: + * MyCircularDeque* obj = new MyCircularDeque(k); + * bool param_1 = obj->insertFront(value); + * bool param_2 = obj->insertLast(value); + * bool param_3 = obj->deleteFront(); + * bool param_4 = obj->deleteLast(); + * int param_5 = obj->getFront(); + * int param_6 = obj->getRear(); + * bool param_7 = obj->isEmpty(); + * bool param_8 = obj->isFull(); + */ From 190e60a97734c059f208cbaca868b8950eee153c Mon Sep 17 00:00:00 2001 From: fpanda Date: Fri, 14 Feb 2020 12:02:14 +0800 Subject: [PATCH 0091/1268] Update NOTE.md Add some comments for 641. --- Week_01/G20200343030449/NOTE.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Week_01/G20200343030449/NOTE.md b/Week_01/G20200343030449/NOTE.md index 70ea7063..cb003276 100644 --- a/Week_01/G20200343030449/NOTE.md +++ b/Week_01/G20200343030449/NOTE.md @@ -13,3 +13,13 @@ LeetCode的解答是在原数组上进行+1,当发现不需要再进行进位 在原vector基础上操作的问题是最后补1的时候需要移动整个数组,即使这样空间复杂度应该比我的也要更好一些。 我上传了自己的实现方法,在下一次刷题的时候会使用like最多的方法。 + +641 设计循环双端队列: +我用了循环列表的方式实现的双端队列: +优点:插入,删除,查询第一个和最后一个的操作都可以在o(1)时间内完成。 +缺点:链表的代码比较复杂,需要经常申请与回收内存空间。需要额外的变量来存储当前使用的大小与最大容量。没有把最大容量的概念给用上去。 + +力扣推荐方法:动态数组。 +使用固定大小的数组,使用first和rear两个指针来控制元素的插入删除,当first+1=last的时候说明容量已经耗尽。 +优点:代码实现更简单,不需要额外的参数来保存已经使用的大小和容量。 +缺点:需要额外的1个数组元素来判断容量是否满。 From 4edfc63496aef8490c1720213e97c1190ad9b929 Mon Sep 17 00:00:00 2001 From: pangshusong Date: Fri, 14 Feb 2020 12:44:39 +0800 Subject: [PATCH 0092/1268] [dsa] stack - valid parentheses --- .../LeetCode_20_373/LeetCode_20_373_test.go | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 Week_01/G20200343030373/LeetCode_20_373/LeetCode_20_373_test.go diff --git a/Week_01/G20200343030373/LeetCode_20_373/LeetCode_20_373_test.go b/Week_01/G20200343030373/LeetCode_20_373/LeetCode_20_373_test.go new file mode 100644 index 00000000..e6c4e59b --- /dev/null +++ b/Week_01/G20200343030373/LeetCode_20_373/LeetCode_20_373_test.go @@ -0,0 +1,71 @@ +//https://leetcode-cn.com/problems/valid-parentheses/description/ +package valid_parentheses_test + +import ( + _ "fmt" + "github.com/stretchr/testify/assert" + "testing" +) + +func TestValidParentheses(t *testing.T) { + str1 := "()" + str2 := "()[]{}" + str3 := "(]" + str4 := "([)]" + str5 := "{[]}" + + assert.Equal(t, true, isValid(str1)) + assert.Equal(t, true, isValid(str2)) + assert.Equal(t, false, isValid(str3)) + assert.Equal(t, false, isValid(str4)) + assert.Equal(t, true, isValid(str5)) +} + +//Define a Stack: Push, Pop, IsEmpty +type Stack struct { + strSlice []string +} + +func (stack *Stack) Push(str string) { + stack.strSlice = append(stack.strSlice, str) +} + +func (stack *Stack) Pop() string { + lenSlice := len(stack.strSlice) + if lenSlice == 0 { + return "" + } + + str := stack.strSlice[lenSlice-1] + stack.strSlice = stack.strSlice[:lenSlice-1] //截取的边界是[), 左包含右不包含 + + return str +} + +func (stack *Stack) IsEmpty() bool { + return len(stack.strSlice) == 0 +} + +var hash = map[string]string{ + ")": "(", + "]": "[", + "}": "{", +} + +//Judge with a Stack +func isValid(s string) bool { + stack := new(Stack) + + for _, b := range s { //range出的是key,value;如果只有一个值,则是key or index + str := string(b) //range string 出的是rune,int32类型,需要类型转换 + if left, ok := hash[str]; !ok { //map的是value, ok, 即对应key的value + //判断map的key是否存在,如果不存在,即为左字符,则入栈 + stack.Push(str) + } else if stack.IsEmpty() || stack.Pop() != left { //如果存在,则为右字符,先判断是否为空,再出栈判断是否匹配 + return false + } + } + + //如果为空(配对全部出栈、无其他字符),则有效 + return stack.IsEmpty() +} From 8585e314e1721db5f9ee694d3f68a8c8556f3ccf Mon Sep 17 00:00:00 2001 From: huoyitong <349247397@qq.com> Date: Fri, 14 Feb 2020 12:49:22 +0800 Subject: [PATCH 0093/1268] dev: dev --- .../Week 01/LeetCode_189_519.js | 22 +++++++++++++++++++ .../G20200343030519/Week 01/LeetCode_1_519.js | 12 ++++++++++ .../Week 01/LeetCode_21_519.js | 17 ++++++++++++++ .../Week 01/LeetCode_26_519.js | 13 +++++++++++ .../Week 01/LeetCode_283_519.js | 12 ++++++++++ .../Week 01/LeetCode_66_519.js | 12 ++++++++++ .../Week 01/LeetCode_88_519.js | 14 ++++++++++++ 7 files changed, 102 insertions(+) create mode 100644 Week_00/G20200343030519/Week 01/LeetCode_189_519.js create mode 100644 Week_00/G20200343030519/Week 01/LeetCode_1_519.js create mode 100644 Week_00/G20200343030519/Week 01/LeetCode_21_519.js create mode 100644 Week_00/G20200343030519/Week 01/LeetCode_26_519.js create mode 100644 Week_00/G20200343030519/Week 01/LeetCode_283_519.js create mode 100644 Week_00/G20200343030519/Week 01/LeetCode_66_519.js create mode 100644 Week_00/G20200343030519/Week 01/LeetCode_88_519.js diff --git a/Week_00/G20200343030519/Week 01/LeetCode_189_519.js b/Week_00/G20200343030519/Week 01/LeetCode_189_519.js new file mode 100644 index 00000000..92b9b5aa --- /dev/null +++ b/Week_00/G20200343030519/Week 01/LeetCode_189_519.js @@ -0,0 +1,22 @@ +// https://leetcode-cn.com/problems/rotate-array/ + +var rotate = function(nums, k) { + var n = nums.length; + k %= n; + if (n == 1) { + return; + } + var tmp = 0; + myReverse(0, n - 1); + myReverse(0, k - 1); + myReverse(k, n - 1); + function myReverse(start, end) { + while (start < end) { + tmp = nums[start]; + nums[start] = nums[end]; + nums[end] = tmp; + start++; + end--; + } + } +}; \ No newline at end of file diff --git a/Week_00/G20200343030519/Week 01/LeetCode_1_519.js b/Week_00/G20200343030519/Week 01/LeetCode_1_519.js new file mode 100644 index 00000000..84b3022b --- /dev/null +++ b/Week_00/G20200343030519/Week 01/LeetCode_1_519.js @@ -0,0 +1,12 @@ +// https://leetcode-cn.com/problems/two-sum/ + +var twoSum = function(nums, target) { + var temp = []; + for (var i = 0; i < nums.length; i++) { + var dif = target - nums[i]; + if (temp[dif] != undefined) { + return [temp[dif], i]; + } + temp[nums[i]] = i; + } +}; \ No newline at end of file diff --git a/Week_00/G20200343030519/Week 01/LeetCode_21_519.js b/Week_00/G20200343030519/Week 01/LeetCode_21_519.js new file mode 100644 index 00000000..1a952239 --- /dev/null +++ b/Week_00/G20200343030519/Week 01/LeetCode_21_519.js @@ -0,0 +1,17 @@ +// https://leetcode-cn.com/problems/merge-two-sorted-lists/ + +var mergeTwoLists = function(l1, l2) { + if (l1 === null) { + return l2; + } + if (l2 === null) { + return l1; + } + if (l1.val < l2.val) { + l1.next = mergeTwoLists(l1.next, l2); + return l1; + } else { + l2.next = mergeTwoLists(l1, l2.next); + return l2; + } +}; \ No newline at end of file diff --git a/Week_00/G20200343030519/Week 01/LeetCode_26_519.js b/Week_00/G20200343030519/Week 01/LeetCode_26_519.js new file mode 100644 index 00000000..22de3c58 --- /dev/null +++ b/Week_00/G20200343030519/Week 01/LeetCode_26_519.js @@ -0,0 +1,13 @@ +// https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/ + +var removeDuplicates = function(nums) { + var j = 0; + var n = nums.length; + for (let i = 1; i < n; i++) { + if (nums[i] != nums[i-1]) { + j++; + nums[j] = nums[i]; + } + } + return j + 1; +}; \ No newline at end of file diff --git a/Week_00/G20200343030519/Week 01/LeetCode_283_519.js b/Week_00/G20200343030519/Week 01/LeetCode_283_519.js new file mode 100644 index 00000000..bf580d90 --- /dev/null +++ b/Week_00/G20200343030519/Week 01/LeetCode_283_519.js @@ -0,0 +1,12 @@ +// https://leetcode-cn.com/problems/move-zeroes/ + +var moveZeroes = function(nums) { + var idx = 0; + for (var j = 0; i < nums.length; i++) { + if (nums[i] !== 0) { + nums[idx] = nums[i]; + nums[i] = idx === i ? nums[i] : 0; + idx++; + } + } +}; \ No newline at end of file diff --git a/Week_00/G20200343030519/Week 01/LeetCode_66_519.js b/Week_00/G20200343030519/Week 01/LeetCode_66_519.js new file mode 100644 index 00000000..3916d173 --- /dev/null +++ b/Week_00/G20200343030519/Week 01/LeetCode_66_519.js @@ -0,0 +1,12 @@ +// https://leetcode-cn.com/problems/plus-one/ + +var plusOne = function(digits) { + for (let i = digits.length - 1; i >= 0; i--) { + digits[i]++; + digits[i] = digits[i] % 10; + if (digits[i] !== 0) return digits; + } + digits = new Array(digits.length + 1).fill(0); + digits[0] = 1; + return digits; +}; \ No newline at end of file diff --git a/Week_00/G20200343030519/Week 01/LeetCode_88_519.js b/Week_00/G20200343030519/Week 01/LeetCode_88_519.js new file mode 100644 index 00000000..70ace586 --- /dev/null +++ b/Week_00/G20200343030519/Week 01/LeetCode_88_519.js @@ -0,0 +1,14 @@ +// https://leetcode-cn.com/problems/merge-sorted-array/ + +var merge = function(nums1, m, nums2, n) { + let len1 = m - 1; + let len2 = n - 1; + let len = m + n - 1; + while (len1 >= 0 && len2 >= 0) { + nums1[len--] = nums1[len1] > nums2[len2] ? nums1[len1--] : nums2[len2--]; + } + function arrayCopy(src, srcIndex, dest, destIndex, length) { + dest.splice(destIndex, length, ...src.slice(srcIndex, srcIndex + length)); + } + arrayCopy(nums2, 0, nums1, 0, len2 + 1); +}; \ No newline at end of file From d62cb7ae8e25e4a3e37a88015f25f37208b66ceb Mon Sep 17 00:00:00 2001 From: pangshusong Date: Fri, 14 Feb 2020 13:06:50 +0800 Subject: [PATCH 0094/1268] [dsa] stack - mini stack --- .../LeetCode_155_373/LeetCode_155_373_test.go | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 Week_01/G20200343030373/LeetCode_155_373/LeetCode_155_373_test.go diff --git a/Week_01/G20200343030373/LeetCode_155_373/LeetCode_155_373_test.go b/Week_01/G20200343030373/LeetCode_155_373/LeetCode_155_373_test.go new file mode 100644 index 00000000..50b74e22 --- /dev/null +++ b/Week_01/G20200343030373/LeetCode_155_373/LeetCode_155_373_test.go @@ -0,0 +1,61 @@ +package mini_stack_test + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestMiniStack(t *testing.T) { + t.Log("Mini Stack") + obj := Constructor() + obj.Push(-2) + obj.Push(0) + obj.Push(-3) + assert.Equal(t, -3, obj.GetMin()) + obj.Pop() + assert.Equal(t, 0, obj.Top()) + assert.Equal(t, -2, obj.GetMin()) +} + +//当辅助栈为空的时候直接放入新数据 +//push的时候如果该元素小于等于辅助栈顶元素,则将其推入辅助栈 +//出栈的时候如果出栈元素等于辅助栈栈顶元素辅助栈也跟着出栈 +type MinStack struct { + data []int + help []int +} + +/** initialize your data structure here. */ +func Constructor() MinStack { + return MinStack{ + data: []int{}, + help: []int{}, + } +} + +//辅助栈的栈顶元素永远是最小值 +func (this *MinStack) GetMin() int { + return this.help[len(this.help)-1] +} + +func (this *MinStack) Push(x int) { + //如果辅助栈之前为空,则直接放入 + //如果新值小于等于最小值,则将新值加入辅助栈,作为辅助栈栈顶 + if len(this.help) == 0 || x <= this.GetMin() { + this.help = append(this.help, x) + } + this.data = append(this.data, x) +} + +func (this *MinStack) Pop() { + x := this.data[len(this.data)-1] + this.data = this.data[:len(this.data)-1] + //出栈时,如果值刚好等于最小值,辅助栈也跟随出栈 + if x == this.GetMin() { + this.help = this.help[:len(this.help)-1] + } +} + +func (this *MinStack) Top() int { + return this.data[len(this.data)-1] +} From 339858b4bc0ee076f1b26fe94ac99b5ed1c6cea7 Mon Sep 17 00:00:00 2001 From: pangshusong Date: Fri, 14 Feb 2020 13:17:14 +0800 Subject: [PATCH 0095/1268] [dsa] deque - sliding window maximum --- .../LeetCode_239_373/LeetCode_239_373_test.go | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 Week_01/G20200343030373/LeetCode_239_373/LeetCode_239_373_test.go diff --git a/Week_01/G20200343030373/LeetCode_239_373/LeetCode_239_373_test.go b/Week_01/G20200343030373/LeetCode_239_373/LeetCode_239_373_test.go new file mode 100644 index 00000000..58175fd6 --- /dev/null +++ b/Week_01/G20200343030373/LeetCode_239_373/LeetCode_239_373_test.go @@ -0,0 +1,57 @@ +//https://leetcode-cn.com/problems/sliding-window-maximum/ +package sliding_window_maximum_test + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestDeque(t *testing.T) { + t.Log("Sliding Window Maximum - Deque") + + nums := []int{1, 3, -1, -3, 5, 3, 6, 7} + k := 3 + expect := []int{3, 3, 5, 5, 6, 7} + assert.Equal(t, expect, maxSlidingWindow(nums, k)) +} + +func maxSlidingWindow(nums []int, k int) []int { + //追求严谨 + if len(nums) == 0 || len(nums) < k { + return nums + } + + //既然k固定,就定义好slice的最大容量 + window := make([]int, 0, k) + result := make([]int, 0, len(nums)-k+1) + + for index, value := range nums { + //3.1.处理:维护其最大长度为k + //index>=k,遍历k次后,如果再append,窗口长度就会超过k + //window中存储的是索引,如果满了(第一个索引window[0]比当前索引index之间小了k), 则将最左侧元素切去 + //举例:{5,4,3}, 下一个value是2,需要将5从左侧移除,以保持长度 + if index >= k && window[0] <= index-k { + window = window[1:] + } + + //3.2.处理:保证每遍历一次后第一个元素值最大,循环处理 + //len(window)>0, 仅第一次index=0时不处理,之后保证window中肯定有至少一个最大值 + //从window切片的最后一个元素对应的数值开始比较,如果比当前遍历的数值小,则切去,之后会append当前遍历的数值 + //如果仅剩一个,也可切去,然后再append + //举例:{1,2,3}, 下一个value是4,需要将1,2,3都移除,在下一步将4append上 + for len(window) > 0 && nums[window[len(window)-1]] < value { + window = window[:len(window)-1] + } + + //1.遍历并将下标注入双端队列 + //之前要有条件处理:维护其长度最大为k;保证每遍历一次后第一个元素值最大 + //之后当足够k个时没遍历一次保存一次结果,存储的是下标,因此能快速定位到元素 + window = append(window, index) + + //2. 当index等于k-1开始,产生结果,双端队列新的头总是当前窗口中最大的那个数 + if index >= k-1 { + result = append(result, nums[window[0]]) + } + } + return result +} From 33b3ea0c61eb70ae4d42205b08be808c1717e968 Mon Sep 17 00:00:00 2001 From: pangshusong Date: Fri, 14 Feb 2020 13:26:25 +0800 Subject: [PATCH 0096/1268] [dsa] deque - design circular deque --- .../LeetCode_155_373/LeetCode_155_373_test.go | 2 + .../LeetCode_641_373/LeetCode_641_373_test.go | 126 ++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 Week_01/G20200343030373/LeetCode_641_373/LeetCode_641_373_test.go diff --git a/Week_01/G20200343030373/LeetCode_155_373/LeetCode_155_373_test.go b/Week_01/G20200343030373/LeetCode_155_373/LeetCode_155_373_test.go index 50b74e22..ead90c0d 100644 --- a/Week_01/G20200343030373/LeetCode_155_373/LeetCode_155_373_test.go +++ b/Week_01/G20200343030373/LeetCode_155_373/LeetCode_155_373_test.go @@ -1,3 +1,4 @@ +//https://leetcode-cn.com/problems/min-stack/ package mini_stack_test import ( @@ -20,6 +21,7 @@ func TestMiniStack(t *testing.T) { //当辅助栈为空的时候直接放入新数据 //push的时候如果该元素小于等于辅助栈顶元素,则将其推入辅助栈 //出栈的时候如果出栈元素等于辅助栈栈顶元素辅助栈也跟着出栈 +//O(1), O(n) type MinStack struct { data []int help []int diff --git a/Week_01/G20200343030373/LeetCode_641_373/LeetCode_641_373_test.go b/Week_01/G20200343030373/LeetCode_641_373/LeetCode_641_373_test.go new file mode 100644 index 00000000..6c54feb1 --- /dev/null +++ b/Week_01/G20200343030373/LeetCode_641_373/LeetCode_641_373_test.go @@ -0,0 +1,126 @@ +//https://leetcode-cn.com/problems/design-circular-deque/ +package circular_deque_test + +//ToDo +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestDeque(t *testing.T) { + t.Log("Design Circular Deque") + circularDeque := Constructor(3) //设置容量大小为3 + assert.Equal(t, true, circularDeque.InsertLast(1)) + assert.Equal(t, true, circularDeque.InsertLast(2)) + assert.Equal(t, true, circularDeque.InsertFront(3)) + assert.Equal(t, false, circularDeque.InsertFront(4)) + assert.Equal(t, 2, circularDeque.GetRear()) + assert.Equal(t, true, circularDeque.IsFull()) + assert.Equal(t, true, circularDeque.DeleteLast()) + assert.Equal(t, true, circularDeque.InsertFront(4)) + assert.Equal(t, 4, circularDeque.GetFront()) +} + +type MyCircularDeque struct { + data []int //数组(切片)存储数据 + front int //“头指针”数组下标 + last int //“尾指针”数组下标 +} + +//MyCircularDeque(k):构造函数,双端队列的大小为k。 +func Constructor(k int) MyCircularDeque { + return MyCircularDeque{ + //构造长度容量都为k+1的切片;当然也可以初始化为长度为0,容量为k+1; + data: make([]int, k+1, k+1), //初始值全0 + front: 0, + last: 0, + } +} + +//insertFront():将一个元素添加到双端队列头部。 如果操作成功返回 true。 +func (this *MyCircularDeque) InsertFront(value int) bool { + //检查队列是否已满 + if this.IsFull() { + return false + } + + //插入元素。 + this.front = (len(this.data) + this.front - 1) % len(this.data) //先循环左移一位 + this.data[this.front] = value //填入数据 + + return true +} + +//insertLast():将一个元素添加到双端队列尾部。如果操作成功返回 true。 +func (this *MyCircularDeque) InsertLast(value int) bool { + //检查队列是否已满 + if this.IsFull() { + return false + } + + //插入元素 + this.data[this.last] = value //填入数据 + this.last = (this.last + 1) % len(this.data) //循环右移一位 + + return true +} + +//deleteFront():从双端队列头部删除一个元素。 如果操作成功返回 true。 +func (this *MyCircularDeque) DeleteFront() bool { + //检查队列是否为空 + if this.IsEmpty() { + return false + } + + //删除头部元素 + //this.data[this.front] = 0 //置0,这一部完全不是必须,只是为了方便输出调试。可以将这句直接注释 + this.front = (this.front + 1) % len(this.data) //循环右移一位 + + return true +} + +//deleteLast():从双端队列尾部删除一个元素。如果操作成功返回 true。 +func (this *MyCircularDeque) DeleteLast() bool { + //检查队列是否为空 + if this.IsEmpty() { + return false + } + + //删除头部元素 + this.last = (len(this.data) + this.last - 1) % len(this.data) //循环左移一位 + //this.data[this.last] = 0 //置0,这一部完全不是必须,只是为了方便输出调试。可以将这句直接注释 + + return true +} + +//getFront():从双端队列头部获得一个元素。如果双端队列为空,返回 -1。 +func (this *MyCircularDeque) GetFront() int { + //检查队列是否为空 + if this.IsEmpty() { + return -1 + } + + //获取头部元素 + return this.data[this.front] +} + +//getRear():获得双端队列的最后一个元素。 如果双端队列为空,返回 -1。 +func (this *MyCircularDeque) GetRear() int { + //检查队列是否为空 + if this.IsEmpty() { + return -1 + } + + //获取尾部元素。这里要注意下,last应该循环左移一位得到数据下标 + return this.data[(len(this.data)+this.last-1)%len(this.data)] +} + +//isEmpty():检查双端队列是否为空。 +func (this *MyCircularDeque) IsEmpty() bool { + return this.last == this.front +} + +//isFull():检查双端队列是否满了。 +func (this *MyCircularDeque) IsFull() bool { + return (this.last+1)%len(this.data) == this.front +} From de2088b2c42bc5e3bb671f981c7b8d96d5d80d09 Mon Sep 17 00:00:00 2001 From: fpanda Date: Fri, 14 Feb 2020 15:44:06 +0800 Subject: [PATCH 0097/1268] Add LeetCode 42 Trapping Water --- Week_01/G20200343030449/LeetCode_42_449.cpp | 28 +++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Week_01/G20200343030449/LeetCode_42_449.cpp diff --git a/Week_01/G20200343030449/LeetCode_42_449.cpp b/Week_01/G20200343030449/LeetCode_42_449.cpp new file mode 100644 index 00000000..4e8cec76 --- /dev/null +++ b/Week_01/G20200343030449/LeetCode_42_449.cpp @@ -0,0 +1,28 @@ +class Solution { +public: + int trap(vector& height) { + if (height.size()==0) { + return 0; + } + + auto maxWater = 0; + + auto maxLeft = height[0]; + int* maxRight = new int[height.size()+1](); + + // Init right highest. + for (int i=height.size()-1; i>=0; i--) { + maxRight[i] = max(maxRight[i+1],height[i]); + } + + for (int i=1; i < height.size()-1;i++) { + auto maxHeight = maxLeftheight[i]?(maxHeight-height[i]):(0); + + maxLeft = max(maxLeft, height[i]); + } + + return maxWater; + } +}; From 2676d79007f0d39ce706e251ece38cbaff11b5d1 Mon Sep 17 00:00:00 2001 From: fpanda Date: Fri, 14 Feb 2020 15:52:10 +0800 Subject: [PATCH 0098/1268] Add LeetCode 42 comments --- Week_01/G20200343030449/NOTE.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Week_01/G20200343030449/NOTE.md b/Week_01/G20200343030449/NOTE.md index cb003276..c3d7d35e 100644 --- a/Week_01/G20200343030449/NOTE.md +++ b/Week_01/G20200343030449/NOTE.md @@ -23,3 +23,8 @@ LeetCode的解答是在原数组上进行+1,当发现不需要再进行进位 使用固定大小的数组,使用first和rear两个指针来控制元素的插入删除,当first+1=last的时候说明容量已经耗尽。 优点:代码实现更简单,不需要额外的参数来保存已经使用的大小和容量。 缺点:需要额外的1个数组元素来判断容量是否满。 + + +42 接雨水: +接雨水能想到的最简单的方法就是按列来处理,每次都找左边和右边最小的列,比较容易想到的方法就是用一个数组来保存最小高度的状态,比较容易理解的是当我们从左向右遍历的时候,我们可以在这个基础上更新左边的最小高度,而右边的最小高度依然需要一个数组来保存,虽然后续有将右边的最小高度以一个变量取代已经用栈的方式来实现,这两种方式还没有完全理解的情况下,第三种解法是目前自己掌握的最熟练的。 +后续五毒再刷这道题目的时候,会深入理解第四种解法和栈的方式实现的解法。 From c40e0cab41bc0e19c3c0cb4b7aefb549b0b4161c Mon Sep 17 00:00:00 2001 From: pangshusong Date: Fri, 14 Feb 2020 19:12:53 +0800 Subject: [PATCH 0099/1268] [dsa] array - trapping rain water --- .../LeetCode_42_373/LeetCode_42_373_test.go | 202 ++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 Week_01/G20200343030373/LeetCode_42_373/LeetCode_42_373_test.go diff --git a/Week_01/G20200343030373/LeetCode_42_373/LeetCode_42_373_test.go b/Week_01/G20200343030373/LeetCode_42_373/LeetCode_42_373_test.go new file mode 100644 index 00000000..a98c30d1 --- /dev/null +++ b/Week_01/G20200343030373/LeetCode_42_373/LeetCode_42_373_test.go @@ -0,0 +1,202 @@ +//https://leetcode-cn.com/problems/trapping-rain-water/ +package trapping_rain_water_test + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestTrap(t *testing.T) { + height1 := []int{0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1} + assert.Equal(t, 6, trap(height1)) + assert.Equal(t, 6, rowTrap(height1)) + assert.Equal(t, 6, colTrap(height1)) + assert.Equal(t, 6, dpTrap(height1)) + assert.Equal(t, 6, dualPointerTrap(height1)) + assert.Equal(t, 6, stackTrap(height1)) + + height2 := []int{2, 0, 2} + assert.Equal(t, 2, trap(height2)) + assert.Equal(t, 2, rowTrap(height2)) + assert.Equal(t, 2, colTrap(height2)) + assert.Equal(t, 2, dpTrap(height2)) + assert.Equal(t, 2, dualPointerTrap(height2)) + assert.Equal(t, 2, stackTrap(height2)) +} + +//参考:https://leetcode-cn.com/problems/trapping-rain-water/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by-w-8/ + +func trap(height []int) int { + //Most Understandable + return dpTrap(height) +} + +//common +func min(a, b int) int { + if a < b { + return a + } + return b +} + +func max(a, b int) int { + if a > b { + return a + } + return b +} + +//method1: 按行求 +//原则:高度i, 遇到高度小于i的先存起来temp++; 遇到大于等于i的就把存起来的水放到答案sum+=temp中并temp=0置零 +//TC: O(mn), SC: O(1) +//AC, 1160ms, too long +func rowTrap(height []int) int { + sum := 0 + max := maxHeight(height) //最大高度,遍历 + for i := 1; i <= max; i++ { //第一行,i从1开始 + isStart := false //标记是否开始更新temp,因为需要找到第一个h>=i的才能开始蓄水 + temp := 0 //暂存的水 + //原则:h=i, sum += temp, temp=0 + for _, h := range height { + if isStart && h < i { + temp++ + } + if h >= i { + sum += temp + temp = 0 + isStart = true + } + } + } + return sum +} + +func maxHeight(height []int) int { + max := 0 + for _, h := range height { + if h > max { + max = h + } + } + return max +} + +//method2: 按列求 +//原则:当前列,蓄水量:min(左边最高、右边最高)-h;如果较小值比当前列 小或相等,当前列不会蓄水 +//TC: O(n^2), SC: O(1) +//AC, 88ms, Good +func colTrap(height []int) int { + sum := 0 + length := len(height) + //两端的列无需考虑 + for i := 1; i <= length-2; i++ { + maxLeft, maxRight := 0, 0 + for j := i - 1; j >= 0; j-- { + if height[j] > maxLeft { + maxLeft = height[j] + } + } + for j := i + 1; j <= length-1; j++ { + if height[j] > maxRight { + maxRight = height[j] + } + } + + min := min(maxLeft, maxRight) + + if min > height[i] { + sum += min - height[i] + } + } + return sum +} + +//method3: 动态规划 +//原则:对于当前列找左右的最大值,可以记忆 +//状态定义:dpMaxLeft[i],i左边的最高值;dpMaxRight[i],i右边的最高值,不包括当前列i +//状态方程:dpMaxLeft[i] = max(dpMaxLeft[i-1], height[i-1]); dpMaxRight[i]同理 +//TC: O(n), SC: O(n) - 加速:空间换时间 +//AC, 4ms, Better +func dpTrap(height []int) int { + sum := 0 + length := len(height) + + dpMaxLeft, dpMaxRight := make([]int, length), make([]int, length) + for i := 1; i <= length-2; i++ { + dpMaxLeft[i] = max(dpMaxLeft[i-1], height[i-1]) + } + for i := length - 2; i >= 1; i-- { + dpMaxRight[i] = max(dpMaxRight[i+1], height[i+1]) + } + + for i := 1; i <= length-2; i++ { + min := min(dpMaxLeft[i], dpMaxRight[i]) + if min > height[i] { + sum += min - height[i] + } + } + return sum +} + +//method4: 双指针法 +//动态规划中,常常可以对最大值、最小值的状态方程过程,进行空间复杂度的优化 +//dpMaxLeft[i],dpMaxRight[i]在整个遍历过程中仅使用1次,可以不用数组挨个记录,用一个元素重复刷新 +//状态定义:dpMaxLeft: i左边的最高值 +//状态方程:dpMaxLeft = math(dpMapLeft, height[i-1]) +//问题:数组dpMaxRight不能降维到一个元素,因为最终的遍历是从左到右 -> 因此使用双指针left、right, 从两个方向遍历 +//如果一端有更高的条形块(例如右端),积水的高度依赖于当前方向的高度(从左到右)。当发现另一侧(右侧)的条形块高度不是最高的,则开始从相反的方向遍历(从右到左) +//TC: O(n), SC: O(1) +func dualPointerTrap(height []int) int { + sum := 0 + length := len(height) + dpMaxLeft, dpMaxRight := 0, 0 + pLeft, pRight := 1, length-2 + for i := 1; i <= length-2; i++ { + if height[pLeft-1] < height[pRight+1] { + //从左到右遍历,则dpMaxLeft也小于dpMaxRight + dpMaxLeft = max(dpMaxLeft, height[pLeft-1]) + min := dpMaxLeft + if min > height[pLeft] { + sum += min - height[pLeft] + } + pLeft++ + } else { + dpMaxRight = max(dpMaxRight, height[pRight+1]) + min := dpMaxRight + if min > height[pRight] { + sum += min - height[pRight] + } + pRight-- + } + } + return sum +} + +//method5: 栈 +//用栈保存每堵墙 +//1. 当前高度小于等于栈顶高度,入栈,指针后移 +//2. 当前高度大于栈顶高度,出栈,计算当前墙与栈顶墙之间的水,继续判断当前墙与新的栈顶的关系 +//O(n), O(n) +func stackTrap(height []int) int { + length := len(height) + if length <= 2 { + return 0 + } + + sum := 0 + var stack []int + for i := 0; i < length; i++ { + for len(stack) > 0 && height[i] > height[stack[len(stack)-1]] { + cur := stack[len(stack)-1] + stack = stack[:len(stack)-1] + if len(stack) <= 0 { + break + } + dis := i - stack[len(stack)-1] - 1 + h := min(height[stack[len(stack)-1]], height[i]) - height[cur] + sum += h * dis + } + stack = append(stack, i) + } + return sum +} From 92bd5e874cdff0516a21bde5ba7f40b7ae8325c9 Mon Sep 17 00:00:00 2001 From: yukixLLL Date: Fri, 14 Feb 2020 12:50:06 +0100 Subject: [PATCH 0100/1268] week01 --- Week_01/G20200343030583/LeetCode_189_583.py | 73 +++++++++++ Week_01/G20200343030583/LeetCode_1_583.py | 48 ++++++++ Week_01/G20200343030583/LeetCode_21_583.py | 66 ++++++++++ Week_01/G20200343030583/LeetCode_26_583.py | 20 +++ Week_01/G20200343030583/LeetCode_283_583.py | 45 +++++++ Week_01/G20200343030583/LeetCode_42_583.py | 83 +++++++++++++ Week_01/G20200343030583/LeetCode_641_583.py | 127 ++++++++++++++++++++ Week_01/G20200343030583/LeetCode_66_583.py | 62 ++++++++++ Week_01/G20200343030583/LeetCode_88_583.py | 76 ++++++++++++ Week_01/G20200343030583/NOTE.md | 53 +++++++- 10 files changed, 652 insertions(+), 1 deletion(-) create mode 100644 Week_01/G20200343030583/LeetCode_189_583.py create mode 100644 Week_01/G20200343030583/LeetCode_1_583.py create mode 100644 Week_01/G20200343030583/LeetCode_21_583.py create mode 100644 Week_01/G20200343030583/LeetCode_26_583.py create mode 100644 Week_01/G20200343030583/LeetCode_283_583.py create mode 100644 Week_01/G20200343030583/LeetCode_42_583.py create mode 100644 Week_01/G20200343030583/LeetCode_641_583.py create mode 100644 Week_01/G20200343030583/LeetCode_66_583.py create mode 100644 Week_01/G20200343030583/LeetCode_88_583.py diff --git a/Week_01/G20200343030583/LeetCode_189_583.py b/Week_01/G20200343030583/LeetCode_189_583.py new file mode 100644 index 00000000..04f520b4 --- /dev/null +++ b/Week_01/G20200343030583/LeetCode_189_583.py @@ -0,0 +1,73 @@ +# +# @lc app=leetcode id=189 lang=python3 +# +# [189] Rotate Array +# 1. pop the last one, insert into first position which is very slow with O(k*n) +# 2. cyclic replacement in the list (https://leetcode.com/problems/rotate-array/discuss/269948/4-solutions-in-python-(From-easy-to-hard)) +# 3. use reverse (call 3 times): reverse the whole list, reverse first k elements, reverse the rest elements. (same url) +# 4. use deque (collection.deque(nums)), but O(n) extra memory (https://leetcode.com/problems/rotate-array/discuss/54564/Python-easy-to-understand-solutions.) +# The last solution is not provided in this code file. +# @lc code=start + +# first +# class Solution: +# def rotate(self, nums: List[int], k: int) -> None: +# """ +# Do not return anything, modify nums in-place instead. +# """ +# for i in range(k): +# e = nums.pop() +# nums.insert(0,e) + +# second +# class Solution: +# def rotate(self, nums: List[int], k: int) -> None: +# """ +# Do not return anything, modify nums in-place instead. +# """ +### Note that there would be case that the list just contain one elements but k > 1, +### i.e. reverse itself twice +# k = k % len(nums) +# start = 0 +# count = 0 +# while count < len(nums) +# current = start +# prev = nums[current] + +# while True: +# next = (current + k) % len(nums) +# temp = nums[next] +# nums[next] = prev +# prev = temp +# current = next +# count += 1 + +# if start == current: +# break + +# start += 1 + +# third +class Solution: + def rotate(self, nums: List[int], k: int) -> None: + """ + Do not return anything, modify nums in-place instead. + """ +### Note that there would be case that the list just contain one elements but k > 1, +### i.e. reverse itself twice + k = k % len(nums) + # Note that you need to use self._function + self.reverse(0, len(nums) - 1, nums) + self.reverse(0, k - 1, nums) + self.reverse(k, len(nums) - 1, nums) + + # Note that you need to add self as a param in a class + def reverse(self, start, end, nums) -> None: + while start < end: + nums[start],nums[end] = nums[end], nums[start] + start += 1 + end -= 1 + + +# @lc code=end + diff --git a/Week_01/G20200343030583/LeetCode_1_583.py b/Week_01/G20200343030583/LeetCode_1_583.py new file mode 100644 index 00000000..dfa58943 --- /dev/null +++ b/Week_01/G20200343030583/LeetCode_1_583.py @@ -0,0 +1,48 @@ +# +# @lc app=leetcode id=1 lang=python +# +# [1] Two Sum +# 1. brute force, O(n*n) +# 2. hash table mapping, O(n) +# 3. two pointer, O(n) + +# @lc code=start +# Second +# class Solution(object): +# def twoSum(self, nums, target): +# """ +# :type nums: List[int] +# :type target: int +# :rtype: List[int] +# """ +# map = dict() +# for i in range(len(nums)): +# if nums[i] not in map: +# # because there is exactly one solution +# map[target - nums[i]] = i +# else: +# return map[nums[i]],i +# return -1, -1 + +# Third +class Solution(object): + def twoSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + nums = enumerate(nums) + nums = sorted(nums, key = lambda x:x[1]) + i,j = 0, len(nums) - 1 + while i < j: + if nums[i][1] + nums[j][1] < target: + i += 1 + elif nums[i][1] + nums[j][1] > target: + j -= 1 + else: + return sorted([nums[i][0],nums[j][0]]) + + return -1, -1 +# @lc code=end + diff --git a/Week_01/G20200343030583/LeetCode_21_583.py b/Week_01/G20200343030583/LeetCode_21_583.py new file mode 100644 index 00000000..02fe8d36 --- /dev/null +++ b/Week_01/G20200343030583/LeetCode_21_583.py @@ -0,0 +1,66 @@ +# +# @lc app=leetcode id=21 lang=python +# +# [21] Merge Two Sorted Lists +# 1. iteratively +# 2. recursively + +# @lc code=start +# Definition for singly-linked list. +# class ListNode(object): +# def __init__(self, x): +# self.val = x +# self.next = None + +# First +# class Solution(object): +# def mergeTwoLists(self, l1, l2): +# """ +# :type l1: ListNode +# :type l2: ListNode +# :rtype: ListNode +# """ +# # No head point +# # because it may not go into the first loop +# current = l = ListNode(0) +# p = l1 +# q = l2 + +# while p and q: +# if p.val < q.val: +# current.next = p +# p = p.next +# else: +# current.next = q +# q = q.next +# current = current.next +# if q: +# current.next = q +# if p: +# current.next = p +# return l.next + +# Second +def mergeTwoLists(self, l1, l2): + """ + :type l1: ListNode + :type l2: ListNode + :rtype: ListNode + """ + if not l1: + return l2 + if not l2: + return l1 + + start = None + if l1.val < l2.val: + start = l1 + start.next = self.mergeTwoLists(l1.next,l2) + else: + start = l2 + start.next = self.mergeTwoLists(l1, l2.next) + + return start + +# @lc code=end + diff --git a/Week_01/G20200343030583/LeetCode_26_583.py b/Week_01/G20200343030583/LeetCode_26_583.py new file mode 100644 index 00000000..9a69980f --- /dev/null +++ b/Week_01/G20200343030583/LeetCode_26_583.py @@ -0,0 +1,20 @@ +# +# @lc app=leetcode id=26 lang=python3 +# +# [26] Remove Duplicates from Sorted Array +# 1. brute force, count distinct elements, O(n) +# 2. directly s = set(nums), return len(s), list(s), but not satisfy the needs for this case + +# @lc code=start +class Solution: + def removeDuplicates(self, nums: List[int]) -> int: + x = 1 + for i in range(len(nums) - 1): + if nums[i] != nums[i+1]: + nums[x] = nums[i+1] + x += 1 + return x + + +# @lc code=end + diff --git a/Week_01/G20200343030583/LeetCode_283_583.py b/Week_01/G20200343030583/LeetCode_283_583.py new file mode 100644 index 00000000..f29bffc6 --- /dev/null +++ b/Week_01/G20200343030583/LeetCode_283_583.py @@ -0,0 +1,45 @@ +# +# @lc app=leetcode id=283 lang=python +# +# [283] Move Zeroes +# + +# @lc code=start +# class Solution(object): +# def moveZeroes(self, nums): +# """ +# :type nums: List[int] +# :rtype: None Do not return anything, modify nums in-place instead. +# """ +# zero_pointer = self.find_first_zero(nums) +# for i in range(len(nums)): +# if nums[i] != 0 and i > zero_pointer: +# nums[zero_pointer],nums[i] = nums[i],0 +# zero_pointer = self.find_first_zero(nums[zero_pointer + 1:]) + +# def find_first_zero(self, nums): +# i = 0 +# while nums[i] != 0: +# i += 1 +# return i + +class Solution(object): + def moveZeroes(self, nums): + """ + :type nums: List[int] + :rtype: None Do not return anything, modify nums in-place instead. + """ + count = 0 + for i in range (len(nums)): + if nums[i] != 0: + nums[count] = nums[i] + count += 1 + while count < len(nums): + nums[count] = 0 + count += 1 + + + + +# @lc code=end + diff --git a/Week_01/G20200343030583/LeetCode_42_583.py b/Week_01/G20200343030583/LeetCode_42_583.py new file mode 100644 index 00000000..1ac999e5 --- /dev/null +++ b/Week_01/G20200343030583/LeetCode_42_583.py @@ -0,0 +1,83 @@ +# +# @lc app=leetcode id=42 lang=python +# +# [42] Trapping Rain Water +# 1. brute force O(n^2), for each bar, find left max and right max height +# 2. dynamic programming to store left max height and right max height O(n) +# 3. stack O(n) +# 4. two pointer O(n) https://leetcode.com/problems/trapping-rain-water/discuss/17554/Share-my-one-pass-Python-solution-with-explaination + +# @lc code=start +# second +# class Solution(object): +# def trap(self, height): +# """ +# :type height: List[int] +# :rtype: int +# """ +# if len(height) <= 1: +# return 0 +# left_max = [0 for i in range(len(height))] +# right_max = [0 for j in range(len(height))] +# left_max[0], right_max[-1] = height[0], height[len(height) - 1] +# for i in range(1,len(height)): +# left_max[i] = max(left_max[i - 1], height[i]) +# for j in range(len(height) - 2, -1, -1): +# right_max[j] = max(right_max[j+1], height[j]) +# ans = 0 +# for i in range(len(height)): +# ans += min(left_max[i],right_max[i]) - height[i] +# return ans + +# Third +# class Solution(object): +# def trap(self, height): +# """ +# :type height: List[int] +# :rtype: int +# """ +# if len(height) <= 1: +# return 0 +# stack = [] +# ans = 0 +# for current in range(len(height)): +# while(len(stack) != 0 and height[current] > height[stack[-1]]): +# h = height[stack[-1]] +# stack.pop() +# if len(stack) == 0: +# break +# stack_top = stack[-1] +# distance = current - stack_top - 1 +# boundary_height = min(height[stack_top],height[current]) - h +# ans += distance * boundary_height + +# stack.append(current) + +# return ans + +# Fourth +class Solution(object): + def trap(self, height): + """ + :type height: List[int] + :rtype: int + """ + if len(height) <= 1: + return 0 + ans = 0 + left = 0 + right = len(height) - 1 + left_max = height[left] + right_max = height[right] + while left < right: + left_max, right_max = max(left_max,height[left]),max(right_max,height[right]) + if left_max <= right_max: + ans += left_max - height[left] + left += 1 + else: + ans += right_max - height[right] + right -= 1 + + return ans +# @lc code=end + diff --git a/Week_01/G20200343030583/LeetCode_641_583.py b/Week_01/G20200343030583/LeetCode_641_583.py new file mode 100644 index 00000000..fce0b81a --- /dev/null +++ b/Week_01/G20200343030583/LeetCode_641_583.py @@ -0,0 +1,127 @@ +# +# @lc app=leetcode id=641 lang=python +# +# [641] Design Circular Deque +# 1. use list +# 2. use collection.deque,use appendleft() for insertFront() and popleft() for deleteFront() + +# @lc code=start +class MyCircularDeque(object): + + def __init__(self, k): + """ + Initialize your data structure here. Set the size of the deque to be k. + :type k: int + """ + self.size = k + self.Deque = [] + # self.Deque = collection.deque([]) + + def insertFront(self, value): + """ + Adds an item at the front of Deque. Return true if the operation is successful. + :type value: int + :rtype: bool + """ + if len(self.Deque) < self.size: + self.Deque = [value] + self.Deque + # self.Deque.appendleft(value) + return True + else: + return False + + + + def insertLast(self, value): + """ + Adds an item at the rear of Deque. Return true if the operation is successful. + :type value: int + :rtype: bool + """ + if len(self.Deque) < self.size: + self.Deque.append(value) + return True + else: + return False + + + def deleteFront(self): + """ + Deletes an item from the front of Deque. Return true if the operation is successful. + :rtype: bool + """ + if len(self.Deque) == 0: + return False + else: + self.Deque = self.Deque[1:] + # self.Deque.popleft() + return True + + def deleteLast(self): + """ + Deletes an item from the rear of Deque. Return true if the operation is successful. + :rtype: bool + """ + if len(self.Deque) == 0: + return False + else: + self.Deque.pop() + return True + + + + def getFront(self): + """ + Get the front item from the deque. + :rtype: int + """ + if len(self.Deque) == 0: + return -1 + else: + return self.Deque[0] + + + def getRear(self): + """ + Get the last item from the deque. + :rtype: int + """ + if len(self.Deque) == 0: + return -1 + else: + return self.Deque[-1] + + + def isEmpty(self): + """ + Checks whether the circular deque is empty or not. + :rtype: bool + """ + if len(self.Deque) == 0: + return True + else: + return False + + def isFull(self): + """ + Checks whether the circular deque is full or not. + :rtype: bool + """ + if len(self.Deque) < self.size: + return False + else: + return True + + +# Your MyCircularDeque object will be instantiated and called as such: +# obj = MyCircularDeque(k) +# param_1 = obj.insertFront(value) +# param_2 = obj.insertLast(value) +# param_3 = obj.deleteFront() +# param_4 = obj.deleteLast() +# param_5 = obj.getFront() +# param_6 = obj.getRear() +# param_7 = obj.isEmpty() +# param_8 = obj.isFull() +# @lc code=end + diff --git a/Week_01/G20200343030583/LeetCode_66_583.py b/Week_01/G20200343030583/LeetCode_66_583.py new file mode 100644 index 00000000..56d9d39f --- /dev/null +++ b/Week_01/G20200343030583/LeetCode_66_583.py @@ -0,0 +1,62 @@ +# +# @lc app=leetcode id=66 lang=python +# +# [66] Plus One +# 1. Check the final digit firstly, then process x99 case by converting into string +# 2. Convert into string -> integer value + 1-> string -> integer value +# 3. Check every digits + +# @lc code=start + +# First +# class Solution(object): +# def plusOne(self, digits): +# """ +# :type digits: List[int] +# :rtype: List[int] +# """ +# # most simple case +# if digits[-1] < 9: +# digits[-1] += 1 +# return digits +# else: +# num_digits = len(digits) +# sum = 0 +# i = num_digits - 1 +# j = 0 +# while i >= 0: +# sum += digits[j] * pow(10,i) +# i -= 1 +# j += 1 +# sum += 1 +# new_digits = [int(e) for e in list(str(sum))] +# return new_digits + +# Second +# class Solution(object): +# def plusOne(self, digits): +# """ +# :type digits: List[int] +# :rtype: List[int] +# """ +# return [int(j) for j in list(str(int(''.join([str(i) for i in digits])) + 1))] + +# Third +class Solution(object): + def plusOne(self, digits): + """ + :type digits: List[int] + :rtype: List[int] + """ + digits[-1] += 1 + for i in range(len(digits)-1,0,-1): + if digits[i] != 10: + break + else: + digits[i-1], digits[i] = digits[i-1] + 1, 0 + if digits[0] == 10: + digits[0] = 0 + digits = [1] + digits + return digits +# @lc code=end + diff --git a/Week_01/G20200343030583/LeetCode_88_583.py b/Week_01/G20200343030583/LeetCode_88_583.py new file mode 100644 index 00000000..acbf66c2 --- /dev/null +++ b/Week_01/G20200343030583/LeetCode_88_583.py @@ -0,0 +1,76 @@ +# +# @lc app=leetcode id=88 lang=python +# +# [88] Merge Sorted Array +# 1. use extra list to store +# and then change the value in nums1 (from small to large), O(n) +# 2. Directly change nums1, from large to small, O(n) +# 3. Direcly use sorted function and renew value in nums1 +# @lc code=start + +# First +# class Solution(object): +# def merge(self, nums1, m, nums2, n): +# """ +# :type nums1: List[int] +# :type m: int +# :type nums2: List[int] +# :type n: int +# :rtype: None Do not return anything, modify nums1 in-place instead. +# """ + +# # extreme case need to be considered first +# if n == 0: +# return +# if m == 0 and n != 0 : +# # for i in range (n): +# # nums1[i] = nums2[i] +# nums1[:] = nums2[:] +# return + +# nums = [] +# p = 0 +# q = 0 +# while p < m and q < n: +# if nums1[p] < nums2[q]: +# nums.append(nums1[p]) +# p += 1 +# else: +# nums.append(nums2[q]) +# q += 1 + +# if q < n: +# nums = nums + nums2[q:] +# if p < m: +# nums = nums + nums1[p:] +# # Note that nums + nums1[p:] may exceed m + n because there +# # are some 0s in nums 1 +# for i in range(m + n): +# nums1[i] = nums[i] + +# Second +# class Solution: +# def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None: +# """ +# Do not return anything, modify nums1 in-place instead. +# """ +# while m > 0 and n > 0: +# if nums1[m - 1] > nums2[n - 1]: +# nums1[m + n - 1] = nums1[m - 1] +# m -= 1 +# else: +# nums1[m + n - 1] = nums2[n - 1] +# n -= 1 + +# nums1[:n] = nums2[:n] + +# Third +class Solution: + def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None: + """ + Do not return anything, modify nums1 in-place instead. + """ + nums1[:] = sorted(nums1[:m] + nums2[:n]) + +# @lc code=end + diff --git a/Week_01/G20200343030583/NOTE.md b/Week_01/G20200343030583/NOTE.md index 50de3041..582e36a5 100644 --- a/Week_01/G20200343030583/NOTE.md +++ b/Week_01/G20200343030583/NOTE.md @@ -1 +1,52 @@ -学习笔记 \ No newline at end of file +## 学习笔记 week01 Summary +### Array: +- Prepend: O(1) [*] +- Append: O(1) +- Lookup: O(1) +- Insert: O(n) +- Delete: O(n) + +### LinkList: +- Prepend: O(1) +- Append: O(1) +- Lookup: O(n) +- Insert: O(1) +- Delete: O(1) + +### Skip List: +空间换时间
+Add index for some node: 一级索引,二级索引(more coarse),……,多级索引
+时间复杂度 O(log n)
+维护成本较高。添加和删除都要重新对索引进行修改
+空间复杂度 O(n)
+ +Q70
+!找最近 重复子问题
+第三级台阶走法:第一级台阶 + 2步; 第二级台阶 + 1步
+f(3) = f(1) + f(2)
+f(4) = f(2) + f(3)
+->fibonacci
+ +懵逼时候: +1. 能不能暴力解?基本情况
+2. 找最近重复子问题 (重复性) + +#### 双指针方法 +可能要排序?
+向中缩进 (根据题目条件判断缩进策略)
+E.g, 3 sums and 两柱中间面积
+\* 快慢指针 (检测链表有环) + +### deque 双端队列 + +### Priority queue +Push: O(1)
+Pop: O(log n) 按照元素优先级取出
+底层具体实现的数据结构较为多样和复杂:heap, bst, treap
+ +#### 最近相关性 -> 用栈来解决 +E.g. 括号字符串的有效性 Q20 + +#### 先来后到 -> queue +E.g. Sliding window -> queue Q239 + From 185c8cce882663569a1920951719893298d7bf05 Mon Sep 17 00:00:00 2001 From: yukixLLL Date: Fri, 14 Feb 2020 13:00:28 +0100 Subject: [PATCH 0101/1268] Update NOTE.md --- Week_01/G20200343030583/NOTE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Week_01/G20200343030583/NOTE.md b/Week_01/G20200343030583/NOTE.md index 582e36a5..f29d996d 100644 --- a/Week_01/G20200343030583/NOTE.md +++ b/Week_01/G20200343030583/NOTE.md @@ -14,7 +14,7 @@ - Delete: O(1) ### Skip List: -空间换时间
+升维 + 空间换时间
Add index for some node: 一级索引,二级索引(more coarse),……,多级索引
时间复杂度 O(log n)
维护成本较高。添加和删除都要重新对索引进行修改
From e948a972d382c113454a99da12de2f6be6e47105 Mon Sep 17 00:00:00 2001 From: zzzzz1797 <979652917@qq.com> Date: Fri, 14 Feb 2020 21:30:07 +0800 Subject: [PATCH 0102/1268] =?UTF-8?q?=E7=AC=AC3=E8=AF=BE=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030545/LeetCode_01_545.py | 47 ++++++++ Week_01/G20200343030545/LeetCode_189_545.py | 114 ++++++++++++++++++++ Week_01/G20200343030545/LeetCode_21_545.py | 73 +++++++++++++ Week_01/G20200343030545/LeetCode_26_545.py | 49 +++++++++ Week_01/G20200343030545/LeetCode_283_545.py | 40 +++++++ Week_01/G20200343030545/LeetCode_66_545.py | 42 ++++++++ Week_01/G20200343030545/LeetCode_88_545.py | 81 ++++++++++++++ 7 files changed, 446 insertions(+) create mode 100644 Week_01/G20200343030545/LeetCode_01_545.py create mode 100644 Week_01/G20200343030545/LeetCode_189_545.py create mode 100644 Week_01/G20200343030545/LeetCode_21_545.py create mode 100644 Week_01/G20200343030545/LeetCode_26_545.py create mode 100644 Week_01/G20200343030545/LeetCode_283_545.py create mode 100644 Week_01/G20200343030545/LeetCode_66_545.py create mode 100644 Week_01/G20200343030545/LeetCode_88_545.py diff --git a/Week_01/G20200343030545/LeetCode_01_545.py b/Week_01/G20200343030545/LeetCode_01_545.py new file mode 100644 index 00000000..006479e9 --- /dev/null +++ b/Week_01/G20200343030545/LeetCode_01_545.py @@ -0,0 +1,47 @@ +""" + 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 + 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 + + 示例: + 给定 nums = [2, 7, 11, 15], target = 9 + 因为 nums[0] + nums[1] = 2 + 7 = 9 + 所以返回 [0, 1] +""" +from typing import List + + +class Solution: + def twoSum(self, nums: List[int], target: int) -> List[int]: + return self.use_hash(nums, target) + + @classmethod + def directly(cls, nums: List[int], target: int) -> List[int]: + """ + 暴力求解法 + 两层循环嵌套,外层循环从0到n,内层循环从1到n + 时间复杂度O(n^2),空间复杂度O(1) + """ + for i in range(len(nums)): + for j in range(1, len(nums)): + if nums[i] + nums[j] == target and i != j: + return [i, j] + + @classmethod + def use_hash(cls, nums: List[int], target: int) -> List[int]: + """ + 使用一个字典关系存储元素和下标的对应关系。 + 从头开始遍历数组,每次遍历时,以当前遍历的元素为num1,通过target计算num2。 + 判断num2是否在字典中,如果在返回当前遍历的index,以及nums2的index,不在就将当前元素的值和下标存入字典中。 + 时间复杂度是O(n),空间复杂度是O(n) + """ + hash_map = dict() + for index, row in enumerate(nums): + other_row = target - row + + if other_row in hash_map: + return [hash_map[other_row], index] + hash_map[row] = index + + +if __name__ == '__main__': + pass diff --git a/Week_01/G20200343030545/LeetCode_189_545.py b/Week_01/G20200343030545/LeetCode_189_545.py new file mode 100644 index 00000000..bae55b8c --- /dev/null +++ b/Week_01/G20200343030545/LeetCode_189_545.py @@ -0,0 +1,114 @@ +""" + 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 + + 示例 1: + 输入: [1,2,3,4,5,6,7] 和 k = 3 + 输出: [5,6,7,1,2,3,4] + 解释: + 向右旋转 1 步: [7,1,2,3,4,5,6] + 向右旋转 2 步: [6,7,1,2,3,4,5] + 向右旋转 3 步: [5,6,7,1,2,3,4] + + 示例 2: + 输入: [-1,-100,3,99] 和 k = 2 + 输出: [3,99,-1,-100] + 解释: + 向右旋转 1 步: [99,-1,-100,3] + 向右旋转 2 步: [3,99,-1,-100] + + 说明: + 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。 + 要求使用空间复杂度为 O(1) 的 原地 算法。 +""" +from typing import List + + +class Solution: + def rotate(self, nums: List[int], k: int) -> None: + """ + Do not return anything, modify nums in-place instead. + """ + return self.ring(nums, k) + + @classmethod + def directly(cls, nums: List[int], k: int) -> None: + """ + 暴力求解法 + 外层循环k次,内存循环从头到尾依此交换数据 + 时间复杂度是O(n*k),空间复杂度是O(1) + """ + for i in range(k): + value = nums[-1] + for j in range(len(nums)): + nums[j], value = value, nums[j] + + @classmethod + def reverse(cls, nums: List[int], k: int) -> None: + """ + 三次反转 + 根据 split_point = k%len(nums) 将数组分成两段。 + 第一段: 反转列表下标在这个[0, nums_len - split_point - 1]区间内的值。 + 第二段: 反转列表下标在这个[nums_len-split, nums-1]区间内的值。 + 第一次反转 反转第一段数据。 + 第二次反转 反转第二段数据。 + 然后整体再反转一次。 + + 例如 [1, 2, 3, 4, 5, 6, 7] k =3 + 第一段 列表下标区间在[0,3],即是nums[0],nums[1],nums[2],nums[3]的值。反转后是[4, 3, 2, 1, 5, 6, 7] + 第二段 列表下标区间在[4,6],即是nums[4],nums[5],nums[6]的值。反转后是[4, 3, 2, 1, 7, 6, 5] + 然后整体反转[5, 6, 7, 1, 2, 3, 4] + 时间复杂度是O(n),空间复杂度是O(1)。 + """ + nums_len = len(nums) + split_point = k % nums_len + + def swap(left, right): + while left < right: + nums[left], nums[right] = nums[right], nums[left] + left += 1 + right -= 1 + + swap(0, nums_len - split_point - 1) + swap(nums_len - split_point, nums_len - 1) + swap(0, nums_len - 1) + + @classmethod + def ring(cls, nums: List[int], k: int) -> None: + """ + 环状替换 + 从0开始循环,当0大于等于数组长度的时候或者移动次数等于整个数组长度的时候终止循环 + """ + + # FIXME 看了官方的题解后研究了两个小时,Zzz~ + nums_len = len(nums) + k = k % nums_len + + move_times = i = 0 # 定义初始的指针位置 以及循环次数 + while i < len(nums): + new_i = (i + k) % nums_len # 计算出当前下标的新位置 + v = nums[i] # 存储当前位置的值 + + while True: + old_v = nums[new_i] # 存储当前下标的新位置的原始值 + nums[new_i] = v # 更新新位置的值 + v = old_v + new_i = (new_i + k) % nums_len # 计算新位置原始值的插入下标 + move_times += 1 # 移动次数加1 + if new_i == i: # 当新位置的下标等于外层循环指针的值的时候说明这次更新后,外层循环指针的值要移动了 + nums[new_i] = v # 但是移动前要把外层循环下标的值更新 + move_times += 1 + break + i += 1 + + if move_times == nums_len: + break + + +if __name__ == '__main__': + params_1 = [1, 2, 3, 4, 5, 6] + params_2 = [1, 2, 3, 4, 5, 6] + Solution.reverse(params_1, 21) + Solution.ring(params_2, 21) + + print(params_1) + print(params_2) diff --git a/Week_01/G20200343030545/LeetCode_21_545.py b/Week_01/G20200343030545/LeetCode_21_545.py new file mode 100644 index 00000000..a83ee306 --- /dev/null +++ b/Week_01/G20200343030545/LeetCode_21_545.py @@ -0,0 +1,73 @@ +""" + 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。  + + 示例: + 输入:1->2->4, 1->3->4 + 输出:1->1->2->3->4->4 +""" + + +class ListNode: + def __init__(self, x): + self.val = x + self.next = None + + +class Solution: + def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: + return self.loop(l1, l2) + + @classmethod + def recursive(cls, l1: ListNode, l2: ListNode) -> ListNode: + """ + 递归处理 + l1.val > l2.val merge(l2.next, l1) + l1.val < l2.val merge(l1.next, l2) + + 引用网友R.D的一段话: + "每次都把最小值压入栈,最后出栈的时候,将所有数连在一起就可以了。 + 说白了,就是用一个栈维护了顺序。最后的连接,当然是小的连小的,所以l1 小, + 就连到 l1,l2 小就连到 l2,最后先返回的,就是最小的头结点。 + + 时间复杂度O(m+n),空间复杂度O(m+n) + """ + + if not (l1 and l2): + return l1 or l2 + elif l1.val < l2.val: + l1.next = cls.recursive(l1.next, l2) + return l1 + else: + l2.next = cls.recursive(l1, l2.next) + return l2 + + @classmethod + def loop(cls, l1: ListNode, l2: ListNode) -> ListNode: + """ + 迭代遍历:当两个链表都有值的时候,比较对应的val,更新节点信息。 + 迭代结束后,判断两个链表是否有剩余的节点,然后添加进去 + 时间复杂度是O(n+m),空间复杂度是O(1) + """ + root = ListNode(-1) + + prev = root + + while l1 and l2: + if l1.val > l2.val: + prev.next = l2 + l2 = l2.next + else: + prev.next = l1 + l1 = l1.next + + prev = prev.next + + prev.next = l1 or l2 + + return root.next + + +if __name__ == '__main__': + node1 = ListNode(1) + node2 = None + Solution.loop(node1, node2) diff --git a/Week_01/G20200343030545/LeetCode_26_545.py b/Week_01/G20200343030545/LeetCode_26_545.py new file mode 100644 index 00000000..59dc724b --- /dev/null +++ b/Week_01/G20200343030545/LeetCode_26_545.py @@ -0,0 +1,49 @@ +""" + 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 + 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 + + 示例 1: + 给定数组 nums = [1,1,2], + 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 + + 示例 2: + 给定 nums = [0,0,1,1,1,2,2,3,3,4], + 函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。 + + 不需要考虑数组中超出新长度后面的元素。 +""" +from typing import List + + +class Solution: + def removeDuplicates(self, nums: List[int]) -> int: + return self.double_pointer(nums) + + @classmethod + def double_pointer(cls, nums: List[int]) -> int: + """ + 双指针(快慢指针)方法 + + i 代表慢指针 初始从0开始。 + j 代表快指针 初始从1开始。 + 从j开始依此遍历列表,快指针和慢指针上的数据做比较。如果相等则慢指针不动,反之慢指针加1,然后将快指针所在位置的值赋给慢指针的所在位置上。 + + 例如:[1, 1, 2, 2, 3, 3] i=0, j=1 + loop1 nums[1]==nums[0] i不动 + loop2 nums[2]!=nums[0] 先将i+=1,i变为1。再将j的值赋给i,即nums[1]=nums[2],列表中的元素变为[1,2,2,2,3,3] + loop3 nums[3]==nums[1] i不动 + loop4 nums[4]!=nums[1] 先将i+=1,i变为2。再将j的值赋给i,即nums[2]=nums[4],列表中的元素变为[1,2,2,2,3,3] + loop5 nums[5]==nums[0] i不动 + 循环结束,但是i是从0开始的,所以计算列表长度的时候需要返回i+1。 + 整体的时间复杂度是O(n),空间复杂度是O(1)。 + """ + i = 0 + for index in range(1, len(nums)): + if nums[index] != nums[i]: + i += 1 + nums[i] = nums[index] + return i + 1 + + +if __name__ == '__main__': + print(Solution.double_pointer([1, 2, 3, 4, 5])) diff --git a/Week_01/G20200343030545/LeetCode_283_545.py b/Week_01/G20200343030545/LeetCode_283_545.py new file mode 100644 index 00000000..8b5de664 --- /dev/null +++ b/Week_01/G20200343030545/LeetCode_283_545.py @@ -0,0 +1,40 @@ +""" + 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 + + 示例: + 输入: [0,1,0,3,12] + 输出: [1,3,12,0,0] + 说明: + 必须在原数组上操作,不能拷贝额外的数组。 + 尽量减少操作次数。 +""" +from typing import List + + +class Solution: + + def moveZeroes(self, nums: List[int]) -> None: + """ + Do not return anything, modify nums in-place instead. + """ + return self.double_pointer_and_swap(nums) + + @classmethod + def double_pointer_and_swap(cls, nums) -> None: + """ + 双指针并且交换数据: + 初始化一个变量j,从头开始循环nums,如果对应的值不是0,则交换i和j的值,并且j+=1。 + + 例如: [1, 2, 0 ,0 , 2] + loop1: [1, 2, 0, 0, 2] j=0 循环完后j=1 + loop2: [1, 2, 0, 0, 2] j=1 循环完后j=2 + loop3: [1, 2, 2, 0, 0] j=2 循环完后j=3 + loop4: [1, 2, 2, 0, 0] j=0 循环完后j=1 + loop5: [1, 2, 2, 0, 0] j=0 循环完后j=1 + 时间复杂度 O(n),空间负载度O(1) + """ + j = 0 + for i in range(len(nums)): + if nums[i]: + nums[i], nums[j] = nums[j], nums[i] + j += 1 diff --git a/Week_01/G20200343030545/LeetCode_66_545.py b/Week_01/G20200343030545/LeetCode_66_545.py new file mode 100644 index 00000000..9eff4980 --- /dev/null +++ b/Week_01/G20200343030545/LeetCode_66_545.py @@ -0,0 +1,42 @@ +""" + 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 + 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 + 你可以假设除了整数 0 之外,这个整数不会以零开头。 + + 示例 1: + 输入: [1,2,3] + 输出: [1,2,4] + 解释: 输入数组表示数字 123。 + + 示例 2: + 输入: [4,3,2,1] + 输出: [4,3,2,2] + 解释: 输入数组表示数字 4321。 +""" + +from typing import List + + +class Solution: + def plusOne(self, digits: List[int]) -> List[int]: + return self.tail_loop(digits) + + @classmethod + def tail_loop(cls, digits: List[int]) -> List[int]: + """ + 从尾部开始循环遍历。 + 对应下标元素的值加1,然后对10取模得到一个一个新值。 + 如果这个新值不等于0,则说明不用往后循环了,直接返回就行。否则持续这个循环。 + TODO: 如果循环结束函数依然没有返回,则是99, 999, 9999...这种的值,所以要在最前面的一位加1。 + 时间复杂度:O(n), 空间复杂度:O(1) + """ + for index in range(len(digits) - 1, -1, -1): + digits[index] = (digits[index] + 1) % 10 + if digits[index]: + return digits + digits.insert(0, 1) + return digits + + @classmethod + def python_trick(cls, digits: List[int]) -> List[int]: + return [int(i) for i in str(int(''.join(map(str, digits))) + 1)] diff --git a/Week_01/G20200343030545/LeetCode_88_545.py b/Week_01/G20200343030545/LeetCode_88_545.py new file mode 100644 index 00000000..958286e4 --- /dev/null +++ b/Week_01/G20200343030545/LeetCode_88_545.py @@ -0,0 +1,81 @@ +""" + 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 + + 说明: + 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 + 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 + + 示例: + + 输入: + nums1 = [1,2,3,0,0,0], m = 3 + nums2 = [2,5,6], n = 3 + 输出: [1,2,2,3,5,6] +""" + +from typing import List + + +class Solution: + def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None: + """ + Do not return anything, modify nums1 in-place instead. + """ + + @classmethod + def double_pointer_v1(cls, nums1: List[int], m: int, nums2: List[int], n: int) -> None: + """ + 定义两个指针,分别都从0开始 循环遍历,判断对应的值,添加到新列表中。 + 循环结束后,新列表需要更新nums1或者nums2剩余的元素。 + 最后将新列表赋值给nums1。 + 时间复杂度:O(m+n),空间复杂度O(m+n) + """ + i = j = 0 + res = [] + + while i < m and j < n: + if nums1[i] < nums2[j]: + res.append(nums1[i]) + i += 1 + else: + res.append(nums2[j]) + j += 1 + res += (nums1[i:m] + nums2[j:n]) + + nums1[:] = res + + @classmethod + def double_pointer_v2(cls, nums1: List[int], m: int, nums2: List[int], n: int) -> None: + """ + 双指针解法2,从后往前。 + 首先计算出合并后数组的最大下标。 + 从两个数组的指定位置的后面开始遍历。比较结果,然后插入到后面的位置并且对应的下标减1。循环判断 + 最后需要处理一下nums2遗留的数据 + 时间复杂度:O(m+n),空间复杂度O(1) + """ + p = m + n - 1 # 表示是新的nums1的最后一个下标地址 + + p1 = m - 1 + p2 = n - 1 + + while p1 >= 0 and p2 >= 0: + if nums1[p1] > nums2[p2]: + nums1[p] = nums1[p1] + p1 -= 1 + else: + nums1[p] = nums2[p2] + p2 -= 1 + p -= 1 + nums1[0:p2 + 1] = nums2[0:p2 + 1] + + +if __name__ == '__main__': + a = [1, 2, 3, 0, 0, 0] + b = [1, 5, 6] + Solution.double_pointer_v1(a, 3, b, 3) + # print(a) + + a1 = [2, 4, 5, 0, 0, 0, 0, 0, 0] + b1 = [1, 2, 3] + Solution.double_pointer_v2(a1, 3, b1, 3) + print(a1) From a3e2b8208e70f37691655fd8e07901cda7574901 Mon Sep 17 00:00:00 2001 From: csxuejin <602296435@qq.com> Date: Fri, 14 Feb 2020 21:41:35 +0800 Subject: [PATCH 0103/1268] add code --- Week_01/G20200343030595/.gitignore | 1 + Week_01/G20200343030595/LeetCode_189_595.go | 14 ++++ Week_01/G20200343030595/LeetCode_1_595.go | 11 +++ Week_01/G20200343030595/LeetCode_21_595.go | 32 ++++++++ Week_01/G20200343030595/LeetCode_26_595.go | 10 +++ Week_01/G20200343030595/LeetCode_283_595.go | 14 ++++ Week_01/G20200343030595/LeetCode_42_595.go | 39 +++++++++ Week_01/G20200343030595/LeetCode_641_595.go | 88 +++++++++++++++++++++ Week_01/G20200343030595/LeetCode_66_595.go | 14 ++++ Week_01/G20200343030595/LeetCode_88_595.go | 25 ++++++ 10 files changed, 248 insertions(+) create mode 100644 Week_01/G20200343030595/.gitignore create mode 100644 Week_01/G20200343030595/LeetCode_189_595.go create mode 100644 Week_01/G20200343030595/LeetCode_1_595.go create mode 100644 Week_01/G20200343030595/LeetCode_21_595.go create mode 100644 Week_01/G20200343030595/LeetCode_26_595.go create mode 100644 Week_01/G20200343030595/LeetCode_283_595.go create mode 100644 Week_01/G20200343030595/LeetCode_42_595.go create mode 100644 Week_01/G20200343030595/LeetCode_641_595.go create mode 100644 Week_01/G20200343030595/LeetCode_66_595.go create mode 100644 Week_01/G20200343030595/LeetCode_88_595.go diff --git a/Week_01/G20200343030595/.gitignore b/Week_01/G20200343030595/.gitignore new file mode 100644 index 00000000..1c2d52b6 --- /dev/null +++ b/Week_01/G20200343030595/.gitignore @@ -0,0 +1 @@ +.idea/* diff --git a/Week_01/G20200343030595/LeetCode_189_595.go b/Week_01/G20200343030595/LeetCode_189_595.go new file mode 100644 index 00000000..821e74f2 --- /dev/null +++ b/Week_01/G20200343030595/LeetCode_189_595.go @@ -0,0 +1,14 @@ +func rotate(nums []int, k int) { + k = k % len(nums) + reverse(nums, 0, len(nums)-1) + reverse(nums, 0, k-1) + reverse(nums, k, len(nums)-1) +} + +func reverse(nums []int, start, end int) { + for start < end { + nums[start], nums[end] = nums[end], nums[start] + start++ + end-- + } +} \ No newline at end of file diff --git a/Week_01/G20200343030595/LeetCode_1_595.go b/Week_01/G20200343030595/LeetCode_1_595.go new file mode 100644 index 00000000..02d9adec --- /dev/null +++ b/Week_01/G20200343030595/LeetCode_1_595.go @@ -0,0 +1,11 @@ +func twoSum(nums []int, target int) []int { + mm := make(map[int]int) + for i, v := range nums { + rest, ok := mm[target-v] + if ok { + return []int{rest, i} + } + mm[v] = i + } + return nil +} diff --git a/Week_01/G20200343030595/LeetCode_21_595.go b/Week_01/G20200343030595/LeetCode_21_595.go new file mode 100644 index 00000000..25d7d067 --- /dev/null +++ b/Week_01/G20200343030595/LeetCode_21_595.go @@ -0,0 +1,32 @@ +package main + +/** + * Definition for singly-linked list. + * type ListNode struct { + * Val int + * Next *ListNode + * } + */ + +func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode { + cur := &ListNode{} + head := cur + + for l1 != nil && l2 != nil { + if l1.Val < l2.Val { + cur.Next = l1 + l1 = l1.Next + } else { + cur.Next = l2 + l2 = l2.Next + } + cur = cur.Next + } + + if l1 == nil { + cur.Next = l2 + } else { + cur.Next = l1 + } + return head.Next +} \ No newline at end of file diff --git a/Week_01/G20200343030595/LeetCode_26_595.go b/Week_01/G20200343030595/LeetCode_26_595.go new file mode 100644 index 00000000..07cb5083 --- /dev/null +++ b/Week_01/G20200343030595/LeetCode_26_595.go @@ -0,0 +1,10 @@ +func removeDuplicates(nums []int) int { + index := 1 + for i := 1; i < len(nums); i++ { + if nums[i] != nums[i-1] { + nums[index] = nums[i] + index++ + } + } + return index +} \ No newline at end of file diff --git a/Week_01/G20200343030595/LeetCode_283_595.go b/Week_01/G20200343030595/LeetCode_283_595.go new file mode 100644 index 00000000..0f94f6df --- /dev/null +++ b/Week_01/G20200343030595/LeetCode_283_595.go @@ -0,0 +1,14 @@ +func moveZeroes(nums []int) { + index := 0 + for i, v := range nums { + if v == 0 { + continue + } else { + if index != i { + nums[index] = v + nums[i] = 0 + } + index++ + } + } +} diff --git a/Week_01/G20200343030595/LeetCode_42_595.go b/Week_01/G20200343030595/LeetCode_42_595.go new file mode 100644 index 00000000..3671d95f --- /dev/null +++ b/Week_01/G20200343030595/LeetCode_42_595.go @@ -0,0 +1,39 @@ +func trap(height []int) int { + if len(height) == 0 { + return 0 + } + + leftMax := make([]int, len(height)) + leftMax[0] = height[0] + + rightMax := make([]int, len(height)) + rightMax[len(height)-1] = height[len(height)-1] + + for i := 1; i < len(height); i++ { + leftMax[i] = max(height[i], leftMax[i-1]) + } + + for i := len(height) - 2; i >= 0; i-- { + rightMax[i] = max(height[i], rightMax[i+1]) + } + + ans := 0 + for i := 0; i < len(height); i++ { + ans += min(leftMax[i], rightMax[i]) - height[i] + } + return ans +} + +func max(a, b int) int { + if a > b { + return a + } + return b +} + +func min(a, b int) int { + if a < b { + return a + } + return b +} diff --git a/Week_01/G20200343030595/LeetCode_641_595.go b/Week_01/G20200343030595/LeetCode_641_595.go new file mode 100644 index 00000000..7ecd7d04 --- /dev/null +++ b/Week_01/G20200343030595/LeetCode_641_595.go @@ -0,0 +1,88 @@ +type MyCircularDeque struct { + vals []int + length int +} + +/** Initialize your data structure here. Set the size of the deque to be k. */ +func Constructor(k int) MyCircularDeque { + return MyCircularDeque{ + length: k, + vals: make([]int, 0), + } +} + +/** Adds an item at the front of Deque. Return true if the operation is successful. */ +func (this *MyCircularDeque) InsertFront(value int) bool { + if len(this.vals) == this.length { + return false + } + this.vals = append([]int{value}, this.vals...) + return true +} + +/** Adds an item at the rear of Deque. Return true if the operation is successful. */ +func (this *MyCircularDeque) InsertLast(value int) bool { + if len(this.vals) == this.length { + return false + } + this.vals = append(this.vals, value) + return true +} + +/** Deletes an item from the front of Deque. Return true if the operation is successful. */ +func (this *MyCircularDeque) DeleteFront() bool { + if len(this.vals) == 0 { + return false + } + this.vals = this.vals[1:] + return true +} + +/** Deletes an item from the rear of Deque. Return true if the operation is successful. */ +func (this *MyCircularDeque) DeleteLast() bool { + l := len(this.vals) + if l == 0 { + return false + } + this.vals = this.vals[:l-1] + return true +} + +/** Get the front item from the deque. */ +func (this *MyCircularDeque) GetFront() int { + if len(this.vals) == 0 { + return -1 + } + return this.vals[0] +} + +/** Get the last item from the deque. */ +func (this *MyCircularDeque) GetRear() int { + if len(this.vals) == 0 { + return -1 + } + return this.vals[len(this.vals)-1] +} + +/** Checks whether the circular deque is empty or not. */ +func (this *MyCircularDeque) IsEmpty() bool { + return len(this.vals) == 0 +} + +/** Checks whether the circular deque is full or not. */ +func (this *MyCircularDeque) IsFull() bool { + return len(this.vals) == this.length +} + +/** + * Your MyCircularDeque object will be instantiated and called as such: + * obj := Constructor(k); + * param_1 := obj.InsertFront(value); + * param_2 := obj.InsertLast(value); + * param_3 := obj.DeleteFront(); + * param_4 := obj.DeleteLast(); + * param_5 := obj.GetFront(); + * param_6 := obj.GetRear(); + * param_7 := obj.IsEmpty(); + * param_8 := obj.IsFull(); + */ diff --git a/Week_01/G20200343030595/LeetCode_66_595.go b/Week_01/G20200343030595/LeetCode_66_595.go new file mode 100644 index 00000000..d9ce2cc8 --- /dev/null +++ b/Week_01/G20200343030595/LeetCode_66_595.go @@ -0,0 +1,14 @@ +func plusOne(digits []int) []int { + extra := 1 + for i := len(digits) - 1; i >= 0; i-- { + remain := (digits[i] + extra) % 10 + extra = (digits[i] + extra) / 10 + digits[i] = remain + } + + if extra != 0 { + return append([]int{extra}, digits...) + } + + return digits +} diff --git a/Week_01/G20200343030595/LeetCode_88_595.go b/Week_01/G20200343030595/LeetCode_88_595.go new file mode 100644 index 00000000..7e558f70 --- /dev/null +++ b/Week_01/G20200343030595/LeetCode_88_595.go @@ -0,0 +1,25 @@ +func merge(nums1 []int, m int, nums2 []int, n int) { + cur := m + n - 1 + i, j := m-1, n-1 + for i >= 0 || j >= 0 { + switch { + case i < 0: + nums1[cur] = nums2[j] + j-- + + case j < 0: + nums1[cur] = nums1[i] + i-- + + default: + if nums1[i] > nums2[j] { + nums1[cur] = nums1[i] + i-- + } else { + nums1[cur] = nums2[j] + j-- + } + } + cur-- + } +} From a6650c0a659c269b7d92a551f1f5b865c162177a Mon Sep 17 00:00:00 2001 From: pangshusong Date: Fri, 14 Feb 2020 23:09:08 +0800 Subject: [PATCH 0104/1268] [dsa] stack - largest rectangle area --- .../LeetCode_84_373/LeetCode_84_373_test.go | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 Week_01/G20200343030373/LeetCode_84_373/LeetCode_84_373_test.go diff --git a/Week_01/G20200343030373/LeetCode_84_373/LeetCode_84_373_test.go b/Week_01/G20200343030373/LeetCode_84_373/LeetCode_84_373_test.go new file mode 100644 index 00000000..934ca2b0 --- /dev/null +++ b/Week_01/G20200343030373/LeetCode_84_373/LeetCode_84_373_test.go @@ -0,0 +1,122 @@ +//https://leetcode-cn.com/problems/largest-rectangle-in-histogram/ +package largest_rectangle_in_histogram_t_test + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestLargestArea(t *testing.T) { + t.Log("Largest Rectangle in Histogram") + heights := []int{2, 1, 5, 6, 2, 3} + assert.Equal(t, 10, largestRectangleArea(heights)) +} + +func largestRectangleArea(heights []int) int { + return stackIncrease(heights) +} + +//暴力求解1 +//找到左边界 +//找到右边界 +//找到左右边界中面积最大的情况 +//O(n^3) +//Not AC, Time Out +func bruteForce1(heights []int) int { + maxArea := 0 + n := len(heights) + for i := 0; i <= n-1; i++ { //左边界 //要考虑只有一个元素的情况, i可达右边界 + for j := n - 1; j >= i; j-- { //右边界 //要考虑只有一个元素的情况, j可达左边界 + minHeight := heights[i] + for k := i; k <= j; k++ { //中间最低 //k可达边界 + if heights[k] < minHeight { + minHeight = heights[k] + } + } + if area := minHeight * (j - i + 1); area > maxArea { + maxArea = area + } + } + } + return maxArea +} + +//暴力求解2 +//遍历柱子 +//和其他柱子的面积的所有组合,找到最大 +//O(n^2) +//AC, 776ms +func bruteForce2(heights []int) int { + maxArea := 0 + n := len(heights) + for i := 0; i < n; i++ { + minHeight := heights[i] + for j := i; j < n; j++ { + if heights[j] < minHeight { + minHeight = heights[j] + } + if area := minHeight * (j - i + 1); area > maxArea { + maxArea = area + } + } + } + return maxArea +} + +//左右发散 +//先确定高度,再确定宽度 +//遍历每个值作为高度,向左向右查找小于该高度或超出边界为止 +//l和r对应是取不到的边界值,宽度为r-l-1 +//O(n^2), 548ms +func leftRightOut(heights []int) int { + maxArea := 0 + n := len(heights) + for i := 0; i < n; i++ { + l, r := i, i //左右边界 + for l >= 0 && heights[l] >= heights[i] { + l-- + } + for r < n && heights[r] >= heights[i] { + r++ + } + if area := heights[i] * (r - l - 1); area > maxArea { + maxArea = area + } + } + return maxArea +} + +//辅助栈 +//栈维护一个 下标 序列,对应直方图高度依次递增 +//把 -1 放进栈的顶部来表示开始 +//当下一个值right小于栈顶下表的值cur,对于栈顶下标这个柱子来说 +//- right是cur的右边界 +//- cur的前一个元素left是它的左边界 +//O{n), 8ms; O(n) +func stackIncrease(heights []int) int { + maxArea := 0 + n := len(heights) + var stack []int //用切片实现栈 + for r := 0; r <= n; r++ { + h := 0 //高度,右边界越界时为0 + if r < n { //右边界不越界 + h = heights[r] + } + + for len(stack) > 0 && h < heights[stack[len(stack)-1]] { + cur := stack[len(stack)-1] //栈顶元素 + stack = stack[:len(stack)-1] //弹出栈顶元素 + + l := -1 //左边界越界时为-1 + if len(stack) > 0 { //左边界不越界 + l = stack[len(stack)-1] + } + + if area := heights[cur] * (r - l - 1); area > maxArea { + maxArea = area + } + } + stack = append(stack, r) + } + return maxArea +} From 0511125dc51c1566b9a27cee36a2f1e71b4fe7a5 Mon Sep 17 00:00:00 2001 From: huoyitong <349247397@qq.com> Date: Fri, 14 Feb 2020 23:22:01 +0800 Subject: [PATCH 0105/1268] dev: dev --- .../Week 01/LeetCode_42_519.js | 20 ++++++ .../Week 01/LeetCode_641_519.js | 67 +++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 Week_00/G20200343030519/Week 01/LeetCode_42_519.js create mode 100644 Week_00/G20200343030519/Week 01/LeetCode_641_519.js diff --git a/Week_00/G20200343030519/Week 01/LeetCode_42_519.js b/Week_00/G20200343030519/Week 01/LeetCode_42_519.js new file mode 100644 index 00000000..8c7ada17 --- /dev/null +++ b/Week_00/G20200343030519/Week 01/LeetCode_42_519.js @@ -0,0 +1,20 @@ +// https://leetcode-cn.com/problems/trapping-rain-water/ + +var trap = function(height) { + if (!height || height.length == 0) { + return 0; + } + let stack = []; + let res = 0; + for (let i = 0; i < height.length; i++) { + while (stack.length != 0 && height[stack[stack.length - 1]] < height[i]) { + let tmp = stack.pop(); + if (stack.length == 0) { + break; + } + res += (Math.min(height[i], height[stack[stack.length - 1]]) - height[tmp]) * (i - stack[stack.length - 1] - 1); + } + stack.push(i); + } + return res; +} \ No newline at end of file diff --git a/Week_00/G20200343030519/Week 01/LeetCode_641_519.js b/Week_00/G20200343030519/Week 01/LeetCode_641_519.js new file mode 100644 index 00000000..2db373d7 --- /dev/null +++ b/Week_00/G20200343030519/Week 01/LeetCode_641_519.js @@ -0,0 +1,67 @@ +// https://leetcode-cn.com/problems/design-circular-deque/submissions/ + +var MyCircularDeque = function(k) { + this.ArrDeque = new Array(k + 1); + this.front = 0; + this.rear = 0; + this.n = k + 1; + this.k = k; +} + +MyCircularDeque.prototype.insertFront = function(value) { + if (this.isFull('front')) { + return false; + } else { + this.front = (--this.front + this.n) % (this.n); + this.ArrDeque[this.front] = value; + return true; + } +} + +MyCircularDeque.prototype.insertLast = function(value) { + if (this.isFull('last')) { + return false; + } else { + this.ArrDeque[this.rear] = value; + this.rear = (this.rear + 1) % (this.n); + return true; + } +} + +MyCircularDeque.prototype.deleteFront = function() { + if (this.isEmpty()) { + return false; + } else { + this.front = (++this.front) % (this.n); + return true; + } +} + +MyCircularDeque.prototype.deleteLast = function() { + if (this.isEmpty()) { + return false; + } else { + this.rear = (--this.rear + this.n) % (this.n); + return true; + } +} + +MyCircularDeque.prototype.getFront = function() { + return this.isEmpty() ? -1 : this.ArrDeque[this.front]; +} + +MyCircularDeque.prototype.getRear = function() { + return this.isEmpty() ? -1 : this.ArrDeque[(this.rear - 1 + this.n) % (this.n)]; +} + +MyCircularDeque.prototype.isEmpty = function() { + if (this.front == this.rear) { + return true; + } else { + return false; + } +} + +MyCircularDeque.prototype.isFull = function(x) { + return (this.rear - this.front + this.n) % (this.n) == this.k; +} \ No newline at end of file From 48cad2bd599bb4496f09df2366c4ffb1f5f4036b Mon Sep 17 00:00:00 2001 From: TroyBryant <275868026@qq.com> Date: Sat, 15 Feb 2020 00:21:27 +0800 Subject: [PATCH 0106/1268] 489-week 01 489-week 01 --- Week_01/G20200343030489/LeetCode_189_489.cpp | 58 ++++++++++++++++++++ Week_01/G20200343030489/LeetCode_1_489.cpp | 57 +++++++++++++++++++ Week_01/G20200343030489/LeetCode_21_489.cpp | 28 ++++++++++ Week_01/G20200343030489/LeetCode_26_489.cpp | 22 ++++++++ Week_01/G20200343030489/LeetCode_283_489.cpp | 22 ++++++++ Week_01/G20200343030489/LeetCode_66_489.cpp | 24 ++++++++ Week_01/G20200343030489/LeetCode_88_489.cpp | 12 ++++ Week_01/G20200343030489/NOTE.md | 37 ++++++++++++- 8 files changed, 259 insertions(+), 1 deletion(-) create mode 100644 Week_01/G20200343030489/LeetCode_189_489.cpp create mode 100644 Week_01/G20200343030489/LeetCode_1_489.cpp create mode 100644 Week_01/G20200343030489/LeetCode_21_489.cpp create mode 100644 Week_01/G20200343030489/LeetCode_26_489.cpp create mode 100644 Week_01/G20200343030489/LeetCode_283_489.cpp create mode 100644 Week_01/G20200343030489/LeetCode_66_489.cpp create mode 100644 Week_01/G20200343030489/LeetCode_88_489.cpp diff --git a/Week_01/G20200343030489/LeetCode_189_489.cpp b/Week_01/G20200343030489/LeetCode_189_489.cpp new file mode 100644 index 00000000..47318f08 --- /dev/null +++ b/Week_01/G20200343030489/LeetCode_189_489.cpp @@ -0,0 +1,58 @@ +/*һ*/ +/*class Solution { +public: + void rotate(vector& nums, int k) { + int tmp[nums.size()]; + + for (int i = 0; i < nums.size(); i++) + { + tmp[(i+k)%nums.size()]=nums[i]; + } + for (int i = 0; i < nums.size(); i++) + { + nums[i]=tmp[i]; + } + + + } +};*/ +/*˷Ϊһ飬¿ռ临ӶȲΪO1*/ + +/**/ + +/* +class Solution { +public: + void rotate(vector& nums, int k) { + int tmp; + for (int i = 0; i < k%nums.size(); i++) + { + tmp=nums[nums.size()-1]; + for (int j = nums.size()-1; j >0; j--) + { + nums[j]=nums[j-1]; + } + nums[0]=tmp; + } + } +}; +*/ +/*˷ʱ临ӶȹߣΪO(k*n)*/ + +/**/ +class Solution { +public: + void rotate(vector& nums, int k) { + int leng=nums.size(); + k%=nums.size(); + reverse(&nums[0],&nums[leng]); + reverse(&nums[0],&nums[k]); + reverse(&nums[k],&nums[leng]); + } +}; + +/*˷˷תתreverse +ʵת k Σ k\%nk%n βԪػᱻƶͷʣµԪػᱻƶ + +УȽԪطתȻתǰ k Ԫأٷת n-kn?k ԪأܵõҪĽ +*/ \ No newline at end of file diff --git a/Week_01/G20200343030489/LeetCode_1_489.cpp b/Week_01/G20200343030489/LeetCode_1_489.cpp new file mode 100644 index 00000000..42e32f95 --- /dev/null +++ b/Week_01/G20200343030489/LeetCode_1_489.cpp @@ -0,0 +1,57 @@ +/*һ*/ +/*class Solution { +public: + vector twoSum(vector& nums, int target) { + int i,j; + for (i = 0; i < nums.size(); i++) + { + for (j = i+1 ; j < nums.size(); j++) + { + if (nums[i]+nums[j]==target) + { + return {i,j}; + } + + } + + } + return {}; + + } +};*/ + +/*ϣ*/ +/* +class Solution { +public: + vector twoSum(vector& nums, int target) { + unordered_map hash; + for(int i=0;i twoSum(vector& nums, int target) { + map hash; + vector a(2,-1);//ؽʼһСΪ2ֵΪ-1 + for (int i = 0; i < nums.size(); i++) + { + if (hash.count(target-nums[i])>0) + { + /* code */a[0]=hash[target-nums[i]]; + a[1]=i; + break; + } + hash[nums[i]]=i;//mapУȡ± + } + return a; + + } +}; \ No newline at end of file diff --git a/Week_01/G20200343030489/LeetCode_21_489.cpp b/Week_01/G20200343030489/LeetCode_21_489.cpp new file mode 100644 index 00000000..784b485e --- /dev/null +++ b/Week_01/G20200343030489/LeetCode_21_489.cpp @@ -0,0 +1,28 @@ +class Solution { +public: + ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { + ListNode* temp=new ListNode(-1); + ListNode* tmp=temp; + + + while (l1!=NULL&&l2!=NULL) + { + /* code */if (l1->val<=l2->val) + { + /* code */tmp->next=l1; + l1=l1->next; + }else + { + tmp->next=l2; + l2=l2->next; + } + tmp=tmp->next; + } + tmp->next=l1 != NULL?l1:l2; + + return temp->next; + + + } +}; +/*˷Ϊ*/ \ No newline at end of file diff --git a/Week_01/G20200343030489/LeetCode_26_489.cpp b/Week_01/G20200343030489/LeetCode_26_489.cpp new file mode 100644 index 00000000..44af093f --- /dev/null +++ b/Week_01/G20200343030489/LeetCode_26_489.cpp @@ -0,0 +1,22 @@ +class Solution { +public: + int removeDuplicates(vector& nums) { + if (nums.size()==0) + { + /* code */return 0; + } + int a=0; + for (int i = 0; i < nums.size(); i++) + { + /* code */if (nums[i]!=nums[a]) + { + /* code */a++; + nums[a]=nums[i]; + } + + } + return a+1; + + + } +}; \ No newline at end of file diff --git a/Week_01/G20200343030489/LeetCode_283_489.cpp b/Week_01/G20200343030489/LeetCode_283_489.cpp new file mode 100644 index 00000000..951a2f9a --- /dev/null +++ b/Week_01/G20200343030489/LeetCode_283_489.cpp @@ -0,0 +1,22 @@ +class Solution +{ +public: + void moveZeroes(vector &nums) + { + int temp=0; + for (int j = 0; j < nums.size(); j++) + { + if (nums[j]==0) + { + temp++; + } + else if(temp>0) + { + nums[j-temp]=nums[j]; + nums[j]=0; + } + + + } + } +}; \ No newline at end of file diff --git a/Week_01/G20200343030489/LeetCode_66_489.cpp b/Week_01/G20200343030489/LeetCode_66_489.cpp new file mode 100644 index 00000000..ec3b6739 --- /dev/null +++ b/Week_01/G20200343030489/LeetCode_66_489.cpp @@ -0,0 +1,24 @@ +class Solution { +public: + vector plusOne(vector& digits) { + int size=digits.size(); + for (int i = size-1; i >=0; i--) + { + /* code */if (digits[i]==9) + { + /* code */digits[i]=0; + } + else + { + digits[i]++; + return digits; + } + + + } + digits.push_back(0); + digits[0]=1; + return digits; + + } +}; \ No newline at end of file diff --git a/Week_01/G20200343030489/LeetCode_88_489.cpp b/Week_01/G20200343030489/LeetCode_88_489.cpp new file mode 100644 index 00000000..dc385ef5 --- /dev/null +++ b/Week_01/G20200343030489/LeetCode_88_489.cpp @@ -0,0 +1,12 @@ +class Solution { +public: + void merge(vector& nums1, int m, vector& nums2, int n) { + for (int i = m; i < m+n; i++) + { + nums1[i]=nums2[i-m]; + } + sort(nums1.begin(),nums1.end()); + + } +}; +/*˷ʱ临Ӷȵͣռ临Ӷȸ*/ \ No newline at end of file diff --git a/Week_01/G20200343030489/NOTE.md b/Week_01/G20200343030489/NOTE.md index 50de3041..d0d0312b 100644 --- a/Week_01/G20200343030489/NOTE.md +++ b/Week_01/G20200343030489/NOTE.md @@ -1 +1,36 @@ -学习笔记 \ No newline at end of file +学习笔记 + +### 删除排序数组中的重复项 + +刚开始拿到这个题的时候我的第一反应便是用另一个数组来存放数字,但是犯了一个致命错误,就是没有仔细审题。题目说道要在原地修改数组,所以我改变了思路。题目说道不需要考虑超出新长度后面的元素,也就是说在输出的时候我只要输出前面部分的数字即可,所以想到通过循环,与前面数字对比,若不相同,则把前面重复数字替换掉,例如112这情况,在第三个位置发现与第一个位置数字不同的时候,替换第二个位置的数字,使成为122,输出的时候只要将前面两个位置输出即可。 + +### 旋转数组 + +看到题目上说了要求使用空间复杂度为O(1)算法,但第一次还是尝试了通过存放到另一个数组来先将排序排好,再将临时的数组依次存回原来原来数组中。 + +但毕竟这方法的空间复杂度高了,不符合题意。所以用第二个方法,就是一位一位移动。先将最后一个数字临时存起,再将整个表右移动一位,最后把临时存的数字放置第一位,以此循环k次,实现旋转。但这个方法的时间复杂度高,为O(k*n)。 + +最后看了别人的题解,学会了用reverse这个函数,即反转。这个方法是基于这样的事实:当旋转数组k次的时候,k%n个尾部元素就会被移到头部,剩下向后移动。这个方法首先将所有元素反转,接着反转前k个元素,最后反转n-k个元素,就能得到相应的结果。此方法时间复杂度为O(n)。 + +### 合并两个有序链表 + +由于在链表上面还不太熟悉,所以直接看了别人的题解。在这题上,运用了迭代的方法。创建一个存储元素的链表,设置一个哨兵点,这样可以在后面容易返回合并后的链表。对比两个链表中的元素大小,存储在创建的链表中,排序后输出哨兵点后的元素,得到最终结果。 + +### 合并两个有序数组 + +由于题目中说明了第一个数组有足够空间存放第二个数组的元素,所以我在这先将第一个数组后面无关的数字进行替换,替换成第二组的数字,接着通过sort函数,直接对替换后的第一个数组排序,得到最终结果。 + +### 两数之和 + +看到题目后第一反应便是通过暴力方法,逐一排查,如果有相等情况,记录下相应位置。但是暴力法导致的就是时间复杂度高,为n^2^ + +所以看了别人的方法,运用哈希表。通过空间换时间的方式,可以将时间复杂度降到O(1)。在进行迭代并把元素放到列表中的同时,,还会回头来检查表是否已经存在当前元素对应的目标元素。 + +### 移动零 + +此题其实方法也简单,只需要在遍历过程中记录下数为0的个数,再进行数组中位置交换,将0移动到后方。 + +### 加一 + +第一次拿到这题就理解错误了,我将它理解为只需要改变最后一个数字即可,但此题的意思是这个数组就是整个数字,加上一就相当于总数加一得到新的总数。所以要考虑到9+1进一位的情况。这题可能会出现9999这样的所有位数上都为9的情况。所以需要从数组最后一位进行遍历,如果无9,直接加一并返回数组即可,若出现上面说的情况,则数组上所有的数都换为0。遍历结束后,将数组增加一位,并放上0,将数组第一个数字换为1即可得到答案。 + From 326555d8a1ed372fc35e2ed89dad583e00ff6b8e Mon Sep 17 00:00:00 2001 From: zzzzz1797 <979652917@qq.com> Date: Sat, 15 Feb 2020 01:34:23 +0800 Subject: [PATCH 0107/1268] =?UTF-8?q?=E7=AC=AC3=E8=AF=BE=E7=BB=83=E4=B9=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030545/LeetCode_11_545.py | 62 +++++++++++++++++ Week_01/G20200343030545/LeetCode_15_545.py | 74 +++++++++++++++++++++ Week_01/G20200343030545/LeetCode_206_545.py | 60 +++++++++++++++++ Week_01/G20200343030545/LeetCode_70_545.py | 71 ++++++++++++++++++++ 4 files changed, 267 insertions(+) create mode 100644 Week_01/G20200343030545/LeetCode_11_545.py create mode 100644 Week_01/G20200343030545/LeetCode_15_545.py create mode 100644 Week_01/G20200343030545/LeetCode_206_545.py create mode 100644 Week_01/G20200343030545/LeetCode_70_545.py diff --git a/Week_01/G20200343030545/LeetCode_11_545.py b/Week_01/G20200343030545/LeetCode_11_545.py new file mode 100644 index 00000000..11401ce7 --- /dev/null +++ b/Week_01/G20200343030545/LeetCode_11_545.py @@ -0,0 +1,62 @@ +""" + 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。 + 在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。 + 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 + 说明:你不能倾斜容器,且 n 的值至少为 2。 + + 示例: + + 输入: [1,8,6,2,5,4,8,3,7] + 输出: 49 +""" + +from typing import List + + +class Solution: + def maxArea(self, height: List[int]) -> int: + pass + + @classmethod + def directly(cls, height: List[int]) -> int: + """ + 暴力求解法 + 两层循环 + 第一层循环从0开始到n-1 + 第二层循环从第一层循环的下标+1开始到n + 时间负载度O(n^2),空间复杂度是O(1) + """ + res = 0 + for i in range(len(height) - 1): + for j in range(i + 1, len(height)): + width = min(height[i], height[j]) + + length = j - i + res = max(res, (width * length)) + return res + + @classmethod + def double_pointer(cls, height: List[int]) -> int: + """ + 双指针解法: + 一个指针从头,一个指针从尾,每次循环计算之间的面积,然后比较双指针所在下标的值的大小。 + 哪个小哪个移动。头指针小 头指针+1 尾指针小 尾指针-1 + 时间复杂度O(n),空间复杂度是O(1) + """ + res = 0 + + i = 0 + j = len(height) - 1 + + while i < j: + length = j - i + width = min(height[j], height[i]) + + res = max(res, length * width) + + if height[j] > height[i]: + i += 1 + else: + j -= 1 + + return res diff --git a/Week_01/G20200343030545/LeetCode_15_545.py b/Week_01/G20200343030545/LeetCode_15_545.py new file mode 100644 index 00000000..65f6faa7 --- /dev/null +++ b/Week_01/G20200343030545/LeetCode_15_545.py @@ -0,0 +1,74 @@ +""" + 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c , + 使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。 + + 注意:答案中不可以包含重复的三元组。 + + 示例: + 给定数组 nums = [-1, 0, 1, 2, -1, -4], + 满足要求的三元组集合为: + [ + [-1, 0, 1], + [-1, -1, 2] + ] +""" + +from typing import List + + +class Solution: + def threeSum(self, nums: List[int]) -> List[List[int]]: + return self.three_pointer_loop(nums) + + @classmethod + def three_pointer_loop(cls, nums: List[int]) -> List[List[int]]: + """ + 先将列表进行排序,用python自带的sort就行。 + 用三个指针处理。两层循环,外层循环的遍历列表,内层循环是对第二个和第三个指针进行移位比较操作。 + + 第一个指针从头开始遍历列表。 + 第二个指针每次的初始位置都是第一个指针的下标+1 + 第三个指针每次的初始位置都是列表的最后一个元素。 + 跳出循环的条件是: + 1、循环遍历完成 + 2、有下标对应的值大于0。 + 时间复杂度是O(n^2),空间复杂度是O(1) + """ + + res = [] + + nums.sort() + + for index in range(len(nums)): + start_index = index + 1 + end_index = len(nums) - 1 + + if nums[index] > 0: + return res + + if index > 0 and nums[index] == nums[index - 1]: + continue + + while end_index > start_index: + check_sum = nums[index] + nums[start_index] + nums[end_index] + + if check_sum == 0: + res.append([nums[index], nums[start_index], nums[end_index]]) + + while end_index > start_index and nums[start_index] == nums[start_index + 1]: + start_index += 1 + + while end_index > start_index and nums[end_index] == nums[end_index - 1]: + end_index -= 1 + + start_index += 1 + end_index -= 1 + elif nums[end_index] > check_sum: + end_index -= 1 + else: + start_index += 1 + return res + + +if __name__ == '__main__': + print(Solution.directly([-1, 0, 1, 2, -1, -4])) diff --git a/Week_01/G20200343030545/LeetCode_206_545.py b/Week_01/G20200343030545/LeetCode_206_545.py new file mode 100644 index 00000000..fd5f2de7 --- /dev/null +++ b/Week_01/G20200343030545/LeetCode_206_545.py @@ -0,0 +1,60 @@ +""" + 反转一个单链表。 + + 示例: + 输入: 1->2->3->4->5->NULL + 输出: 5->4->3->2->1->NULL +""" + + +class ListNode(object): + def __init__(self, x): + self.val = x + self.next = None + + +class Solution(object): + def reverseList(self, head): + pass + + @classmethod + def recursive(cls, head): + """ + 递归的方法: + 找到最后一个节点,然后依此往回归纳更新。 + 时间复杂度:O(n),空间复杂度O(n) + """ + if head is None or head.next is None: + return head + + new_head = cls.recursive(head.next) + head.next.next = head + head.next = None + return new_head + + @classmethod + def loop(cls, head): + """ + 循环判断: + 5->4->3-2-1 + + loop1: 5->4->3->2->1 4->3->2->1 5 + loop2: 4->3->2->1 3->2->1 4->5 + loop3: 3->2->1 2->1 3->4->5 + loop4: 2->1 1 2->3->4->5 + loop5: 1 None 1->2->3->4->5 + + 时间复杂度O(n),空间复杂度O(1) + + """ + if not head or head.next is None: + return head + + prev = None + while head: + tmp_node = head.next + + head.next = prev + + prev, head = head, tmp_node + return prev diff --git a/Week_01/G20200343030545/LeetCode_70_545.py b/Week_01/G20200343030545/LeetCode_70_545.py new file mode 100644 index 00000000..dfb2ae5d --- /dev/null +++ b/Week_01/G20200343030545/LeetCode_70_545.py @@ -0,0 +1,71 @@ +""" + 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 + 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? + 注意:给定 n 是一个正整数。 + + 示例 1: + 输入: 2 + 输出: 2 + 解释: 有两种方法可以爬到楼顶。 + 1. 1 阶 + 1 阶 + 2. 2 阶 + + 示例 2: + 输入: 3 + 输出: 3 + 解释: 有三种方法可以爬到楼顶。 + 1. 1 阶 + 1 阶 + 1 阶 + 2. 1 阶 + 2 阶 + 3. 2 阶 + 1 阶 +""" + + +class Solution: + def climbStairs(self, n: int) -> int: + pass + + @classmethod + def recursive(cls, n: int) -> int: + """ + 递归解决: + f(n) = f(n-1) + f(n) + 终止条件 n小于3时,返回对应n。 + 时间复杂度O(2^n),空间复杂度O(n) + """ + if n < 3: + return n + return cls.recursive(n - 1) + cls.recursive(n - 2) + + @classmethod + def recursive_use_hash(cls, n: int) -> int: + """ + 和递归方法一样,只是用一个hash表记录一下每个数的值,防止重复计算。 + 时间复杂度O(n),空间复杂度是O(n) + """ + + def recursive(_n: int, mapping: dict = None) -> int: + mapping = mapping or {} + if _n < 3: + return 2 + if _n in mapping: + return mapping[_n] + else: + result = recursive(_n - 1) + recursive(_n - 2) + mapping[_n] = result + return result + + return recursive(n) + + @classmethod + def loop_compute(cls, n: int) -> int: + """ + 自低向上计算 + 时间复杂度O(n),空间复杂度O(1) + """ + if n < 3: + return n + + a, b = 1, 2 + for i in range(3, n + 1): + a, b = b, a + b + return b From bec65caa3b7782157b1026e7eb57de33022fb7ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=80=E5=B8=85=E7=9A=84=E8=9D=88=E8=9D=88?= Date: Sat, 15 Feb 2020 11:55:04 +0800 Subject: [PATCH 0108/1268] =?UTF-8?q?=E9=83=AD=E8=BE=9B=E5=98=89=E7=AC=AC?= =?UTF-8?q?=E4=B8=80=E5=91=A8=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_00/G20200343030017/PriorityQueue.txt | 13 ++ .../MyCircularDeque.java | 167 ++++++++++++++++++ .../src/merge_sorted_array/Solution.java | 33 ++++ .../src/merge_two_sorted_lists/ListNode.java | 7 + .../src/merge_two_sorted_lists/Solution.java | 37 ++++ .../leetcode/src/move_zeroes/Solution.java | 24 +++ .../leetcode/src/plus_one/Solution.java | 26 +++ .../Solution.java | 28 +++ .../leetcode/src/rotate_array/Solution.java | 24 +++ .../src/trapping_rain_water/Solution.java | 37 ++++ .../leetcode/src/two_sum/Solution.java | 26 +++ 11 files changed, 422 insertions(+) create mode 100644 Week_00/G20200343030017/PriorityQueue.txt create mode 100644 Week_00/G20200343030017/leetcode/src/design_circular_deque/MyCircularDeque.java create mode 100644 Week_00/G20200343030017/leetcode/src/merge_sorted_array/Solution.java create mode 100644 Week_00/G20200343030017/leetcode/src/merge_two_sorted_lists/ListNode.java create mode 100644 Week_00/G20200343030017/leetcode/src/merge_two_sorted_lists/Solution.java create mode 100644 Week_00/G20200343030017/leetcode/src/move_zeroes/Solution.java create mode 100644 Week_00/G20200343030017/leetcode/src/plus_one/Solution.java create mode 100644 Week_00/G20200343030017/leetcode/src/remove_duplicates_from_sorted_array/Solution.java create mode 100644 Week_00/G20200343030017/leetcode/src/rotate_array/Solution.java create mode 100644 Week_00/G20200343030017/leetcode/src/trapping_rain_water/Solution.java create mode 100644 Week_00/G20200343030017/leetcode/src/two_sum/Solution.java diff --git a/Week_00/G20200343030017/PriorityQueue.txt b/Week_00/G20200343030017/PriorityQueue.txt new file mode 100644 index 00000000..28e45b70 --- /dev/null +++ b/Week_00/G20200343030017/PriorityQueue.txt @@ -0,0 +1,13 @@ +属性:初始容量 11 +可以从其他Collection转化为PriorityQueue +SortedSet可以直接转化为PriorityQueue,排序保持不变 + +initElementsFromCollection方法: +把Collection转化为一个数组,然后遍历,如果有空的抛出异常,所以PriorityQueue不允许空值 + +扩容:如果小于64 增加 2,如果大于64增加一倍 +增加节点:siftUp ,先增加到队列最后,然后与前面比较进行交换 +peek:不操作节点返回做前面节点 +indexOf:遍历找到指定索引的值,O(n) +删除节点:删除指定节点,siftdown,节点和它的子节点比较,交换位置,用于调整结点 +heapify:建堆,用siftdown调整 \ No newline at end of file diff --git a/Week_00/G20200343030017/leetcode/src/design_circular_deque/MyCircularDeque.java b/Week_00/G20200343030017/leetcode/src/design_circular_deque/MyCircularDeque.java new file mode 100644 index 00000000..0e19dda2 --- /dev/null +++ b/Week_00/G20200343030017/leetcode/src/design_circular_deque/MyCircularDeque.java @@ -0,0 +1,167 @@ +package design_circular_deque; + +import java.util.Arrays; + +public class MyCircularDeque { + int[] deque; + int k; + /** Initialize your data structure here. Set the size of the deque to be k. */ + public MyCircularDeque(int k) { + this.deque=new int[k]; + this.k = k; + for (int n=0;n nums2[b]? nums2[b++]:nums1[a++]; + c++; + } + if (a=0;n--){ + if (digits[n]==9){ + digits[n]=0; + }else{ + digits[n]=digits[n]+1; + return digits; + } + } + int[] temp = new int[digits.length+1]; + System.arraycopy(digits,0,temp,1,digits.length); + temp[0] = 1; + return temp; + } + + public static void main(String[] args) { + int[] nums = {9,9,9}; + Solution s = new Solution(); + System.out.println(Arrays.toString(s.plusOne(nums))); + } +} diff --git a/Week_00/G20200343030017/leetcode/src/remove_duplicates_from_sorted_array/Solution.java b/Week_00/G20200343030017/leetcode/src/remove_duplicates_from_sorted_array/Solution.java new file mode 100644 index 00000000..42d424d0 --- /dev/null +++ b/Week_00/G20200343030017/leetcode/src/remove_duplicates_from_sorted_array/Solution.java @@ -0,0 +1,28 @@ +package remove_duplicates_from_sorted_array; +import java.util.Arrays; + +public class Solution { + public int removeDuplicates(int[] nums) { + int a = 0; + for (int n=0;n nums[n]){ + nums[n+1] = nums[j]; + a = a + 1; + break; + } + if (nums[j] == nums[nums.length-1]){ + return a+1; + } + } + } + return a+1; + } + + public static void main(String[] args) { + int[] a ={0,0,0}; + Solution s = new Solution(); + System.out.println(s.removeDuplicates(a)); + System.out.println(Arrays.toString(a)); + } +} diff --git a/Week_00/G20200343030017/leetcode/src/rotate_array/Solution.java b/Week_00/G20200343030017/leetcode/src/rotate_array/Solution.java new file mode 100644 index 00000000..7112a819 --- /dev/null +++ b/Week_00/G20200343030017/leetcode/src/rotate_array/Solution.java @@ -0,0 +1,24 @@ +package rotate_array; + +import java.util.Arrays; + +public class Solution { + public void rotate(int[] nums, int k) { + int temp = 0; + for (int n=0;n stack = new Stack<>(); + for (int n=0;n height[stack.peek()])){ + int wl = height[stack.pop()]; + if (stack.empty()){ + break; + } + water = water + (n-stack.peek()-1) * (Math.min(height[stack.peek()],height[n])-wl); + } + stack.push(n); + } + } + return water; + } + + public static void main(String[] args) { + //int[] nums = {0,1,0,2,1,0,1,3,2,1,2,1}; + int[] nums = {4,2,3}; + Solution s = new Solution(); + System.out.println(s.trap(nums)); + } +} diff --git a/Week_00/G20200343030017/leetcode/src/two_sum/Solution.java b/Week_00/G20200343030017/leetcode/src/two_sum/Solution.java new file mode 100644 index 00000000..ad57eff3 --- /dev/null +++ b/Week_00/G20200343030017/leetcode/src/two_sum/Solution.java @@ -0,0 +1,26 @@ +package two_sum; + +import java.util.Arrays; + +public class Solution { + public int[] twoSum(int[] nums, int target) { + int[] temp = new int[2]; + for (int a=0;a Date: Sat, 15 Feb 2020 12:15:13 +0800 Subject: [PATCH 0109/1268] =?UTF-8?q?Revert=20"=E9=83=AD=E8=BE=9B=E5=98=89?= =?UTF-8?q?=E7=AC=AC=E4=B8=80=E5=91=A8=E4=BD=9C=E4=B8=9A"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit bec65caa3b7782157b1026e7eb57de33022fb7ce. --- Week_00/G20200343030017/PriorityQueue.txt | 13 -- .../MyCircularDeque.java | 167 ------------------ .../src/merge_sorted_array/Solution.java | 33 ---- .../src/merge_two_sorted_lists/ListNode.java | 7 - .../src/merge_two_sorted_lists/Solution.java | 37 ---- .../leetcode/src/move_zeroes/Solution.java | 24 --- .../leetcode/src/plus_one/Solution.java | 26 --- .../Solution.java | 28 --- .../leetcode/src/rotate_array/Solution.java | 24 --- .../src/trapping_rain_water/Solution.java | 37 ---- .../leetcode/src/two_sum/Solution.java | 26 --- 11 files changed, 422 deletions(-) delete mode 100644 Week_00/G20200343030017/PriorityQueue.txt delete mode 100644 Week_00/G20200343030017/leetcode/src/design_circular_deque/MyCircularDeque.java delete mode 100644 Week_00/G20200343030017/leetcode/src/merge_sorted_array/Solution.java delete mode 100644 Week_00/G20200343030017/leetcode/src/merge_two_sorted_lists/ListNode.java delete mode 100644 Week_00/G20200343030017/leetcode/src/merge_two_sorted_lists/Solution.java delete mode 100644 Week_00/G20200343030017/leetcode/src/move_zeroes/Solution.java delete mode 100644 Week_00/G20200343030017/leetcode/src/plus_one/Solution.java delete mode 100644 Week_00/G20200343030017/leetcode/src/remove_duplicates_from_sorted_array/Solution.java delete mode 100644 Week_00/G20200343030017/leetcode/src/rotate_array/Solution.java delete mode 100644 Week_00/G20200343030017/leetcode/src/trapping_rain_water/Solution.java delete mode 100644 Week_00/G20200343030017/leetcode/src/two_sum/Solution.java diff --git a/Week_00/G20200343030017/PriorityQueue.txt b/Week_00/G20200343030017/PriorityQueue.txt deleted file mode 100644 index 28e45b70..00000000 --- a/Week_00/G20200343030017/PriorityQueue.txt +++ /dev/null @@ -1,13 +0,0 @@ -属性:初始容量 11 -可以从其他Collection转化为PriorityQueue -SortedSet可以直接转化为PriorityQueue,排序保持不变 - -initElementsFromCollection方法: -把Collection转化为一个数组,然后遍历,如果有空的抛出异常,所以PriorityQueue不允许空值 - -扩容:如果小于64 增加 2,如果大于64增加一倍 -增加节点:siftUp ,先增加到队列最后,然后与前面比较进行交换 -peek:不操作节点返回做前面节点 -indexOf:遍历找到指定索引的值,O(n) -删除节点:删除指定节点,siftdown,节点和它的子节点比较,交换位置,用于调整结点 -heapify:建堆,用siftdown调整 \ No newline at end of file diff --git a/Week_00/G20200343030017/leetcode/src/design_circular_deque/MyCircularDeque.java b/Week_00/G20200343030017/leetcode/src/design_circular_deque/MyCircularDeque.java deleted file mode 100644 index 0e19dda2..00000000 --- a/Week_00/G20200343030017/leetcode/src/design_circular_deque/MyCircularDeque.java +++ /dev/null @@ -1,167 +0,0 @@ -package design_circular_deque; - -import java.util.Arrays; - -public class MyCircularDeque { - int[] deque; - int k; - /** Initialize your data structure here. Set the size of the deque to be k. */ - public MyCircularDeque(int k) { - this.deque=new int[k]; - this.k = k; - for (int n=0;n nums2[b]? nums2[b++]:nums1[a++]; - c++; - } - if (a=0;n--){ - if (digits[n]==9){ - digits[n]=0; - }else{ - digits[n]=digits[n]+1; - return digits; - } - } - int[] temp = new int[digits.length+1]; - System.arraycopy(digits,0,temp,1,digits.length); - temp[0] = 1; - return temp; - } - - public static void main(String[] args) { - int[] nums = {9,9,9}; - Solution s = new Solution(); - System.out.println(Arrays.toString(s.plusOne(nums))); - } -} diff --git a/Week_00/G20200343030017/leetcode/src/remove_duplicates_from_sorted_array/Solution.java b/Week_00/G20200343030017/leetcode/src/remove_duplicates_from_sorted_array/Solution.java deleted file mode 100644 index 42d424d0..00000000 --- a/Week_00/G20200343030017/leetcode/src/remove_duplicates_from_sorted_array/Solution.java +++ /dev/null @@ -1,28 +0,0 @@ -package remove_duplicates_from_sorted_array; -import java.util.Arrays; - -public class Solution { - public int removeDuplicates(int[] nums) { - int a = 0; - for (int n=0;n nums[n]){ - nums[n+1] = nums[j]; - a = a + 1; - break; - } - if (nums[j] == nums[nums.length-1]){ - return a+1; - } - } - } - return a+1; - } - - public static void main(String[] args) { - int[] a ={0,0,0}; - Solution s = new Solution(); - System.out.println(s.removeDuplicates(a)); - System.out.println(Arrays.toString(a)); - } -} diff --git a/Week_00/G20200343030017/leetcode/src/rotate_array/Solution.java b/Week_00/G20200343030017/leetcode/src/rotate_array/Solution.java deleted file mode 100644 index 7112a819..00000000 --- a/Week_00/G20200343030017/leetcode/src/rotate_array/Solution.java +++ /dev/null @@ -1,24 +0,0 @@ -package rotate_array; - -import java.util.Arrays; - -public class Solution { - public void rotate(int[] nums, int k) { - int temp = 0; - for (int n=0;n stack = new Stack<>(); - for (int n=0;n height[stack.peek()])){ - int wl = height[stack.pop()]; - if (stack.empty()){ - break; - } - water = water + (n-stack.peek()-1) * (Math.min(height[stack.peek()],height[n])-wl); - } - stack.push(n); - } - } - return water; - } - - public static void main(String[] args) { - //int[] nums = {0,1,0,2,1,0,1,3,2,1,2,1}; - int[] nums = {4,2,3}; - Solution s = new Solution(); - System.out.println(s.trap(nums)); - } -} diff --git a/Week_00/G20200343030017/leetcode/src/two_sum/Solution.java b/Week_00/G20200343030017/leetcode/src/two_sum/Solution.java deleted file mode 100644 index ad57eff3..00000000 --- a/Week_00/G20200343030017/leetcode/src/two_sum/Solution.java +++ /dev/null @@ -1,26 +0,0 @@ -package two_sum; - -import java.util.Arrays; - -public class Solution { - public int[] twoSum(int[] nums, int target) { - int[] temp = new int[2]; - for (int a=0;a Date: Sat, 15 Feb 2020 12:33:38 +0800 Subject: [PATCH 0110/1268] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E5=91=A8=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_00/G20200343030017/PriorityQueue.txt | 13 ++ .../MyCircularDeque.java | 167 ++++++++++++++++++ .../src/merge_sorted_array/Solution.java | 33 ++++ .../src/merge_two_sorted_lists/ListNode.java | 7 + .../src/merge_two_sorted_lists/Solution.java | 37 ++++ .../leetcode/src/move_zeroes/Solution.java | 24 +++ .../leetcode/src/plus_one/Solution.java | 26 +++ .../Solution.java | 28 +++ .../leetcode/src/rotate_array/Solution.java | 24 +++ .../src/trapping_rain_water/Solution.java | 37 ++++ .../leetcode/src/two_sum/Solution.java | 26 +++ 11 files changed, 422 insertions(+) create mode 100644 Week_00/G20200343030017/PriorityQueue.txt create mode 100644 Week_00/G20200343030017/leetcode/src/design_circular_deque/MyCircularDeque.java create mode 100644 Week_00/G20200343030017/leetcode/src/merge_sorted_array/Solution.java create mode 100644 Week_00/G20200343030017/leetcode/src/merge_two_sorted_lists/ListNode.java create mode 100644 Week_00/G20200343030017/leetcode/src/merge_two_sorted_lists/Solution.java create mode 100644 Week_00/G20200343030017/leetcode/src/move_zeroes/Solution.java create mode 100644 Week_00/G20200343030017/leetcode/src/plus_one/Solution.java create mode 100644 Week_00/G20200343030017/leetcode/src/remove_duplicates_from_sorted_array/Solution.java create mode 100644 Week_00/G20200343030017/leetcode/src/rotate_array/Solution.java create mode 100644 Week_00/G20200343030017/leetcode/src/trapping_rain_water/Solution.java create mode 100644 Week_00/G20200343030017/leetcode/src/two_sum/Solution.java diff --git a/Week_00/G20200343030017/PriorityQueue.txt b/Week_00/G20200343030017/PriorityQueue.txt new file mode 100644 index 00000000..28e45b70 --- /dev/null +++ b/Week_00/G20200343030017/PriorityQueue.txt @@ -0,0 +1,13 @@ +属性:初始容量 11 +可以从其他Collection转化为PriorityQueue +SortedSet可以直接转化为PriorityQueue,排序保持不变 + +initElementsFromCollection方法: +把Collection转化为一个数组,然后遍历,如果有空的抛出异常,所以PriorityQueue不允许空值 + +扩容:如果小于64 增加 2,如果大于64增加一倍 +增加节点:siftUp ,先增加到队列最后,然后与前面比较进行交换 +peek:不操作节点返回做前面节点 +indexOf:遍历找到指定索引的值,O(n) +删除节点:删除指定节点,siftdown,节点和它的子节点比较,交换位置,用于调整结点 +heapify:建堆,用siftdown调整 \ No newline at end of file diff --git a/Week_00/G20200343030017/leetcode/src/design_circular_deque/MyCircularDeque.java b/Week_00/G20200343030017/leetcode/src/design_circular_deque/MyCircularDeque.java new file mode 100644 index 00000000..0e19dda2 --- /dev/null +++ b/Week_00/G20200343030017/leetcode/src/design_circular_deque/MyCircularDeque.java @@ -0,0 +1,167 @@ +package design_circular_deque; + +import java.util.Arrays; + +public class MyCircularDeque { + int[] deque; + int k; + /** Initialize your data structure here. Set the size of the deque to be k. */ + public MyCircularDeque(int k) { + this.deque=new int[k]; + this.k = k; + for (int n=0;n nums2[b]? nums2[b++]:nums1[a++]; + c++; + } + if (a=0;n--){ + if (digits[n]==9){ + digits[n]=0; + }else{ + digits[n]=digits[n]+1; + return digits; + } + } + int[] temp = new int[digits.length+1]; + System.arraycopy(digits,0,temp,1,digits.length); + temp[0] = 1; + return temp; + } + + public static void main(String[] args) { + int[] nums = {9,9,9}; + Solution s = new Solution(); + System.out.println(Arrays.toString(s.plusOne(nums))); + } +} diff --git a/Week_00/G20200343030017/leetcode/src/remove_duplicates_from_sorted_array/Solution.java b/Week_00/G20200343030017/leetcode/src/remove_duplicates_from_sorted_array/Solution.java new file mode 100644 index 00000000..42d424d0 --- /dev/null +++ b/Week_00/G20200343030017/leetcode/src/remove_duplicates_from_sorted_array/Solution.java @@ -0,0 +1,28 @@ +package remove_duplicates_from_sorted_array; +import java.util.Arrays; + +public class Solution { + public int removeDuplicates(int[] nums) { + int a = 0; + for (int n=0;n nums[n]){ + nums[n+1] = nums[j]; + a = a + 1; + break; + } + if (nums[j] == nums[nums.length-1]){ + return a+1; + } + } + } + return a+1; + } + + public static void main(String[] args) { + int[] a ={0,0,0}; + Solution s = new Solution(); + System.out.println(s.removeDuplicates(a)); + System.out.println(Arrays.toString(a)); + } +} diff --git a/Week_00/G20200343030017/leetcode/src/rotate_array/Solution.java b/Week_00/G20200343030017/leetcode/src/rotate_array/Solution.java new file mode 100644 index 00000000..7112a819 --- /dev/null +++ b/Week_00/G20200343030017/leetcode/src/rotate_array/Solution.java @@ -0,0 +1,24 @@ +package rotate_array; + +import java.util.Arrays; + +public class Solution { + public void rotate(int[] nums, int k) { + int temp = 0; + for (int n=0;n stack = new Stack<>(); + for (int n=0;n height[stack.peek()])){ + int wl = height[stack.pop()]; + if (stack.empty()){ + break; + } + water = water + (n-stack.peek()-1) * (Math.min(height[stack.peek()],height[n])-wl); + } + stack.push(n); + } + } + return water; + } + + public static void main(String[] args) { + //int[] nums = {0,1,0,2,1,0,1,3,2,1,2,1}; + int[] nums = {4,2,3}; + Solution s = new Solution(); + System.out.println(s.trap(nums)); + } +} diff --git a/Week_00/G20200343030017/leetcode/src/two_sum/Solution.java b/Week_00/G20200343030017/leetcode/src/two_sum/Solution.java new file mode 100644 index 00000000..ad57eff3 --- /dev/null +++ b/Week_00/G20200343030017/leetcode/src/two_sum/Solution.java @@ -0,0 +1,26 @@ +package two_sum; + +import java.util.Arrays; + +public class Solution { + public int[] twoSum(int[] nums, int target) { + int[] temp = new int[2]; + for (int a=0;a Date: Sat, 15 Feb 2020 12:38:10 +0800 Subject: [PATCH 0111/1268] =?UTF-8?q?=E9=83=AD=E8=BE=9B=E5=98=89=E7=AC=AC?= =?UTF-8?q?=E4=B8=80=E5=91=A8=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- {Week_00 => Week_01}/G20200343030017/PriorityQueue.txt | 0 .../leetcode/src/design_circular_deque/MyCircularDeque.java | 0 .../G20200343030017/leetcode/src/merge_sorted_array/Solution.java | 0 .../leetcode/src/merge_two_sorted_lists/ListNode.java | 0 .../leetcode/src/merge_two_sorted_lists/Solution.java | 0 .../G20200343030017/leetcode/src/move_zeroes/Solution.java | 0 .../G20200343030017/leetcode/src/plus_one/Solution.java | 0 .../src/remove_duplicates_from_sorted_array/Solution.java | 0 .../G20200343030017/leetcode/src/rotate_array/Solution.java | 0 .../leetcode/src/trapping_rain_water/Solution.java | 0 .../G20200343030017/leetcode/src/two_sum/Solution.java | 0 11 files changed, 0 insertions(+), 0 deletions(-) rename {Week_00 => Week_01}/G20200343030017/PriorityQueue.txt (100%) rename {Week_00 => Week_01}/G20200343030017/leetcode/src/design_circular_deque/MyCircularDeque.java (100%) rename {Week_00 => Week_01}/G20200343030017/leetcode/src/merge_sorted_array/Solution.java (100%) rename {Week_00 => Week_01}/G20200343030017/leetcode/src/merge_two_sorted_lists/ListNode.java (100%) rename {Week_00 => Week_01}/G20200343030017/leetcode/src/merge_two_sorted_lists/Solution.java (100%) rename {Week_00 => Week_01}/G20200343030017/leetcode/src/move_zeroes/Solution.java (100%) rename {Week_00 => Week_01}/G20200343030017/leetcode/src/plus_one/Solution.java (100%) rename {Week_00 => Week_01}/G20200343030017/leetcode/src/remove_duplicates_from_sorted_array/Solution.java (100%) rename {Week_00 => Week_01}/G20200343030017/leetcode/src/rotate_array/Solution.java (100%) rename {Week_00 => Week_01}/G20200343030017/leetcode/src/trapping_rain_water/Solution.java (100%) rename {Week_00 => Week_01}/G20200343030017/leetcode/src/two_sum/Solution.java (100%) diff --git a/Week_00/G20200343030017/PriorityQueue.txt b/Week_01/G20200343030017/PriorityQueue.txt similarity index 100% rename from Week_00/G20200343030017/PriorityQueue.txt rename to Week_01/G20200343030017/PriorityQueue.txt diff --git a/Week_00/G20200343030017/leetcode/src/design_circular_deque/MyCircularDeque.java b/Week_01/G20200343030017/leetcode/src/design_circular_deque/MyCircularDeque.java similarity index 100% rename from Week_00/G20200343030017/leetcode/src/design_circular_deque/MyCircularDeque.java rename to Week_01/G20200343030017/leetcode/src/design_circular_deque/MyCircularDeque.java diff --git a/Week_00/G20200343030017/leetcode/src/merge_sorted_array/Solution.java b/Week_01/G20200343030017/leetcode/src/merge_sorted_array/Solution.java similarity index 100% rename from Week_00/G20200343030017/leetcode/src/merge_sorted_array/Solution.java rename to Week_01/G20200343030017/leetcode/src/merge_sorted_array/Solution.java diff --git a/Week_00/G20200343030017/leetcode/src/merge_two_sorted_lists/ListNode.java b/Week_01/G20200343030017/leetcode/src/merge_two_sorted_lists/ListNode.java similarity index 100% rename from Week_00/G20200343030017/leetcode/src/merge_two_sorted_lists/ListNode.java rename to Week_01/G20200343030017/leetcode/src/merge_two_sorted_lists/ListNode.java diff --git a/Week_00/G20200343030017/leetcode/src/merge_two_sorted_lists/Solution.java b/Week_01/G20200343030017/leetcode/src/merge_two_sorted_lists/Solution.java similarity index 100% rename from Week_00/G20200343030017/leetcode/src/merge_two_sorted_lists/Solution.java rename to Week_01/G20200343030017/leetcode/src/merge_two_sorted_lists/Solution.java diff --git a/Week_00/G20200343030017/leetcode/src/move_zeroes/Solution.java b/Week_01/G20200343030017/leetcode/src/move_zeroes/Solution.java similarity index 100% rename from Week_00/G20200343030017/leetcode/src/move_zeroes/Solution.java rename to Week_01/G20200343030017/leetcode/src/move_zeroes/Solution.java diff --git a/Week_00/G20200343030017/leetcode/src/plus_one/Solution.java b/Week_01/G20200343030017/leetcode/src/plus_one/Solution.java similarity index 100% rename from Week_00/G20200343030017/leetcode/src/plus_one/Solution.java rename to Week_01/G20200343030017/leetcode/src/plus_one/Solution.java diff --git a/Week_00/G20200343030017/leetcode/src/remove_duplicates_from_sorted_array/Solution.java b/Week_01/G20200343030017/leetcode/src/remove_duplicates_from_sorted_array/Solution.java similarity index 100% rename from Week_00/G20200343030017/leetcode/src/remove_duplicates_from_sorted_array/Solution.java rename to Week_01/G20200343030017/leetcode/src/remove_duplicates_from_sorted_array/Solution.java diff --git a/Week_00/G20200343030017/leetcode/src/rotate_array/Solution.java b/Week_01/G20200343030017/leetcode/src/rotate_array/Solution.java similarity index 100% rename from Week_00/G20200343030017/leetcode/src/rotate_array/Solution.java rename to Week_01/G20200343030017/leetcode/src/rotate_array/Solution.java diff --git a/Week_00/G20200343030017/leetcode/src/trapping_rain_water/Solution.java b/Week_01/G20200343030017/leetcode/src/trapping_rain_water/Solution.java similarity index 100% rename from Week_00/G20200343030017/leetcode/src/trapping_rain_water/Solution.java rename to Week_01/G20200343030017/leetcode/src/trapping_rain_water/Solution.java diff --git a/Week_00/G20200343030017/leetcode/src/two_sum/Solution.java b/Week_01/G20200343030017/leetcode/src/two_sum/Solution.java similarity index 100% rename from Week_00/G20200343030017/leetcode/src/two_sum/Solution.java rename to Week_01/G20200343030017/leetcode/src/two_sum/Solution.java From e5e66204a5e3fbf64c0bbc5a54b62b137eab6a44 Mon Sep 17 00:00:00 2001 From: Kidand Date: Sat, 15 Feb 2020 13:52:52 +0800 Subject: [PATCH 0112/1268] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E5=91=A8=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030413/LeetCode_001_413.java | 32 +++++++++++++++++++ Week_01/G20200343030413/LeetCode_283_413.java | 29 +++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 Week_01/G20200343030413/LeetCode_001_413.java create mode 100644 Week_01/G20200343030413/LeetCode_283_413.java diff --git a/Week_01/G20200343030413/LeetCode_001_413.java b/Week_01/G20200343030413/LeetCode_001_413.java new file mode 100644 index 00000000..b6b17370 --- /dev/null +++ b/Week_01/G20200343030413/LeetCode_001_413.java @@ -0,0 +1,32 @@ +package com.kidand.homework; + +import java.util.HashMap; +/** +* +* ██╗ ██╗██╗██████╗ █████╗ ███╗ ██╗██████╗ +* ██║ ██╔╝██║██╔══██╗██╔══██╗████╗ ██║██╔══██╗ +* █████╔╝ ██║██║ ██║███████║██╔██╗ ██║██║ ██║ +* ██╔═██╗ ██║██║ ██║██╔══██║██║╚██╗██║██║ ██║ +* ██║ ██╗██║██████╔╝██║ ██║██║ ╚████║██████╔╝ +* ╚═╝ ╚═╝╚═╝╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝╚═════╝ +* +* @description:LeetCode_001_413 两数之和 +* @author: Kidand +* @date: 2020/2/15 1:42 下午 +* Copyright © 2019-Kidand. +*/ +public class LeetCode_001_413 { + public int[] twoSum(int[] nums, int target) { + HashMap map = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + // 将原本为两个目标值切换为一个目标值,只需要每次从 map 中寻找目标值即可 + int num = target - nums[i]; + if (map.containsKey(num)) { + return new int[]{map.get(num), i}; + } + // 每次遍历过的值都存储到 map 中,这样之后就能从 map 中寻找需要的目标值 + map.put(nums[i], i); + } + return null; + } +} diff --git a/Week_01/G20200343030413/LeetCode_283_413.java b/Week_01/G20200343030413/LeetCode_283_413.java new file mode 100644 index 00000000..1d22e88f --- /dev/null +++ b/Week_01/G20200343030413/LeetCode_283_413.java @@ -0,0 +1,29 @@ +package com.kidand.homework; +/** +* +* ██╗ ██╗██╗██████╗ █████╗ ███╗ ██╗██████╗ +* ██║ ██╔╝██║██╔══██╗██╔══██╗████╗ ██║██╔══██╗ +* █████╔╝ ██║██║ ██║███████║██╔██╗ ██║██║ ██║ +* ██╔═██╗ ██║██║ ██║██╔══██║██║╚██╗██║██║ ██║ +* ██║ ██╗██║██████╔╝██║ ██║██║ ╚████║██████╔╝ +* ╚═╝ ╚═╝╚═╝╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝╚═════╝ +* +* @description:LeetCode_283_413 移动零 +* @author: Kidand +* @date: 2020/2/15 1:42 下午 +* Copyright © 2019-Kidand. +*/ +public class LeetCode_283_413 { + public void moveZeroes(int[] nums) { + for(int i=0,count=0;i Date: Sat, 15 Feb 2020 14:28:33 +0800 Subject: [PATCH 0113/1268] hw for week1 --- ...44\346\225\260\344\271\213\345\222\214.py" | 18 +++ ...13\350\275\254\346\225\260\347\273\204.py" | 20 ++++ ...04\351\207\215\345\244\215\351\241\271.py" | 29 +++++ ...3.\347\247\273\345\212\250\351\233\266.py" | 41 +++++++ ...2.\346\216\245\351\233\250\346\260\264.py" | 27 +++++ ...14\347\253\257\351\230\237\345\210\227.py" | 104 ++++++++++++++++++ 6 files changed, 239 insertions(+) create mode 100644 "Week_01/G20200343030445/1.\344\270\244\346\225\260\344\271\213\345\222\214.py" create mode 100644 "Week_01/G20200343030445/189.\346\227\213\350\275\254\346\225\260\347\273\204.py" create mode 100644 "Week_01/G20200343030445/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.py" create mode 100644 "Week_01/G20200343030445/283.\347\247\273\345\212\250\351\233\266.py" create mode 100644 "Week_01/G20200343030445/42.\346\216\245\351\233\250\346\260\264.py" create mode 100644 "Week_01/G20200343030445/641.\350\256\276\350\256\241\345\276\252\347\216\257\345\217\214\347\253\257\351\230\237\345\210\227.py" diff --git "a/Week_01/G20200343030445/1.\344\270\244\346\225\260\344\271\213\345\222\214.py" "b/Week_01/G20200343030445/1.\344\270\244\346\225\260\344\271\213\345\222\214.py" new file mode 100644 index 00000000..47ea7ea2 --- /dev/null +++ "b/Week_01/G20200343030445/1.\344\270\244\346\225\260\344\271\213\345\222\214.py" @@ -0,0 +1,18 @@ +# +# @lc app=leetcode.cn id=1 lang=python3 +# +# [1] 两数之和 +# + +# @lc code=start +class Solution: + def twoSum(self, nums: List[int], target: int) -> List[int]: + d = {} + for i in range(len(nums)): + if nums[i] in d: + return [d[nums[i]], i] + else: + d[target - nums[i]] = i + +# @lc code=end + diff --git "a/Week_01/G20200343030445/189.\346\227\213\350\275\254\346\225\260\347\273\204.py" "b/Week_01/G20200343030445/189.\346\227\213\350\275\254\346\225\260\347\273\204.py" new file mode 100644 index 00000000..64bf4a30 --- /dev/null +++ "b/Week_01/G20200343030445/189.\346\227\213\350\275\254\346\225\260\347\273\204.py" @@ -0,0 +1,20 @@ +# +# @lc app=leetcode.cn id=189 lang=python3 +# +# [189] 旋转数组 +# + +# @lc code=start +class Solution: + def rotate(self, nums: List[int], k: int) -> None: + """ + Do not return anything, modify nums in-place instead. + """ + k %= len(nums) + nums.reverse() + nums[0:k] = nums[0:k][::-1] + nums[k:] = nums[k:][::-1] + + +# @lc code=end + diff --git "a/Week_01/G20200343030445/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.py" "b/Week_01/G20200343030445/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.py" new file mode 100644 index 00000000..3b55c98f --- /dev/null +++ "b/Week_01/G20200343030445/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.py" @@ -0,0 +1,29 @@ +# +# @lc app=leetcode.cn id=26 lang=python3 +# +# [26] 删除排序数组中的重复项 +# + +# @lc code=start +class Solution: + def removeDuplicates(self, nums: List[int]) -> int: + ptr = 0 + ptr2 = 0 + count = 0 + while ptr < len(nums): + curr = nums[ptr] + count += 1 + ptr2 += 1 + + while ptr2 < len(nums) and nums[ptr2] == curr: + ptr2 += 1 + + ptr += 1 + if ptr >= len(nums) or ptr2 >= len(nums): + break + + nums[ptr] = nums[ptr2] + + return count +# @lc code=end + diff --git "a/Week_01/G20200343030445/283.\347\247\273\345\212\250\351\233\266.py" "b/Week_01/G20200343030445/283.\347\247\273\345\212\250\351\233\266.py" new file mode 100644 index 00000000..3e7d19a2 --- /dev/null +++ "b/Week_01/G20200343030445/283.\347\247\273\345\212\250\351\233\266.py" @@ -0,0 +1,41 @@ +# +# @lc app=leetcode.cn id=283 lang=python3 +# +# [283] 移动零 +# + +# @lc code=start +class Solution: + def moveZeroes(self, nums: List[int]) -> None: + """ + Do not return anything, modify nums in-place instead. + """ + + n = len(nums) + if (n <= 1): + return nums + + # # bubble sort version + # for i in range(n): + # # 提前退出冒泡循环的标志位 + # flag = False + # for j in range(n-i-1): + # if (nums[j] == 0 and nums[j+1] != 0): + # nums[j], nums[j+1] = nums[j+1], nums[j] + # flag = True + # if not flag: + # break + + # insertion sort version + for i in range(1, n): + value = nums[i] + j = i - 1 + while j >= 0 and nums[j] == 0 and value != 0: + nums[j+1] = nums[j] + j -= 1 + nums[j+1] = value + + return nums + +# @lc code=end + diff --git "a/Week_01/G20200343030445/42.\346\216\245\351\233\250\346\260\264.py" "b/Week_01/G20200343030445/42.\346\216\245\351\233\250\346\260\264.py" new file mode 100644 index 00000000..de6a3cea --- /dev/null +++ "b/Week_01/G20200343030445/42.\346\216\245\351\233\250\346\260\264.py" @@ -0,0 +1,27 @@ +# +# @lc app=leetcode.cn id=42 lang=python3 +# +# [42] 接雨水 +# + +# @lc code=start +class Solution: + def trap(self, height: List[int]) -> int: + output = 0 + stack = [] + ptr = 0 + while ptr < len(height): + while len(stack) > 0 and height[ptr] > height[stack[-1]]: + tmp = height[stack[-1]] + stack.pop() + if len(stack)==0: + break + distance = ptr - stack[-1] - 1 + output += distance * (min(height[stack[-1]], height[ptr]) - tmp) + stack.append(ptr) + ptr += 1 + return output + + +# @lc code=end + diff --git "a/Week_01/G20200343030445/641.\350\256\276\350\256\241\345\276\252\347\216\257\345\217\214\347\253\257\351\230\237\345\210\227.py" "b/Week_01/G20200343030445/641.\350\256\276\350\256\241\345\276\252\347\216\257\345\217\214\347\253\257\351\230\237\345\210\227.py" new file mode 100644 index 00000000..6e1fc348 --- /dev/null +++ "b/Week_01/G20200343030445/641.\350\256\276\350\256\241\345\276\252\347\216\257\345\217\214\347\253\257\351\230\237\345\210\227.py" @@ -0,0 +1,104 @@ +# +# @lc app=leetcode.cn id=641 lang=python3 +# +# [641] 设计循环双端队列 +# + +# @lc code=start +from collections import deque +class MyCircularDeque: + + def __init__(self, k: int): + """ + Initialize your data structure here. Set the size of the deque to be k. + """ + self.size = k + self.q = deque() + + + + def insertFront(self, value: int) -> bool: + """ + Adds an item at the front of Deque. Return true if the operation is successful. + """ + if len(self.q) >= self.size: + return False + self.q.appendleft(value) + return True + + + def insertLast(self, value: int) -> bool: + """ + Adds an item at the rear of Deque. Return true if the operation is successful. + """ + if len(self.q) >= self.size: + return False + self.q.append(value) + return True + + + def deleteFront(self) -> bool: + """ + Deletes an item from the front of Deque. Return true if the operation is successful. + """ + if len(self.q) == 0: + return False + self.q.popleft() + return True + + + def deleteLast(self) -> bool: + """ + Deletes an item from the rear of Deque. Return true if the operation is successful. + """ + if len(self.q) == 0: + return False + self.q.pop() + return True + + + def getFront(self) -> int: + """ + Get the front item from the deque. + """ + if len(self.q) == 0: + return -1 + return self.q[0] + + + def getRear(self) -> int: + """ + Get the last item from the deque. + """ + if len(self.q) == 0: + return -1 + return self.q[-1] + + + def isEmpty(self) -> bool: + """ + Checks whether the circular deque is empty or not. + """ + return len(self.q) == 0 + + + def isFull(self) -> bool: + """ + Checks whether the circular deque is full or not. + """ + return len(self.q) == self.size + + + +# Your MyCircularDeque object will be instantiated and called as such: +# obj = MyCircularDeque(k) +# param_1 = obj.insertFront(value) +# param_2 = obj.insertLast(value) +# param_3 = obj.deleteFront() +# param_4 = obj.deleteLast() +# param_5 = obj.getFront() +# param_6 = obj.getRear() +# param_7 = obj.isEmpty() +# param_8 = obj.isFull() +# @lc code=end + From 8876db5f460925807cbbefb028f35334973a8706 Mon Sep 17 00:00:00 2001 From: timmy Date: Sat, 15 Feb 2020 16:25:57 +0800 Subject: [PATCH 0114/1268] 409-week 01 --- Week_01/G20200343030409/LeetCode_189_409.java | 26 ++++++ Week_01/G20200343030409/LeetCode_1_409.java | 23 ++++++ Week_01/G20200343030409/LeetCode_21_409.java | 41 ++++++++++ Week_01/G20200343030409/LeetCode_26_409.java | 16 ++++ Week_01/G20200343030409/LeetCode_283_409.java | 18 +++++ Week_01/G20200343030409/LeetCode_42_409.java | 35 ++++++++ Week_01/G20200343030409/LeetCode_641_409.java | 80 +++++++++++++++++++ Week_01/G20200343030409/LeetCode_66_409.java | 33 ++++++++ Week_01/G20200343030409/LeetCode_88_409.java | 24 ++++++ 9 files changed, 296 insertions(+) create mode 100644 Week_01/G20200343030409/LeetCode_189_409.java create mode 100644 Week_01/G20200343030409/LeetCode_1_409.java create mode 100644 Week_01/G20200343030409/LeetCode_21_409.java create mode 100644 Week_01/G20200343030409/LeetCode_26_409.java create mode 100644 Week_01/G20200343030409/LeetCode_283_409.java create mode 100644 Week_01/G20200343030409/LeetCode_42_409.java create mode 100644 Week_01/G20200343030409/LeetCode_641_409.java create mode 100644 Week_01/G20200343030409/LeetCode_66_409.java create mode 100644 Week_01/G20200343030409/LeetCode_88_409.java diff --git a/Week_01/G20200343030409/LeetCode_189_409.java b/Week_01/G20200343030409/LeetCode_189_409.java new file mode 100644 index 00000000..8e508dd7 --- /dev/null +++ b/Week_01/G20200343030409/LeetCode_189_409.java @@ -0,0 +1,26 @@ +/* + it's really magic... + 1. reverse entire array + 2. reverse the partial array of 0 ~ k-1 + 3. reverse the partial array of k ~ end + 4. it's the answer + + time complexity: O(n), space complexity: O(1) + +*/ +class Solution { + public void rotate(int[] nums, int k) { + int len = nums.length; + k %= len; + reverse(nums, 0, len - 1); + reverse(nums, 0, k -1); + reverse(nums, k, len - 1); + } + private void reverse(int[] nums, int start, int end) { + while (start < end) { + int temp = nums[start]; + nums[start++] = nums[end]; + nums[end--] = temp; + } + } +} \ No newline at end of file diff --git a/Week_01/G20200343030409/LeetCode_1_409.java b/Week_01/G20200343030409/LeetCode_1_409.java new file mode 100644 index 00000000..f9730536 --- /dev/null +++ b/Week_01/G20200343030409/LeetCode_1_409.java @@ -0,0 +1,23 @@ +/* + in order to nums[0] + nums[1] = 2 + 7 = 9, return [0, 1]. + use hashmap to store each number + find target - num in hashmap, that's the answer: (now index, hashmap's index) + + time complexity: O(n), space complexity: O(n) + +*/ +class Solution { + public int[] twoSum(int nums[], int target) { + Map map = new HashMap<>(); + + for (int i = 0; i < nums.length; i++) { + int num = nums[i]; + + if (map.containsKey(target - num)) { + return new int[]{map.get(target - num), i}; + } + map.put(num, i); + } + return new int[]{}; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030409/LeetCode_21_409.java b/Week_01/G20200343030409/LeetCode_21_409.java new file mode 100644 index 00000000..edda7f76 --- /dev/null +++ b/Week_01/G20200343030409/LeetCode_21_409.java @@ -0,0 +1,41 @@ + +// recursion +// time complexity: O(n+m), space complexity: O(n+m) +class Solution { + public ListNode mergeTwoLists(ListNode l1, ListNode l2) { + if (l1 == null) return l2; + if (l2 == null) return l1; + if (l1.val <= l2.val) { + l1.next = mergeTwoLists(l1.next, l2); + return l1; + } else { + l2.next = mergeTwoLists(l1, l2.next); + return l2; + } + } +} + +// iteration +// time complexity: O(n+m), space complexity: O(1) +class Solution { + public ListNode mergeTwoLists(ListNode list1, ListNode list2) { + ListNode prevHead = new ListNode(-1); + + ListNode prev = prevHead; + + while (list1 != null && list2 != null) { + if (list1.val < list2.val) { + prev.next = list1; + list1 = list1.next; + } else { + prev.next = list2; + list2 = list2.next; + } + prev = prev.next; + } + + prev.next = (list1 == null) ? list2 : list1; + + return prevHead.next; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030409/LeetCode_26_409.java b/Week_01/G20200343030409/LeetCode_26_409.java new file mode 100644 index 00000000..8b6f449f --- /dev/null +++ b/Week_01/G20200343030409/LeetCode_26_409.java @@ -0,0 +1,16 @@ +// time complexity: O(n), space complexity: O(1) + +class Solution { + public int removeDuplicates(int[] nums) { + int size = 0; + if (nums == null) return size; + + for (int num : nums) { + if(nums[size] != num) { + nums[++size] = num; // only need to know the size at last + } + } + + return size+1; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030409/LeetCode_283_409.java b/Week_01/G20200343030409/LeetCode_283_409.java new file mode 100644 index 00000000..7d397f47 --- /dev/null +++ b/Week_01/G20200343030409/LeetCode_283_409.java @@ -0,0 +1,18 @@ +/* + time complexity: O(n), space complexity: O(1) + */ +class Solution { + public static void moveZeroes(int[] nums) { + int leftMostZeroIndex = 0; // The index of the leftmost zero + for (int i = 0; i < nums.length; i++) { + if (nums[i] != 0) { + if (i > leftMostZeroIndex) { // There are zero(s) on the left side of the current non-zero number, swap! + nums[leftMostZeroIndex] = nums[i]; //do swap!! so smart + nums[i] = 0; + } + + leftMostZeroIndex++; // notice this poistion here + } + } + } +} \ No newline at end of file diff --git a/Week_01/G20200343030409/LeetCode_42_409.java b/Week_01/G20200343030409/LeetCode_42_409.java new file mode 100644 index 00000000..4f2cb4e8 --- /dev/null +++ b/Week_01/G20200343030409/LeetCode_42_409.java @@ -0,0 +1,35 @@ +/* + using stack to record index + when should we caculate area? => when current height > stack's top elemnt height + + time complexity: O(n), space complexity: O(n) stack's size + */ +class Solution { + public int trap(int[] height) { + if (height == null) return 0; + + Stack s = new Stack<>(); // stack stores index + int curr = 0; // current index + int maxWater = 0; // result + + while (curr < height.length) { + // stack is empty ot current <= stack top, push current + if (s.isEmpty() || height[curr] <= height[s.peek()]) { + s.push(curr++); + } else { + int top = s.pop(); // current height > stack top's height, pop current + int water = 0; + + if (!s.isEmpty()) { //stack is not empty, then we caculate area + int distance = curr - s.peek() - 1; + int minHeight = Math.min(height[s.peek()], height[curr]) - height[top]; // find the offset with 1. lowest height between curr and stack top's height, 2. pop's element hight + water = distance * minHeight; + } + //stack is empty, water is 0 + + maxWater += water; + } + } + return maxWater; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030409/LeetCode_641_409.java b/Week_01/G20200343030409/LeetCode_641_409.java new file mode 100644 index 00000000..b9f074fb --- /dev/null +++ b/Week_01/G20200343030409/LeetCode_641_409.java @@ -0,0 +1,80 @@ +class MyCircularDeque { + + int[] circularDeque; + int front, rear, cap; + + /** Initialize your data structure here. Set the size of the deque to be k. */ + public MyCircularDeque(int k) { + circularDeque = new int[k + 1]; + front = 0; + rear = 0; + cap = k + 1; + } + + /** Adds an item at the front of Deque. Return true if the operation is successful. */ + public boolean insertFront(int value) { + if(isFull()) return false; + + circularDeque[front] = value; + front = (front + 1) % cap; + return true; + } + + /** Adds an item at the rear of Deque. Return true if the operation is successful. */ + public boolean insertLast(int value) { + if(isFull()) return false; + + rear = (rear - 1 + cap) % cap; + circularDeque[rear] = value; + return true; + } + + /** Deletes an item from the front of Deque. Return true if the operation is successful. */ + public boolean deleteFront() { + if(isEmpty()) return false; + + front = (front - 1 + cap) % cap; + return true; + } + + /** Deletes an item from the rear of Deque. Return true if the operation is successful. */ + public boolean deleteLast() { + if(isEmpty()) return false; + + rear = (rear + 1) % cap; + return true; + } + + /** Get the front item from the deque. */ + public int getFront() { + return isEmpty() ? -1 : circularDeque[(front - 1 + cap) % cap]; + } + + /** Get the last item from the deque. */ + public int getRear() { + return isEmpty() ? -1 : circularDeque[rear]; + } + + /** Checks whether the circular deque is empty or not. */ + public boolean isEmpty() { + return front == rear; + } + + /** Checks whether the circular deque is full or not. */ + public boolean isFull() { + return (front + 1) % cap == rear; + } +} + +/** + * Your MyCircularDeque object will be instantiated and called as such: + * MyCircularDeque obj = new MyCircularDeque(k); + * boolean param_1 = obj.insertFront(value); + * boolean param_2 = obj.insertLast(value); + * boolean param_3 = obj.deleteFront(); + * boolean param_4 = obj.deleteLast(); + * int param_5 = obj.getFront(); + * int param_6 = obj.getRear(); + * boolean param_7 = obj.isEmpty(); + * boolean param_8 = obj.isFull(); + */ \ No newline at end of file diff --git a/Week_01/G20200343030409/LeetCode_66_409.java b/Week_01/G20200343030409/LeetCode_66_409.java new file mode 100644 index 00000000..2febdf6c --- /dev/null +++ b/Week_01/G20200343030409/LeetCode_66_409.java @@ -0,0 +1,33 @@ +class Solution { + /* + 998 + 999 + 899 + 119 + 111 + Observing these numbers, we will find only 9 + 1 will carry to next digits + and become 0 + + 1. so if any digit pluses one and doesnt carry, it's answer + 2. or keep doing next digit + 3. if loop all for loop, it means it's a all 9 digits number, add one more leading digit one in the index 0 of result + + time complexity: O(n), space complexity: O(n) ans's size + */ + public int[] plusOne(int[] digits) { + + int len = digits.length; + for (int i = len - 1; i >= 0 ; i--) { + if (digits[i] < 9) { + digits[i]++; + return digits; + } + digits[i] = 0; + } + + int result[] = new int[len+1]; + result[0] = 1; + + return result; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030409/LeetCode_88_409.java b/Week_01/G20200343030409/LeetCode_88_409.java new file mode 100644 index 00000000..a580e915 --- /dev/null +++ b/Week_01/G20200343030409/LeetCode_88_409.java @@ -0,0 +1,24 @@ +/* +1. use two pointer +2. there is a enough space of nums1 to put nums1's data and nums2's data, + so create a m+n index to store the result +3. compare element from array's last, and then put them to m+n nums1's from last index +4. at last, if nums2 still has element, put them all into nums1 + + time complexity: O(n), space complexity: O(1) + +*/ +class Solution { + public void merge(int[] nums1, int m, int[] nums2, int n) { + + int p1 = m - 1; + int p2 = n - 1; + int p = m + n - 1; + while (p1 >= 0 && p2 >= 0) { + nums1[p--] = nums1[p1] < nums2[p2] ? nums2[p2--] : nums1[p1--]; + } + while (p2 >= 0) { + nums1[p--] = nums2[p2--]; + } + } +} \ No newline at end of file From 7ad3a2a3a8a9e291d4b4f38884a77ba1b97b7fbf Mon Sep 17 00:00:00 2001 From: matwming Date: Sat, 15 Feb 2020 20:47:20 +1100 Subject: [PATCH 0115/1268] 425 finished week 1 --- .idea/.gitignore | 2 + .../LeetCode_01_425/LeetCode_01_425.js | 72 +++++++++++++++++++ .../LeetCode_26_425/LeetCode_26_425.js | 67 +++++++++++++++++ 3 files changed, 141 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 Week_01/G20200343030425/LeetCode_01_425/LeetCode_01_425.js create mode 100644 Week_01/G20200343030425/LeetCode_26_425/LeetCode_26_425.js diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..e7e9d11d --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,2 @@ +# Default ignored files +/workspace.xml diff --git a/Week_01/G20200343030425/LeetCode_01_425/LeetCode_01_425.js b/Week_01/G20200343030425/LeetCode_01_425/LeetCode_01_425.js new file mode 100644 index 00000000..9a9a114d --- /dev/null +++ b/Week_01/G20200343030425/LeetCode_01_425/LeetCode_01_425.js @@ -0,0 +1,72 @@ +/* + |address: https://leetcode-cn.com/problems/two-sum/ + |-------------------------------------------------- + | Question: Given an array of integers, + | return indices of the two numbers such that they add up to a specific target. + |-------------------------------------------------- + */ +const nums = [3, 2, 3]; +const target = 6; //should return [0,1] +/** + |-------------------------------------------------- + | Method 1: + |-------------------------------------------------- + */ +const removeDuplicate = array => { + array.sort((a, b) => a - b); + array.forEach((el, index) => { + if (array[index] === array[index + 1]) { + array.splice(index, 1); + } + }); + return array; +}; +const twoSum = (nums, target) => { + let first = ""; + let sortNums = removeDuplicate([...nums]); + for (let i = 0; i < sortNums.length; i++) { + if (nums.includes(target - sortNums[i])) { + first = sortNums[i]; + break; + } + } + let second = target - first; + let secondIndex = nums.lastIndexOf(second); + let firstIndex = nums.findIndex(el => el === first); + + return [firstIndex, secondIndex]; +}; +console.log(twoSum(nums, target)); +/** + |-------------------------------------------------- + | Method 2: use Map + |-------------------------------------------------- + */ +const twoSum_v2 = function(nums, target) { + const map = new Map(); + for (let i = 0; i < nums.length; i++) { + const otherIndex = map.get(target - nums[i]); + if (otherIndex !== undefined) return [otherIndex, i]; + map.set(nums[i], i); + console.log("map", map); + } +}; +twoSum_v2(nums, target); + +/* +* Method 3: using two loops => two pointers +* */ +const twoSum3=(nums,target)=>{ + let a=0; + let b=0; + for (let i = 0; i { + let checkDuplicateArray = []; + array.forEach((el, index) => { + if (array[index] === array[index + 1]) { + checkDuplicateArray.push(el); + } + }); + return checkDuplicateArray.length; +}; +const removeDuplicate = array => { + array.sort((a, b) => a - b); + array.forEach((el, index) => { + if (array[index] === array[index + 1]) { + array.splice(index, 1); + } + }); + if (checkDuplicate(array) > 0) { + removeDuplicate(array); + } + return array; +}; +//console.log(removeDuplicate(nums)); + + +/* +* Method 2: 快慢指针 +* */ +const removeDuplicate4 = (nums) => { + if (nums.length === 0) return 0; + let i = 0; + for (let j = 1; j < nums.length; j++) { + if (nums[j] !== nums[i]) { + i++; + nums[i] = nums[j]; + } + } + while (nums.length !== i + 1) { + nums.splice(i + 1, 1) + } + return i + 1; +}; +console.log(removeDuplicate4(nums)); From bd7de11e9f32dc8743f1ac2715ae7be7493b8225 Mon Sep 17 00:00:00 2001 From: mende888 Date: Sat, 15 Feb 2020 19:16:01 +0800 Subject: [PATCH 0116/1268] 463-week01 --- .../463-Week 01/LeetCode_189_463.cpp | 27 ++++++++++++++++ .../463-Week 01/LeetCode_1_463.cpp | 25 +++++++++++++++ .../463-Week 01/LeetCode_21_463.cpp | 32 +++++++++++++++++++ .../463-Week 01/LeetCode_26_463.cpp | 27 ++++++++++++++++ .../463-Week 01/LeetCode_283_463.cpp | 22 +++++++++++++ .../463-Week 01/LeetCode_88_463.cpp | 16 ++++++++++ Week_01/G20200343030463/463-Week 01/NOTE.md | 6 ++++ 7 files changed, 155 insertions(+) create mode 100644 Week_01/G20200343030463/463-Week 01/LeetCode_189_463.cpp create mode 100644 Week_01/G20200343030463/463-Week 01/LeetCode_1_463.cpp create mode 100644 Week_01/G20200343030463/463-Week 01/LeetCode_21_463.cpp create mode 100644 Week_01/G20200343030463/463-Week 01/LeetCode_26_463.cpp create mode 100644 Week_01/G20200343030463/463-Week 01/LeetCode_283_463.cpp create mode 100644 Week_01/G20200343030463/463-Week 01/LeetCode_88_463.cpp create mode 100644 Week_01/G20200343030463/463-Week 01/NOTE.md diff --git a/Week_01/G20200343030463/463-Week 01/LeetCode_189_463.cpp b/Week_01/G20200343030463/463-Week 01/LeetCode_189_463.cpp new file mode 100644 index 00000000..44b704e0 --- /dev/null +++ b/Week_01/G20200343030463/463-Week 01/LeetCode_189_463.cpp @@ -0,0 +1,27 @@ +课后作业 + +002 https://leetcode-cn.com/problems/rotate-array/ + +解法一: +解题思路: +001 找到最后一个元素, +002 整体元素往后挪一位 +003 001和002 循环K次 +执行结果:运行超时 +class Solution { +public: +void rotate(vector& nums, int k) { +int N = nums.size(); +int previous =0; +int temp = 0; +for (int i=0;i0;j--){ +nums[j] = nums[j-1]; +} +nums[0] = previous; +} +} +}; + + diff --git a/Week_01/G20200343030463/463-Week 01/LeetCode_1_463.cpp b/Week_01/G20200343030463/463-Week 01/LeetCode_1_463.cpp new file mode 100644 index 00000000..3e9d0308 --- /dev/null +++ b/Week_01/G20200343030463/463-Week 01/LeetCode_1_463.cpp @@ -0,0 +1,25 @@ +课后作业 + +005 https://leetcode-cn.com/problems/two-sum/ +解法一: +暴力求解 +解法二:利用unordered_map key是num[i] value是i +如果target-nums[i]在map中找得到那么就返回value 和 i + +class Solution { +public: +vector twoSum(vector& nums, int target) { + +unordered_map newM; + +for(int i =0; i < nums.size();i++){ +if(newM.find(target-nums[i]) != newM.end()){ +return {newM[target-nums[i]],i}; +} +newM[nums[i]] = i; +} + +return {}; +} +}; + diff --git a/Week_01/G20200343030463/463-Week 01/LeetCode_21_463.cpp b/Week_01/G20200343030463/463-Week 01/LeetCode_21_463.cpp new file mode 100644 index 00000000..634d61a1 --- /dev/null +++ b/Week_01/G20200343030463/463-Week 01/LeetCode_21_463.cpp @@ -0,0 +1,32 @@ +课后作业 + +003 +解题思路: +001 新建一个头节点 代理节点 +002 代理节点指向l1 l2中元素较小的点 +003 代理节点更新到新增加的节点 +004 返回头节点 + +class Solution { +public: +ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { +ListNode *preHead = new ListNode(-1); +ListNode *pre = preHead; + +while(l1&&l2){ +if(l1->val >= l2->val){ //代理指针指向元素较小的节点 +pre->next = l2; +l2 = l2->next; //l2指针指向下一个地址 +}else{ +pre->next = l1; +l1 = l1->next; //l1指针指向下一个地址 +} +pre = pre->next; //代理指针指向新加节点的位置 +} + +pre->next=l1 == NULL? l2 : l1; //判断l1 为空 那么返回l2 反之返回l1 + +return preHead->next; //返回新链表 + +} +}; diff --git a/Week_01/G20200343030463/463-Week 01/LeetCode_26_463.cpp b/Week_01/G20200343030463/463-Week 01/LeetCode_26_463.cpp new file mode 100644 index 00000000..a328b4ba --- /dev/null +++ b/Week_01/G20200343030463/463-Week 01/LeetCode_26_463.cpp @@ -0,0 +1,27 @@ +课后作业 +001 +https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/ +解题思路: +快指针 慢指针 还有一个标记位用于存放最后一个不一样的元素索引. +注意点:C++一定要注意数组越界问题 +参考连接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/solution/shuang-zhi-zhen-shan-chu-zhong-fu-xiang-dai-you-hu/ +解答如下: +class Solution { +public: +int removeDuplicates(vector& nums) { +if(nums.size() ==0) return 0; +int j = 1; +int k = 0; +int N = nums.size(); + +for (int i =0; i & nums) { +int j =0; +int N = nums.size(); + +for (int i =0;i& nums1, int m, vector& nums2, int n) { + +int i = m - 1, j = n - 1, newvector = m + n - 1; +while (j >= 0) { +nums1[newvector--] = i >= 0 && nums1[i] > nums2[j] ? nums1[i--] : nums2[j--]; +} +} +}; diff --git a/Week_01/G20200343030463/463-Week 01/NOTE.md b/Week_01/G20200343030463/463-Week 01/NOTE.md new file mode 100644 index 00000000..9c0aad09 --- /dev/null +++ b/Week_01/G20200343030463/463-Week 01/NOTE.md @@ -0,0 +1,6 @@ +学习笔记 +1.一道题要做好几遍才会懂 参考别人的思路自己写 跑不过 再改 再写 最后挑出个人最好的解法放到作业本里 +2.一开始 看着别人的思路 自己动手写就出现各种错误 原因还是自己不够熟练💪 +3.C++在操作数组的时候一定要检查数组越界 +4.在有序线性数据结构中可以使用一快一慢的指针来处理很多问题 +5.可以利用空间换时间来提高速度 例如unordered_map heap 等 From dc87ebe3646110bfc5dcf0e026b6d52f6766237f Mon Sep 17 00:00:00 2001 From: Huangzikun <381560728@qq.com> Date: Sat, 15 Feb 2020 20:24:40 +0800 Subject: [PATCH 0117/1268] 6,7 --- ...etCode_4__395.java => LeetCode_4_395.java} | 2 +- Week_00/G20200343030395/LeetCode_6_395.java | 17 ++++++++++++++ Week_00/G20200343030395/LeetCode_7_395.java | 22 +++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) rename Week_00/G20200343030395/{LeetCode_4__395.java => LeetCode_4_395.java} (97%) create mode 100644 Week_00/G20200343030395/LeetCode_6_395.java create mode 100644 Week_00/G20200343030395/LeetCode_7_395.java diff --git a/Week_00/G20200343030395/LeetCode_4__395.java b/Week_00/G20200343030395/LeetCode_4_395.java similarity index 97% rename from Week_00/G20200343030395/LeetCode_4__395.java rename to Week_00/G20200343030395/LeetCode_4_395.java index c64b02d1..04e7abf1 100644 --- a/Week_00/G20200343030395/LeetCode_4__395.java +++ b/Week_00/G20200343030395/LeetCode_4_395.java @@ -2,7 +2,7 @@ import java.util.Arrays; -public class LeetCode_4__395 { +public class LeetCode_4_395 { public static void main(String[] args) { int[] nums1 = new int[]{1,2,3,0,0,0}; int[] nums2 = new int[]{2,5,6}; diff --git a/Week_00/G20200343030395/LeetCode_6_395.java b/Week_00/G20200343030395/LeetCode_6_395.java new file mode 100644 index 00000000..2d07109d --- /dev/null +++ b/Week_00/G20200343030395/LeetCode_6_395.java @@ -0,0 +1,17 @@ +package Week_00.G20200343030395; + +public class LeetCode_6_395 { + + public static void moveZeroes(int[] nums) { + int j = 0; + for(int i=0; i=0;i--) { + //9的时候,进位,继续循环 + if(digits[i] == 9) { + digits[i] = 0; + } else { + //不是0,直接加,返回 + digits[i] ++; + return digits; + } + } + + digits = new int[digits.length +1]; + digits[0] = 1; + return digits; + } +} From 16b11ca2368fc0d3c9ec1e417c18d28f8a3a0d5b Mon Sep 17 00:00:00 2001 From: Huangzikun <381560728@qq.com> Date: Sat, 15 Feb 2020 20:44:19 +0800 Subject: [PATCH 0118/1268] 6,7 --- Week_00/G20200343030395/LeetCode_8_395.java | 101 ++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 Week_00/G20200343030395/LeetCode_8_395.java diff --git a/Week_00/G20200343030395/LeetCode_8_395.java b/Week_00/G20200343030395/LeetCode_8_395.java new file mode 100644 index 00000000..34e6c46b --- /dev/null +++ b/Week_00/G20200343030395/LeetCode_8_395.java @@ -0,0 +1,101 @@ +package Week_00.G20200343030395; + +public class LeetCode_8_395 { + + class MyCircularDeque { + + int[] deque; + int size; + + /** Initialize your data structure here. Set the size of the deque to be k. */ + public MyCircularDeque(int k) { + deque = new int[k]; + } + + /** Adds an item at the front of Deque. Return true if the operation is successful. */ + public boolean insertFront(int value) { + if(isFull()) { + return false; + } + + for (int i = size-1; i>=0; i--) { + deque[i+1] = deque[i]; + } + + deque[0] = value; + size++; + return true; + } + + /** Adds an item at the rear of Deque. Return true if the operation is successful. */ + public boolean insertLast(int value) { + if(isFull()) { + return false; + } + + deque[size] = value; + size++; + return true; + } + + /** Deletes an item from the front of Deque. Return true if the operation is successful. */ + public boolean deleteFront() { + if(isEmpty()) { + return false; + } + + deque[0] = 0; + for(int i=0; i Date: Sat, 15 Feb 2020 20:50:48 +0800 Subject: [PATCH 0119/1268] =?UTF-8?q?=E6=8C=AA=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_00/G20200343030395/NOTE.md | 26 ------------------ .../G20200343030393}/LeetCode_141.java | 2 +- .../G20200343030393}/LeetCode_1_395.java | 2 +- .../G20200343030393}/LeetCode_2_395.java | 2 +- .../G20200343030393}/LeetCode_3_395.java | 2 +- .../G20200343030393}/LeetCode_3sum.java | 2 +- .../G20200343030393}/LeetCode_4_395.java | 2 +- .../G20200343030393}/LeetCode_5_395.java | 2 +- .../G20200343030393}/LeetCode_6_395.java | 2 +- .../G20200343030393}/LeetCode_7_395.java | 2 +- .../G20200343030393}/LeetCode_8_395.java | 2 +- Week_01/G20200343030393/NOTE.md | 27 ++++++++++++++++++- 12 files changed, 36 insertions(+), 37 deletions(-) rename {Week_00/G20200343030395 => Week_01/G20200343030393}/LeetCode_141.java (96%) rename {Week_00/G20200343030395 => Week_01/G20200343030393}/LeetCode_1_395.java (96%) rename {Week_00/G20200343030395 => Week_01/G20200343030393}/LeetCode_2_395.java (97%) rename {Week_00/G20200343030395 => Week_01/G20200343030393}/LeetCode_3_395.java (97%) rename {Week_00/G20200343030395 => Week_01/G20200343030393}/LeetCode_3sum.java (98%) rename {Week_00/G20200343030395 => Week_01/G20200343030393}/LeetCode_4_395.java (96%) rename {Week_00/G20200343030395 => Week_01/G20200343030393}/LeetCode_5_395.java (97%) rename {Week_00/G20200343030395 => Week_01/G20200343030393}/LeetCode_6_395.java (91%) rename {Week_00/G20200343030395 => Week_01/G20200343030393}/LeetCode_7_395.java (93%) rename {Week_00/G20200343030395 => Week_01/G20200343030393}/LeetCode_8_395.java (98%) diff --git a/Week_00/G20200343030395/NOTE.md b/Week_00/G20200343030395/NOTE.md index 857cfd2a..e69de29b 100644 --- a/Week_00/G20200343030395/NOTE.md +++ b/Week_00/G20200343030395/NOTE.md @@ -1,26 +0,0 @@ -学习笔记 -## 2020/2/10 -* 视频进度:今日看了第三课1,2,3看了一半 -* 题目:跟着视频2做了 -* 题目完成情况 -[删除排序数组中的重复项](https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/) -[盛最多水的容器](https://leetcode-cn.com/problems/container-with-most-water/) -* 代码片段 - - * 用于循环一维数组,i和j下标不重复 - ```java - for(int i=0;i Date: Sat, 15 Feb 2020 21:30:17 +0800 Subject: [PATCH 0120/1268] =?UTF-8?q?Fix:=20=E6=B7=BB=E5=8A=A0=E8=84=91?= =?UTF-8?q?=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_00/G20200343030029/NOTE.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Week_00/G20200343030029/NOTE.md b/Week_00/G20200343030029/NOTE.md index 50de3041..f9dd9615 100644 --- a/Week_00/G20200343030029/NOTE.md +++ b/Week_00/G20200343030029/NOTE.md @@ -1 +1,3 @@ -学习笔记 \ No newline at end of file +#预习周脑图绘制 +*算法脑图* +[算法脑图地址](https://www.processon.com/mindmap/5e47c4cae4b0834dd835b666 "超链接title") \ No newline at end of file From e8f2656aba8c1e1d01e2bf6b4ef2533b7a0535a3 Mon Sep 17 00:00:00 2001 From: "tiejun.ge" <1354507073@qq.com> Date: Sat, 15 Feb 2020 21:44:40 +0800 Subject: [PATCH 0121/1268] =?UTF-8?q?Add:=E5=AE=8C=E6=88=90=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030029/LeetCode_4_029.java | 48 +++++++++++++++++++ Week_01/G20200343030029/LeetCode_5_029.java | 49 ++++++++++++++++++++ Week_01/G20200343030029/LeetCode_6_029.java | 51 +++++++++++++++++++++ Week_01/G20200343030029/NOTE.md | 27 ++++++++++- 4 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 Week_01/G20200343030029/LeetCode_4_029.java create mode 100644 Week_01/G20200343030029/LeetCode_5_029.java create mode 100644 Week_01/G20200343030029/LeetCode_6_029.java diff --git a/Week_01/G20200343030029/LeetCode_4_029.java b/Week_01/G20200343030029/LeetCode_4_029.java new file mode 100644 index 00000000..dd5c8675 --- /dev/null +++ b/Week_01/G20200343030029/LeetCode_4_029.java @@ -0,0 +1,48 @@ +import java.util.Arrays; +class LeetCode_4_029 { + //题解:给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 + //初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 + //你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 + + public static void main(String[] args) { + solutionTest(); + } + + public static void solutionTest() { + int[] nums1 = {1, 2, 3, 0, 0, 0}; + int m = 3; + int[] nums2 = {2, 5, 6}; + int n = 3; + //System.out.println(Arrays.toString(violenceSolution(nums1, m, nums2, n))); + System.out.println(Arrays.toString(bigNumLastSolution(nums1, m, nums2, n))); + } + + /** + * 暴力求解,先拷贝数组,然后排序,,时间复杂度 O((n+m)log(n+m)) + */ + public static int[] violenceSolution(int[] nums1, int m, int[] nums2, int n) { + System.arraycopy(nums2, 0, nums1, m, n); + Arrays.sort(nums1); + return nums1; + } + + /** + *两个数组,从后往前遍历,最大的数相互比较,最大的数在nums1[]末尾 时间复杂度为O(n+m) + */ + public static int[] bigNumLastSolution(int[] nums1, int m, int[] nums2, int n) { + int endIndex = nums1.length - 1; + int endNums1Index = m - 1; + int endNums2Index = n - 1; + while (endNums2Index >= 0){ + if(endNums1Index < 0){ + nums1[endIndex--] = nums2[endNums2Index--]; + }else if(nums1[endNums1Index] > nums2[endNums2Index]){ + nums1[endIndex--] = nums1[endNums1Index--]; + }else{ + nums1[endIndex--] = nums2[endNums2Index--]; + } + } + return nums1; + } + +} \ No newline at end of file diff --git a/Week_01/G20200343030029/LeetCode_5_029.java b/Week_01/G20200343030029/LeetCode_5_029.java new file mode 100644 index 00000000..75fb2ecc --- /dev/null +++ b/Week_01/G20200343030029/LeetCode_5_029.java @@ -0,0 +1,49 @@ +import java.util.HashMap; +import java.util.Map; +import java.util.Arrays; +class LeetCode_5_029 { + // 解题: + //
给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数, + //
并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 + + public static void main(String[] args) { + // test + solutionTest(); + } + + public static void solutionTest(){ + int[] nums = {2, 7, 11, 15}; + int target = 9; + System.out.println(Arrays.toString(hashSolution(nums, target))); + System.out.println(Arrays.toString(violenceSolution(nums, target))); + } + + // 1.暴力解法 时间复杂度为n^2 + public static int[] violenceSolution(int[] nums, int target) { + int[] indexArray = new int[2]; + for (int i = 0; i < nums.length - 1; i++) { + for (int j = i + 1; j < nums.length; j++) { + if (nums[i] + nums[j] == target) { + indexArray[0] = i; + indexArray[1] = j; + return indexArray; + } + } + } + return indexArray; + } + + //2. hash 解法 时间复杂度为n + // map + public static int[] hashSolution(int[] nums, int target) { + Map map = new HashMap(); + for (int i = 0; i < nums.length; i++) { + int indexValue = target - nums[i]; + if (map.containsKey(indexValue)) { + return new int[]{map.get(target - nums[i]), i}; + } + map.put(nums[i], i); + } + throw new IllegalArgumentException("No two sum value"); + } +} \ No newline at end of file diff --git a/Week_01/G20200343030029/LeetCode_6_029.java b/Week_01/G20200343030029/LeetCode_6_029.java new file mode 100644 index 00000000..6ef196d2 --- /dev/null +++ b/Week_01/G20200343030029/LeetCode_6_029.java @@ -0,0 +1,51 @@ +import java.util.Arrays; + +class LeetCode_6_029 { + //题解: + //
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 + //输入: [0,1,0,3,12] + //输出: [1,3,12,0,0] + + public static void main(String[] args) { + solutionTest(); + } + + public static void solutionTest() { + int[] nums = {0, 1, 0, 3, 12}; + System.out.println(Arrays.toString(violenceSolution(nums))); + System.out.println(Arrays.toString(speedPointerSolution(nums))); + } + + /** + * 暴力求解 时间复杂度 n^2 + */ + public static int[] violenceSolution(int[] nums) { + for (int i = 0; i < nums.length - 1; i++) { + for (int j = i + 1; j < nums.length; j++) { + if (0 == nums[i] && 0 != nums[j]) { + swap(i, j, nums); + } + } + } + return nums; + } + + /** + * 快慢指针,快指针指向非零指针,慢指针指向零元素,交换, 时间复杂度为n + */ + public static int[] speedPointerSolution(int nums[]) { + for(int fast = 0, slow = 0; fast < nums.length; fast++){ + if(0 != nums[fast]){ + swap(fast, slow, nums); + slow++; + } + } + return nums; + } + + public static void swap(int index1, int index2, int[] nums) { + int tempvalue = nums[index1]; + nums[index1] = nums[index2]; + nums[index2] = tempvalue; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030029/NOTE.md b/Week_01/G20200343030029/NOTE.md index 50de3041..f26bc6f8 100644 --- a/Week_01/G20200343030029/NOTE.md +++ b/Week_01/G20200343030029/NOTE.md @@ -1 +1,26 @@ -学习笔记 \ No newline at end of file +#第一周学习总结 +*** +* 复杂度 + * 时间复杂度: + * O(1):常数级复杂度 + * O(logn):仅仅次于常数数量级复杂度,用于二分查找,二叉树 + * O(n):线性复杂度,例如数组遍历 + * O(n^2):数组双重for循环 + * O(2^n):指数复杂度,例如递归 + * 空间复杂度: + * O(1):源空间操作,不开辟新空间 + * O(n):开辟新空间,例如新建数组 +* 数组 + * 空间连续 + * 查找,修改比较快 + * 增加,删除比较慢 +* 链表 (离散空间,查找慢,插入,删除比较快,优化算法跳表(时间复杂度O(logn))) + * 单链表:前一个元素指向后一个元素的索引,最后一个元素指向NULL + * 双向链表:前一个元素指向后一个元素的索引,后一个元素指向前一个元素的索引 + * 循环链表:前一个元素指向后一个元素的索引,最后一个元素指向头节点索引 +* 队列 + * 普通队列:先进先出 + * 双端队列:两端都可以入队和出队 + * 优先队列:根据优先规则出队 +* 栈:先进后出 + From 4708aab971dc39cd744a61de5cd69b3d7914c7c3 Mon Sep 17 00:00:00 2001 From: shengx <243725821@qq.com> Date: Sat, 15 Feb 2020 22:32:53 +0800 Subject: [PATCH 0122/1268] week00 --- .../LeetCode_21_G20200343030553.java | 46 +++++++++++++++++++ .../LeetCode_42_G20200343030553.java | 20 ++++++++ 2 files changed, 66 insertions(+) create mode 100644 Week_00/G20200343030553/LeetCode_21_G20200343030553.java create mode 100644 Week_00/G20200343030553/LeetCode_42_G20200343030553.java diff --git a/Week_00/G20200343030553/LeetCode_21_G20200343030553.java b/Week_00/G20200343030553/LeetCode_21_G20200343030553.java new file mode 100644 index 00000000..3bd1aba6 --- /dev/null +++ b/Week_00/G20200343030553/LeetCode_21_G20200343030553.java @@ -0,0 +1,46 @@ +class Solution { + // public ListNode mergeTwoLists(ListNode l1, ListNode l2) { + // // 复杂度 time O(n) space O(1) + // ListNode dummy = new ListNode(-1); + // ListNode head = dummy; + // ListNode a1 = l1; + // ListNode a2 = l2; + // while(a1!=null && a2!=null){ + // if(a1.val <= a2.val){ + // dummy.next = a1; + // a1 = a1.next; + // }else{ + // dummy.next = a2; + // a2 = a2.next; + // } + // dummy = dummy.next; + // } + + // // while(a1!=null){ + // // dummy.next = a1; + // // a1 = a1.next; + // // dummy = dummy.next; + // // } + // // while(a2!=null){ + // // dummy.next = a2; + // // a2 = a2.next; + // // dummy = dummy.next; + // // } + // // dummy.next = null; + // //优化 + // dummy.next = (a1 !=null) ? a1:a2; + // return head.next; + // } + + public ListNode mergeTwoLists(ListNode l1, ListNode l2){ + if(l1 == null) return l2; + if(l2 == null) return l1; + if(l1.val < l2.val){ + l1.next = mergeTwoLists(l1.next, l2); + return l1; + }else{ + l2.next = mergeTwoLists(l2.next, l1); + return l2; + } + } +} \ No newline at end of file diff --git a/Week_00/G20200343030553/LeetCode_42_G20200343030553.java b/Week_00/G20200343030553/LeetCode_42_G20200343030553.java new file mode 100644 index 00000000..9217feb2 --- /dev/null +++ b/Week_00/G20200343030553/LeetCode_42_G20200343030553.java @@ -0,0 +1,20 @@ +class Solution { + public int trap(int[] height) { + int sum = 0; + + for(int i=1;i=0;j--){ + maxl = Math.max(maxl, height[j]); + } + for(int j=i;j Date: Sat, 15 Feb 2020 22:49:51 +0800 Subject: [PATCH 0123/1268] plus one --- Week_01/G20200343030591/LeetCode_66_591.java | 26 ++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Week_01/G20200343030591/LeetCode_66_591.java diff --git a/Week_01/G20200343030591/LeetCode_66_591.java b/Week_01/G20200343030591/LeetCode_66_591.java new file mode 100644 index 00000000..9534c09a --- /dev/null +++ b/Week_01/G20200343030591/LeetCode_66_591.java @@ -0,0 +1,26 @@ +class Solution { + /** + * 加1 + * 思路解析: + * 1、通过从后往前的循环,给个位数+1 + * 2、加1后,分两种情况: + * 3、不需要进位直接返回就可以了 + * 4、需要进位 则进入下一轮循环,继续给前一位+1 + * 5、边界 如果循环都遍历完了 还是没有返回结果 那么说明数组的最高位也需要进位 + * 此时需要 扩容数组1位 然后给最高位补1 + * @param digits + * @return + */ + public int[] plusOne(int[] digits) { + int len = digits.length; + for (int i = len - 1; i >= 0; i--) { + digits[i]++; + // 判断是否有进位 不为0 则无需进位,为0则需要进位 + digits[i] = digits[i] % 10; + if (digits[i]!=0) return digits; + } + digits = new int[len+1]; + digits[0] = 1; + return digits; + } +} \ No newline at end of file From c7f6586cad7e320061b17addd534b27cb49d7cd5 Mon Sep 17 00:00:00 2001 From: Matthew <86193625@qq.com> Date: Sat, 15 Feb 2020 23:11:12 +0800 Subject: [PATCH 0124/1268] submit homework --- Week_01/G20200343030529/LeetCode_1_29.java | 28 ++ Week_01/G20200343030529/LeetCode_26_29.java | 52 +++ Week_01/G20200343030529/LeetCode_641_29.java | 327 +++++++++++++++++++ 3 files changed, 407 insertions(+) create mode 100644 Week_01/G20200343030529/LeetCode_1_29.java create mode 100644 Week_01/G20200343030529/LeetCode_26_29.java create mode 100644 Week_01/G20200343030529/LeetCode_641_29.java diff --git a/Week_01/G20200343030529/LeetCode_1_29.java b/Week_01/G20200343030529/LeetCode_1_29.java new file mode 100644 index 00000000..3f0bc464 --- /dev/null +++ b/Week_01/G20200343030529/LeetCode_1_29.java @@ -0,0 +1,28 @@ +import java.util.HashMap; + +/* + * @lc app=leetcode.cn id=1 lang=java + * + * [1] 两数之和 + */ + +// @lc code=start +class Solution { + public int[] twoSum(int[] nums, int target) { + int[] result = new int[2]; + HashMap map = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + int another = target - nums[i]; + if (map.containsKey(another)) { + result[0] = map.get(another); + result[1] = i; + return result; + } else { + map.put(nums[i], i); + } + } + return null; + } +} +// @lc code=end + diff --git a/Week_01/G20200343030529/LeetCode_26_29.java b/Week_01/G20200343030529/LeetCode_26_29.java new file mode 100644 index 00000000..c40143e5 --- /dev/null +++ b/Week_01/G20200343030529/LeetCode_26_29.java @@ -0,0 +1,52 @@ +import java.util.HashSet; + +/* + * @lc app=leetcode.cn id=26 lang=java + * + * [26] 删除排序数组中的重复项 + */ + +// @lc code=start +class Solution { + /* + * 方法一、双指针(快慢指针),新建一个同样大小的数组,找出不一样的数值,填入新数组,最后用新数组的值代替愿数组 + */ + // public int removeDuplicates(int[] nums) { + // int[] temp = new int[nums.length]; + // int size = 0; + // for (int i = 1, j = 0; i < nums.length; i++) { + // if (nums[j] != nums[i]) { + // temp[size++] = nums[j]; + // temp[size++] = nums[i]; + // j = i; + // } + // } + // for (int i = 0; i < size; i++) { + // nums[i] = temp[i]; + // } + // return size; + // } + + /* + * 方法二、双指针(快慢指针),直接在原数组修改 + */ + public int removeDuplicates(int[] nums) { + if (nums.length == 0) { + return 0; + } + int j = 0; + for (int i = 1; i < nums.length;i++) { + if (nums[i] != nums[j]) { + nums[++j] = nums[i]; + } + } + return j + 1; + } + + public static void main(String[] args) { + Solution solution = new Solution(); + solution.removeDuplicates(new int[]{1,1,2}); + } +} +// @lc code=end + diff --git a/Week_01/G20200343030529/LeetCode_641_29.java b/Week_01/G20200343030529/LeetCode_641_29.java new file mode 100644 index 00000000..37f1d961 --- /dev/null +++ b/Week_01/G20200343030529/LeetCode_641_29.java @@ -0,0 +1,327 @@ +import java.util.LinkedList; + +/* + * @lc app=leetcode.cn id=641 lang=java + * + * [641] 设计循环双端队列 + */ + +// @lc code=start + +/* +* 方法一:采用单链表,缺点在于每次插入新value,都要new一个node。 +*/ +// class MyCircularDeque { + +// private LinkedList linkedList = new LinkedList<>(); +// private int size = 0; +// private int n = 0; + +// public MyCircularDeque(int k) { +// size = k; +// } + +// public boolean insertFront(int value) { +// if (isFull()) { +// return false; +// } +// linkedList.addFirst(value); +// n++; +// return n <= size; +// } + +// public boolean insertLast(int value) { +// if (isFull()) { +// return false; +// } +// linkedList.addLast(value); +// n++; +// return n <= size; +// } + +// public boolean deleteFront() { +// if (isEmpty()) { +// return false; +// } +// linkedList.removeFirst(); +// n--; +// return true; +// } + +// public boolean deleteLast() { +// if (isEmpty()) { +// return false; +// } +// linkedList.removeLast(); +// n--; +// return true; +// } + +// public int getFront() { +// if (isEmpty()) { +// return -1; +// } +// return linkedList.getFirst(); +// } + +// public int getRear() { +// if (isEmpty()) { +// return -1; +// } +// return linkedList.getLast(); +// } + +// public boolean isEmpty() { +// return n == 0; +// } + +// /** Checks whether the circular deque is full or not. */ +// public boolean isFull() { +// return n == size; +// } +// } + +/* +* 方法二:采用数组+双指针,一个指针为head,一个指针为tail +*/ +// class MyCircularDeque { +// private int[] array; +// private int head = 0; +// private int tail = 0; +// //队列中数据大小 +// private int n = 0; + +// public MyCircularDeque(int k) { +// array = new int[k]; +// } + +// /* +// * 向队列头插入元素,需要递增head指针,但需要处理head指针指向数组末尾情况, +// * head到达末尾,需要回到数组0位置 +// */ +// public boolean insertFront(int value) { +// if (isFull()) { +// return false; +// } +// //处理队列为空时,在array数组中0位置插入数据 +// if (n == 0) { +// array[head] = value; +// n++; +// return true; +// } +// if (head + 1 == array.length) { +// head = 0; +// } else { +// head++; +// } +// array[head] = value; +// n++; +// return true; +// } + +// /* +// * 向队列尾插入元素,需要递减tail指针,但需要处理tail指针指向数组0位置的情况, +// * tail到数组0位置,需要回到数组末尾 +// */ +// public boolean insertLast(int value) { +// if (isFull()) { +// return false; +// } +// //处理队列为空时,在array数组中0位置插入数据 +// if (n == 0) { +// array[tail] = value; +// n++; +// return true; +// } +// if (tail == 0) { +// tail = array.length - 1; +// } else { +// tail--; +// } +// array[tail] = value; +// n++; +// return true; +// } + +// /* +// * 删除队列头,head指针递减,但需要处理head指针到达数组0位置后,需要回到数组末尾 +// */ +// public boolean deleteFront() { +// if (isEmpty()) { +// return false; +// } +// n--; +// array[head] = 0; +// if (n == 0) { +// return true; +// } +// if (head == 0) { +// head = array.length - 1; +// } else { +// head--; +// } +// return true; +// } + +// /* +// * 删除队列尾,tail指针递增,但需要处理tail指针到达数组末尾位置后,需要回到数组0位置 +// */ +// public boolean deleteLast() { +// if (isEmpty()) { +// return false; +// } +// n--; +// array[tail] = 0; +// if (n == 0) { +// return true; +// } +// if (tail == array.length - 1) { +// tail = 0; +// } else { +// tail++; +// } +// return true; +// } + +// public int getFront() { +// if (isEmpty()) { +// return -1; +// } +// return array[head]; +// } + +// public int getRear() { +// if (isEmpty()) { +// return -1; +// } +// return array[tail]; +// } + +// public boolean isEmpty() { +// if (n == 0) { +// return true; +// } +// return false; +// } + +// public boolean isFull() { +// if (n == array.length) { +// return true; +// } +// return false; +// } +// } + +/* +* 方法三:采用数组+双指针,一个指针为head,一个指针为tail, +* 但数组大小为输入大小的2n+1倍,且head和tail指向(2n + 1) / 2位置, +* 即数组中间。此做法不用处理head和tail指针分别在数组两端位置的情况,缺点是空间复杂度为O(2n) +*/ +class MyCircularDeque { + private int[] array; + private int head = 0; + private int tail = 0; + private int n = 0; + private int size = 0; + + public MyCircularDeque(int k) { + size = k; + array = new int[2 * size + 1]; + head = array.length / 2; + tail = head; + } + + public boolean insertFront(int value) { + if (isFull()) { + return false; + } + if (n != 0) { + head++; + } + n++; + array[head] = value; + return true; + } + + public boolean insertLast(int value) { + if (isFull()) { + return false; + } + if (n != 0) { + tail--; + } + n++; + array[tail] = value; + return true; + } + + public boolean deleteFront() { + if (isEmpty()) { + return false; + } + array[head] = 0; + n--; + if (n != 0) { + head--; + } + return true; + } + + public boolean deleteLast() { + if (isEmpty()) { + return false; + } + array[tail] = 0; + n--; + if (n != 0) { + tail++; + } + + return true; + } + + public int getFront() { + if (isEmpty()) { + return -1; + } + return array[head]; + } + + public int getRear() { + if (isEmpty()) { + return -1; + } + return array[tail]; + } + + public boolean isEmpty() { + if (n == 0) { + return true; + } + return false; + } + + public boolean isFull() { + if (n == size) { + return true; + } + return false; + } + + public static void main(String[] args) { + MyCircularDeque obj = new MyCircularDeque(3); + boolean param_0 = obj.insertFront(3); + boolean param_1 = obj.insertFront(3); + boolean param_2 = obj.insertLast(1); + boolean param_3 = obj.insertLast(2); + boolean param_4 = obj.insertFront(4); + int param_5 = obj.getRear(); + boolean param_6 = obj.isFull(); + boolean param_7 = obj.deleteLast(); + boolean param_8 = obj.insertFront(4); + int param_9 = obj.getFront(); + + } +} + +// @lc code=end From eb0a4decdc810058c3b6965b51d3e9673b5d07ed Mon Sep 17 00:00:00 2001 From: Matthew <86193625@qq.com> Date: Sat, 15 Feb 2020 23:22:26 +0800 Subject: [PATCH 0125/1268] submit homework --- .../G20200343030529/{LeetCode_1_29.java => LeetCode_1_529.java} | 0 .../G20200343030529/{LeetCode_26_29.java => LeetCode_26_529.java} | 0 .../{LeetCode_641_29.java => LeetCode_641_529.java} | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename Week_01/G20200343030529/{LeetCode_1_29.java => LeetCode_1_529.java} (100%) rename Week_01/G20200343030529/{LeetCode_26_29.java => LeetCode_26_529.java} (100%) rename Week_01/G20200343030529/{LeetCode_641_29.java => LeetCode_641_529.java} (100%) diff --git a/Week_01/G20200343030529/LeetCode_1_29.java b/Week_01/G20200343030529/LeetCode_1_529.java similarity index 100% rename from Week_01/G20200343030529/LeetCode_1_29.java rename to Week_01/G20200343030529/LeetCode_1_529.java diff --git a/Week_01/G20200343030529/LeetCode_26_29.java b/Week_01/G20200343030529/LeetCode_26_529.java similarity index 100% rename from Week_01/G20200343030529/LeetCode_26_29.java rename to Week_01/G20200343030529/LeetCode_26_529.java diff --git a/Week_01/G20200343030529/LeetCode_641_29.java b/Week_01/G20200343030529/LeetCode_641_529.java similarity index 100% rename from Week_01/G20200343030529/LeetCode_641_29.java rename to Week_01/G20200343030529/LeetCode_641_529.java From 1cb3c4414cac65b4190066319f0da5897f11997b Mon Sep 17 00:00:00 2001 From: Saul_Cui Date: Sat, 15 Feb 2020 23:26:53 +0800 Subject: [PATCH 0126/1268] 643-movezeros --- Week_00/G20200343030643/643-movezeros.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Week_00/G20200343030643/643-movezeros.py diff --git a/Week_00/G20200343030643/643-movezeros.py b/Week_00/G20200343030643/643-movezeros.py new file mode 100644 index 00000000..d454efa0 --- /dev/null +++ b/Week_00/G20200343030643/643-movezeros.py @@ -0,0 +1,16 @@ +class Solution(object): + def moveZeroes(self, nums): + """ + :type nums: List[int] + :rtype: None Do not return anything, modify nums in-place instead. + """ + if not nums: + return 0 + j = 0 + for i in xrange(len(nums)): + if nums[i]: + nums[j] = nums[i] + j += 1 + for i in xrange(j,len(nums)): + nums[i] = 0 + From 13edabdf9d73743925fa27723aaf291c9d485cec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=B6=A6=E7=82=9C?= Date: Sun, 16 Feb 2020 00:55:39 +0800 Subject: [PATCH 0127/1268] feat: add LeetCode_26_387.js --- Week_01/G20200343030387/LeetCode_26_387.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Week_01/G20200343030387/LeetCode_26_387.js diff --git a/Week_01/G20200343030387/LeetCode_26_387.js b/Week_01/G20200343030387/LeetCode_26_387.js new file mode 100644 index 00000000..db30e1a3 --- /dev/null +++ b/Week_01/G20200343030387/LeetCode_26_387.js @@ -0,0 +1,22 @@ +/** + * 双指针法 + * 时间复杂度:O(n) + * 空间复杂度:O(1) + */ +/** + * @param {number[]} nums + * @return {number} + */ +var removeDuplicates = function(nums) { + if (nums.length === 0) return 0 // 边界条件判断 + let i = 0 // 慢指针 + for (let j = 1; j < nums.length; j++) { + // 快指针遍历 + if (nums[i] !== nums[j]) { + // 两者所在位置的值不等时,将快指针的值赋值给慢指针后一个位置,同时慢指针后移一位 + i++ + nums[i] = nums[j] + } + } + return i + 1 +} From ea3dca04ba4591cb2f2dca5aaf16b3aaf34d848e Mon Sep 17 00:00:00 2001 From: wxyyrain Date: Sun, 16 Feb 2020 02:43:16 +0800 Subject: [PATCH 0128/1268] 611-week 01 --- Week_01/G20200343030611/LeetCode_189_611.java | 18 +++++++++ Week_01/G20200343030611/LeetCode_1_611.java | 28 ++++++++++++++ Week_01/G20200343030611/LeetCode_21_611.java | 37 +++++++++++++++++++ Week_01/G20200343030611/LeetCode_26_611.java | 23 ++++++++++++ Week_01/G20200343030611/LeetCode_283_611.java | 22 +++++++++++ Week_01/G20200343030611/LeetCode_66_611.java | 28 ++++++++++++++ Week_01/G20200343030611/LeetCode_88_611.java | 24 ++++++++++++ 7 files changed, 180 insertions(+) create mode 100644 Week_01/G20200343030611/LeetCode_189_611.java create mode 100644 Week_01/G20200343030611/LeetCode_1_611.java create mode 100644 Week_01/G20200343030611/LeetCode_21_611.java create mode 100644 Week_01/G20200343030611/LeetCode_26_611.java create mode 100644 Week_01/G20200343030611/LeetCode_283_611.java create mode 100644 Week_01/G20200343030611/LeetCode_66_611.java create mode 100644 Week_01/G20200343030611/LeetCode_88_611.java diff --git a/Week_01/G20200343030611/LeetCode_189_611.java b/Week_01/G20200343030611/LeetCode_189_611.java new file mode 100644 index 00000000..789850ba --- /dev/null +++ b/Week_01/G20200343030611/LeetCode_189_611.java @@ -0,0 +1,18 @@ +package datast.array; + +public class LeetCode_189_611 { + + /** + * 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 + * + * @param nums + * @param k + */ + public void rotate(int[] nums, int k) { + for (int i = 0; i < k; i++) { + int end = nums[nums.length - 1]; + System.arraycopy(nums, 0, nums, 1, nums.length - 1); + nums[0] = end; + } + } +} diff --git a/Week_01/G20200343030611/LeetCode_1_611.java b/Week_01/G20200343030611/LeetCode_1_611.java new file mode 100644 index 00000000..84260ea7 --- /dev/null +++ b/Week_01/G20200343030611/LeetCode_1_611.java @@ -0,0 +1,28 @@ +package datast.array; + +import java.util.HashMap; +import java.util.Map; + +public class LeetCode_1_611 { + + /** + * 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 + *

+ * 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 + * + * @param nums + * @param target + * @return + */ + public int[] twoSum(int[] nums, int target) { + Map map = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + int ele = target - nums[i]; + if (map.containsKey(ele)) { + return new int[]{map.get(ele), i}; + } + map.put(nums[i], i); + } + return new int[2]; + } +} diff --git a/Week_01/G20200343030611/LeetCode_21_611.java b/Week_01/G20200343030611/LeetCode_21_611.java new file mode 100644 index 00000000..48e9fe52 --- /dev/null +++ b/Week_01/G20200343030611/LeetCode_21_611.java @@ -0,0 +1,37 @@ +package datast.array; + +public class LeetCode_21_611 { + + /** + * 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 + * + * @param l1 + * @param l2 + * @return + */ + public ListNode mergeTwoLists(ListNode l1, ListNode l2) { + ListNode head = new ListNode(-1); + ListNode prev = head; + while (l1 != null && l2 != null) { + if (l1.val <= l2.val) { + prev.next = l1; + l1 = l1.next; + } else { + prev.next = l2; + l2 = l2.next; + } + prev = prev.next; + } + prev.next = l1 == null ? l2 : l1; + return head.next; + } + + public class ListNode { + int val; + ListNode next; + + ListNode(int x) { + val = x; + } + } +} diff --git a/Week_01/G20200343030611/LeetCode_26_611.java b/Week_01/G20200343030611/LeetCode_26_611.java new file mode 100644 index 00000000..96ed5cb7 --- /dev/null +++ b/Week_01/G20200343030611/LeetCode_26_611.java @@ -0,0 +1,23 @@ +package datast.array; + +public class LeetCode_26_611 { + + /** + * 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 + *

+ * 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 + * + * @param nums + * @return + */ + public int removeDuplicates(int[] nums) { + int i = 0; + for (int j = 1; j < nums.length; j++) { + if (nums[i] != nums[j]) { + i++; + nums[i] = nums[j]; + } + } + return i + 1; + } +} diff --git a/Week_01/G20200343030611/LeetCode_283_611.java b/Week_01/G20200343030611/LeetCode_283_611.java new file mode 100644 index 00000000..960b1745 --- /dev/null +++ b/Week_01/G20200343030611/LeetCode_283_611.java @@ -0,0 +1,22 @@ +package datast.array; + +public class LeetCode_283_611 { + + /** + * 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 + * + * @param nums + */ + public void moveZeroes(int[] nums) { + int j = 0; + for (int i = 0; i < nums.length; i++) { + if (nums[i] != 0) { + nums[j] = nums[i]; + if (i != j) { + nums[i] = 0; + } + j++; + } + } + } +} diff --git a/Week_01/G20200343030611/LeetCode_66_611.java b/Week_01/G20200343030611/LeetCode_66_611.java new file mode 100644 index 00000000..294aa3eb --- /dev/null +++ b/Week_01/G20200343030611/LeetCode_66_611.java @@ -0,0 +1,28 @@ +package datast.array; + +public class LeetCode_66_611 { + + + /** + * 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 + *

+ * 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 + *

+ * 你可以假设除了整数 0 之外,这个整数不会以零开头。 + * + * @param digits + * @return + */ + public int[] plusOne(int[] digits) { + for (int i = digits.length - 1; i >= 0; i--) { + digits[i]++; + digits[i] = digits[i] % 10; + if (digits[i] != 0) { + return digits; + } + } + digits = new int[digits.length + 1]; + digits[0] = 1; + return digits; + } +} diff --git a/Week_01/G20200343030611/LeetCode_88_611.java b/Week_01/G20200343030611/LeetCode_88_611.java new file mode 100644 index 00000000..bda6cd78 --- /dev/null +++ b/Week_01/G20200343030611/LeetCode_88_611.java @@ -0,0 +1,24 @@ +package datast.array; + +public class LeetCode_88_611 { + + /** + * 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 + * 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 + * 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 + * + * @param nums1 + * @param m + * @param nums2 + * @param n + */ + public void merge(int[] nums1, int m, int[] nums2, int n) { + int p = m - 1; + int q = n - 1; + int f = m + n - 1; + while ((p >= 0) && (q >= 0)) { + nums1[f--] = nums1[p] > nums2[q] ? nums1[p--] : nums2[q--]; + } + System.arraycopy(nums2, 0, nums1, 0, q + 1); + } +} From 560f4caf1622b04347bb2c3e6a125cce101426f3 Mon Sep 17 00:00:00 2001 From: ScarletSheep943 <876621152@qq.com> Date: Sun, 16 Feb 2020 09:54:44 +0800 Subject: [PATCH 0129/1268] 465-01 --- Week_01/G20200343030465/LeetCode_21_465.java | 24 ++++++++++++++++++++ Week_01/G20200343030465/LeetCode_66_465.java | 18 +++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 Week_01/G20200343030465/LeetCode_21_465.java create mode 100644 Week_01/G20200343030465/LeetCode_66_465.java diff --git a/Week_01/G20200343030465/LeetCode_21_465.java b/Week_01/G20200343030465/LeetCode_21_465.java new file mode 100644 index 00000000..60262bda --- /dev/null +++ b/Week_01/G20200343030465/LeetCode_21_465.java @@ -0,0 +1,24 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode(int x) { val = x; } + * } + */ +class Solution { + public ListNode mergeTwoLists(ListNode l1, ListNode l2) { + if (l1 == null) return l2; + if (l2 == null) return l1; + if (l1.val > l2.val) { + ListNode tmp = l2; + tmp.next = mergeTwoLists(l1, l2.next); + return tmp; + } else { + ListNode tmp = l1; + tmp.next = mergeTwoLists(l1.next, l2); + return tmp; + } + + } +} \ No newline at end of file diff --git a/Week_01/G20200343030465/LeetCode_66_465.java b/Week_01/G20200343030465/LeetCode_66_465.java new file mode 100644 index 00000000..10ffdb96 --- /dev/null +++ b/Week_01/G20200343030465/LeetCode_66_465.java @@ -0,0 +1,18 @@ +class Solution { + public int[] plusOne(int[] digits) { + for (int i = digits.length - 1; i >=0; i--) { + if (digits[i] != 9) { + digits[i]++; + break; + } else { + digits[i] = 0; + } + } + if (digits[0] == 0) { + int[] res = new int[digits.length+1]; + res[0] = 1; + return res; + } + return digits; + } +} \ No newline at end of file From 7fb3bb7a18292d82a23576154845f1d35fd1e7e5 Mon Sep 17 00:00:00 2001 From: Sun Liang Date: Sun, 16 Feb 2020 11:38:19 +0900 Subject: [PATCH 0130/1268] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E7=AC=AC=E4=B8=80?= =?UTF-8?q?=E5=91=A8=E4=BD=9C=E4=B8=9A=EF=BC=8C=E5=AD=A6=E5=8F=B7509?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030509/001_509.java | 27 +++++++++++++++++++++++ Week_01/G20200343030509/026_509.java | 30 ++++++++++++++++++++++++++ Week_01/G20200343030509/deque_509.java | 22 +++++++++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 Week_01/G20200343030509/001_509.java create mode 100644 Week_01/G20200343030509/026_509.java create mode 100644 Week_01/G20200343030509/deque_509.java diff --git a/Week_01/G20200343030509/001_509.java b/Week_01/G20200343030509/001_509.java new file mode 100644 index 00000000..90ed3a79 --- /dev/null +++ b/Week_01/G20200343030509/001_509.java @@ -0,0 +1,27 @@ +import java.util.HashMap; +import java.util.Map; + +/* + * @lc app=leetcode.cn id=1 lang=java + * + * [1] 两数之和 + */ + +// @lc code=start +class Solution { + public int[] twoSum(int[] nums, int target) { + //用哈希表记录数字和位置 + Map map = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + //循环到的数字对应的解 + int key = target - nums[i]; + if (map.containsKey(key)) { + //如果解存在于map,返回解的位置和现在的位置 + return new int[]{ map.get(key), i }; + } + //把数字和位置存入哈希表 + map.put( nums[i], i); + } + throw new IllegalArgumentException("No two sum solution"); + } +} \ No newline at end of file diff --git a/Week_01/G20200343030509/026_509.java b/Week_01/G20200343030509/026_509.java new file mode 100644 index 00000000..ff35b700 --- /dev/null +++ b/Week_01/G20200343030509/026_509.java @@ -0,0 +1,30 @@ +/* + * @lc app=leetcode.cn id=26 lang=java + * + * [26] 删除排序数组中的重复项 + */ + +// @lc code=start +class Solution { + public int removeDuplicates(int[] nums) { + if (nums.length < 2) { + return nums.length; + } + //快慢指针 + int pre = 0, next =1; + while(next < nums.length) { + //如果不相等 + if(nums[pre] != nums[next]) { + //并且快指针不是慢指针的下一个 + if(next - pre > 1) { + //把快指针的值赋给慢指针的下一个 + nums[pre + 1] = nums[next]; + }; + //把慢指针往后移 + pre++; + } + next++; + } + return pre + 1; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030509/deque_509.java b/Week_01/G20200343030509/deque_509.java new file mode 100644 index 00000000..137866f2 --- /dev/null +++ b/Week_01/G20200343030509/deque_509.java @@ -0,0 +1,22 @@ +import java.util.Deque; +import java.util.LinkedList; + +class deque_509 { + public static void main(String[] args) { + Deque deque = new LinkedList(); + + deque.addLast("a"); + deque.addLast("b"); + deque.addLast("c"); + System.out.println(deque); + + final String str = deque.peekLast(); + System.out.println(str); + System.out.println(deque); + + while (deque.size() > 0) { + System.out.println(deque.removeFirst()); + } + System.out.println(deque); + } +} \ No newline at end of file From 7cde861d757c2beb114909b238cd77199e4743f2 Mon Sep 17 00:00:00 2001 From: mark Date: Sun, 16 Feb 2020 10:47:38 +0800 Subject: [PATCH 0131/1268] Test add homework file --- Week_01/G20200343030585/LeetCode_189_585.py | 40 +++++++++++++++++++++ Week_01/G20200343030585/LeetCode_1_585.py | 33 +++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 Week_01/G20200343030585/LeetCode_189_585.py create mode 100644 Week_01/G20200343030585/LeetCode_1_585.py diff --git a/Week_01/G20200343030585/LeetCode_189_585.py b/Week_01/G20200343030585/LeetCode_189_585.py new file mode 100644 index 00000000..60a1716d --- /dev/null +++ b/Week_01/G20200343030585/LeetCode_189_585.py @@ -0,0 +1,40 @@ +# -*- coding:utf-8 -*- + +class Solution(object): + def rotate(self, nums, k): + """ + :type nums: List[int] + :type k: int + :rtype: None Do not return anything, modify nums in-place instead. + 解决思路 + 1. 将需要移动到头部的元素取出,将其他元素后移,将移动的元素放到前面 + 2. 使用反转来实现 + 1.想整体反转,这样所有数据就倒了 + 2.再把0-k部分反转 + 3.把k-end部分反转 + 4.对于旋转的次数比数组元素大的情况,可以理解为把所有元素旋转1遍到多遍后(也就是不改变元素原来的位置),最后执行一遍k - length的操作 + + """ + if k > len(nums): + return False + nums.reverse() + nums = self.reverse(nums, 0, k - 1) + nums = self.reverse(nums, k, len(nums) - 1) + return nums + + + def reverse(self, nums, start, end): + while True: + if start >= end: + break + + temp = nums[start] + nums[start] = nums[end] + nums[end] = temp + start += 1 + end -= 1 + return nums + +if __name__ == "__main__": + obj = Solution() + print(obj.rotate([1,2,3,4,5,6,7,8,9,0], 3)) \ No newline at end of file diff --git a/Week_01/G20200343030585/LeetCode_1_585.py b/Week_01/G20200343030585/LeetCode_1_585.py new file mode 100644 index 00000000..4087eb3c --- /dev/null +++ b/Week_01/G20200343030585/LeetCode_1_585.py @@ -0,0 +1,33 @@ +# -*- coding:utf-8 -*- +class Solution(object): + def twoSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + #需要从一个整数数组里面任意找出两个整数他们的和与指定的值相同 + # 1.迭代找出每个两位数,顺序取一个元素为主元素,然后依次再去一个剩下的元素, + # 两个一起匹配结果,如果每个子元素都匹配完依然没有结果就使用下一个主元素, + # 依次使用完所有元素,如果没有就不能满足 + # 2. 然后匹配指定目标值 + i = 0 + j = 0 + length = len(nums) + while True: + if j >= length: + return False + + master = nums[j] + for i in range(j+1, length): + iterm = nums[i] + if master + iterm == target: + return [j, i] + j = j + 1 + +if __name__ == "__main__": + obj = Solution() + print(obj.twoSum([11, 15, 2, 7], 9)) + + + \ No newline at end of file From 8d08fb4ef184f618f6b73ff8fa7bf9cf49481b7a Mon Sep 17 00:00:00 2001 From: mark Date: Sun, 16 Feb 2020 10:52:10 +0800 Subject: [PATCH 0132/1268] add other homework files --- Week_01/G20200343030585/LeetCode_21_585.py | 36 +++++ Week_01/G20200343030585/LeetCode_283_585.py | 25 ++++ Week_01/G20200343030585/LeetCode_42_585.py | 49 +++++++ Week_01/G20200343030585/LeetCode_641_585.py | 141 ++++++++++++++++++++ Week_01/G20200343030585/LeetCode_66_585.py | 31 +++++ 5 files changed, 282 insertions(+) create mode 100644 Week_01/G20200343030585/LeetCode_21_585.py create mode 100644 Week_01/G20200343030585/LeetCode_283_585.py create mode 100644 Week_01/G20200343030585/LeetCode_42_585.py create mode 100644 Week_01/G20200343030585/LeetCode_641_585.py create mode 100644 Week_01/G20200343030585/LeetCode_66_585.py diff --git a/Week_01/G20200343030585/LeetCode_21_585.py b/Week_01/G20200343030585/LeetCode_21_585.py new file mode 100644 index 00000000..e50c0baf --- /dev/null +++ b/Week_01/G20200343030585/LeetCode_21_585.py @@ -0,0 +1,36 @@ +# -*- coding:utf-8 -*- + +# Definition for singly-linked list. +class ListNode(object): + def __init__(self, x): + self.val = x + self.next = None + +class Solution(object): + def mergeTwoLists(self, l1, l2): + """ + :type l1: ListNode + :type l2: ListNode + :rtype: ListNode + 解题思路: + 1.使用一个新list保存合并后的数据 + 2. 由于两个链表都有序,一次循环两个链表,使用两个指针分别指向两个链表表头 + 3. 依次比较两个链表的元素,元素小的添加到新list,然后将指针后移,再进行比较 + 4. 如果指针已经大于当前list,直接添加另一个list的所有值 + """ + + l3 = ListNode("") + ret = l3 + + while l1 and l2: + if l1.val > l2.val: + l3.next = l2 + l2 = l2.next + else: + l3.next = l1 + l1 = l1.next + l3 = l3.next + + l3.next = l1 if l1 is not None else l2 + return ret.next + \ No newline at end of file diff --git a/Week_01/G20200343030585/LeetCode_283_585.py b/Week_01/G20200343030585/LeetCode_283_585.py new file mode 100644 index 00000000..c61e7878 --- /dev/null +++ b/Week_01/G20200343030585/LeetCode_283_585.py @@ -0,0 +1,25 @@ +# -*- coding:utf-8 -*- +class Solution(object): + def moveZeroes(self, nums): + """ + :type nums: List[int] + :rtype: None Do not return anything, modify nums in-place instead. + """ + length = len(nums) + if length <= 0: + return + cnt = 0 + for i in range(length): + if nums[i] != 0: + nums[cnt] = nums[i] + if i > cnt: + nums[i] = 0 + cnt += 1 + + print(nums) + + +if __name__ == "__main__": + obj = Solution() + obj.moveZeroes([-959151711, 623836953, 209446690, -1950418142, 1339915067, -733626417, 481171539, -2125997010, -1225423476, 1462109565, 147434687, -1800073781, -1431212205, -450443973, 50097298, 753533734, -747189404, -2070885638, 0, -1484353894, -340296594, -2133744570, 619639811, -1626162038, 669689561, 0, 112220218, 502447212, -787793179, 0, -726846372, -1611013491, 204107194, 1605165582, -566891128, 2082852116, 0, 532995238, -1502590712, 0, 2136989777, -2031153343, 371398938, -1907397429, 342796391, 609166045, -2007448660, -1096076344, -323570318, 0, - + 2082980371, 2129956379, -243553361, -1549960929, 1502383415, 0, -1394618779, 694799815, 78595689, -1439173023, -1416578800, 685225786, -333502212, -1181308536, -380569313, 772035354, 0, -915266376, 663709718, 1443496021, -777017729, -883300731, -387828385, 1907473488, -725483724, -972961871, -1255712537, 383120918, 1383877998, 1722751914, 0, -1156050682, 1952527902, -560244497, 1304305692, 1173974542, -1313227247, -201476579, -298899493, -1828496581, -1724396350, 1933643204, 1531804925, 1728655262, -955565449, 0, -69843702, -461760848, 268336768, 1446130876]) diff --git a/Week_01/G20200343030585/LeetCode_42_585.py b/Week_01/G20200343030585/LeetCode_42_585.py new file mode 100644 index 00000000..158ba342 --- /dev/null +++ b/Week_01/G20200343030585/LeetCode_42_585.py @@ -0,0 +1,49 @@ +# -*- coding:utf-8 -*- +# 解题思路: +# 1 什么是能接水的空间,是一个柱子后有个下降的空间,等于是后面柱子的高度小于当前柱子的高度,同时后面还要有个上升空间 +# 2 知道了接水的空间后再计算接水的大小,1宽度*1高度为一个单位,下降的空间会有占用空间的柱子,要把这个删除 +# 3 使用一个栈和两个指针,第一个指针指向第一个元素,第二个指针依次指向第一个指针后面的元素 +# 4 发现一个柱子比栈顶小就入栈,比栈顶高栈顶元素出栈,出栈后再计算与新的栈顶之间的水, +# min(height[current], height[st[top]]) * (current - st[top] - 1) +# 可以将两边中一边最高的元素作为水池的高,减去中间任意大于0的柱子 heights[i], +# + + +class Solution(object): + def trap(self, height): + """ + :type height: List[int] + :rtype: int + """ + if len(height) < 3: + return 0 + + sum = 0 # 总蓄水量 + current = 0 # 当前指针 + st = [] # stack + + + for current in range(0, len(height)): + # 如果栈不空并且当前指向的高度大于栈顶高度就一直循环 + while len(st) > 0 and height[current] > height[st[0]]: + h = height[st[0]]; # 取出要出栈的元素 + st.pop(0); #出栈 + if (len(st) == 0): # 栈空就出去 + break; + + distance = current - st[0] - 1 #两堵墙之前的距离。 + minVal = min(height[st[0]], height[current]) + sum = sum + distance * (minVal - h) + + st.insert(0, current) # 当前指向的墙入栈 + current += 1 # 指针后移 + + return sum + +if __name__ == "__main__": + obj = Solution() + # print(obj.trap([0,1,0,2,0,1,0,1,3,2,1,2,1])) + # print(obj.trap([1,2,3,4,0,5])) + # print(obj.trap([2,0,2])) + print(obj.trap([9,2,9,3,2,2,1,4,8])) + \ No newline at end of file diff --git a/Week_01/G20200343030585/LeetCode_641_585.py b/Week_01/G20200343030585/LeetCode_641_585.py new file mode 100644 index 00000000..8ef2c2c1 --- /dev/null +++ b/Week_01/G20200343030585/LeetCode_641_585.py @@ -0,0 +1,141 @@ +# -*- coding:utf-8 -*- + +# 解题思路 +# 循环双端队列可以理解一个两端都可以插入删除的队列,同时队列的指针可以从存储结构的尾部走到头部 +# 队列会有两个指针一个指向头部元素,一个指向尾部元素的后一位 +# 判断队列为空需要将判断两个指针是否指向同一个位置,为避免队列为满的时候也出现这种情况,队列中多增加一个占位元素 +# 插入一个元素,从前端插入需要计算指针的位置,就是从队头部增加,考虑存在循环的情况,所以要模上存储的大小 +# 队尾指针始终未最后一个元素+1的位置 +# 获取队头元素和队尾元素并不影响指针的位置,只返回值就可以 + +class MyCircularDeque(object): + + def __init__(self, k): + """ + Initialize your data structure here. Set the size of the deque to be k. + :type k: int + """ + self.front = 0 # front始终指向第一个元素的位置 + self.rear = 0 + self.capacity = k + 1 # 多出来一个是为了保证空和满的判断不冲突 + self.a = [0 for _ in range(self.capacity)] + + def insertFront(self, value): + """ + Adds an item at the front of Deque. Return true if the operation is successful. + :type value: int + :rtype: bool + """ + if self.isFull(): + return False + self.front = (self.front - 1 + self.capacity) % self.capacity + self.a[self.front] = value + return True + + + def insertLast(self, value): + """ + Adds an item at the rear of Deque. Return true if the operation is successful. + :type value: int + :rtype: bool + """ + if self.isFull(): + return False + self.a[self.rear] = value + self.rear = (self.rear + 1) % self.capacity + return True + + def deleteFront(self): + """ + Deletes an item from the front of Deque. Return true if the operation is successful. + :rtype: bool + """ + if self.isEmpty(): + return False + self.front = (self.front + 1) % self.capacity + return True + + + def deleteLast(self): + """ + Deletes an item from the rear of Deque. Return true if the operation is successful. + :rtype: bool + """ + if self.isEmpty(): + return False + self.rear = (self.rear - 1 + self.capacity) % self.capacity + return True + + + def getFront(self): + """ + Get the front item from the deque. + :rtype: int + """ + if self.isEmpty(): + return -1 + return self.a[self.front] + + + def getRear(self): + """ + Get the last item from the deque. + :rtype: int + """ + if self.isEmpty(): + return -1 + return self.a[(self.rear - 1 + self.capacity) % self.capacity] + + + def isEmpty(self): + """ + Checks whether the circular deque is empty or not. + :rtype: bool + """ + return self.rear == self.front + + + def isFull(self): + """ + Checks whether the circular deque is full or not. + :rtype: bool + """ + return (self.rear + 1) % self.capacity == self.front + + def __str__(self): + return " ".join([str(x) for x in self.a]) + + + + +if __name__ == "__main__": + obj = MyCircularDeque(3) + param_1 = obj.insertFront(1) + param_2 = obj.insertLast(2) + param_2 = obj.insertLast(3) + param_2 = obj.insertLast(4) + + param_6 = obj.getRear() + + param_3 = obj.isFull() + print(param_3) + + param_4 = obj.deleteLast() + + param_5 = obj.getFront() + param_7 = obj.isEmpty() + + param_8 = obj.isFull() + print(param_8) + + +# Your MyCircularDeque object will be instantiated and called as such: +# obj = MyCircularDeque(k) +# param_1 = obj.insertFront(value) +# param_2 = obj.insertLast(value) +# param_3 = obj.deleteFront() +# param_4 = obj.deleteLast() +# param_5 = obj.getFront() +# param_6 = obj.getRear() +# param_7 = obj.isEmpty() +# param_8 = obj.isFull() \ No newline at end of file diff --git a/Week_01/G20200343030585/LeetCode_66_585.py b/Week_01/G20200343030585/LeetCode_66_585.py new file mode 100644 index 00000000..639727ba --- /dev/null +++ b/Week_01/G20200343030585/LeetCode_66_585.py @@ -0,0 +1,31 @@ +# -*- coding:utf-8 -*- + +# 解题思路 +# 1.输入是非负整数组成的数组,每个元素为一个数字 +# 2.要求在这个数字上+1,然后再按大小输出到数组,保证在数组里面的顺序是从大到小 +# 3.由于只是加一,只需要考虑最后一位+1的情况 +# 1. 最后一位非9,+1后直接写入最后一位的值就行 +# 2. 最后一位为9,+1后结果为0,需要判断然后进一位+1,这个步骤可以循环 +# 3.最后排除数字全是9的情况 + +class Solution(object): + def plusOne(self, digits): + """ + :type digits: List[int] + :rtype: List[int] + """ + length = len(digits) + for i in range(length - 1, -1, -1): + digits[i] += 1 + digits[i] = digits[i] % 10 + if digits[i] != 0: + return digits + + digits.insert(0, 1) + return digits + + + +if __name__ == "__main__": + obj = Solution() + print(obj.plusOne([9,9,9])) \ No newline at end of file From fb2e09d4b8b32f1361dead28924e9f5d4392561d Mon Sep 17 00:00:00 2001 From: luming Date: Sun, 16 Feb 2020 10:57:43 +0800 Subject: [PATCH 0133/1268] 021-week 01 --- Week_01/G20200343030021/LeetCode_1_021.java | 76 +++++++++++++++++++ Week_01/G20200343030021/LeetCode_283_021.java | 50 ++++++++++++ 2 files changed, 126 insertions(+) create mode 100644 Week_01/G20200343030021/LeetCode_1_021.java create mode 100644 Week_01/G20200343030021/LeetCode_283_021.java diff --git a/Week_01/G20200343030021/LeetCode_1_021.java b/Week_01/G20200343030021/LeetCode_1_021.java new file mode 100644 index 00000000..f152d0dd --- /dev/null +++ b/Week_01/G20200343030021/LeetCode_1_021.java @@ -0,0 +1,76 @@ +package ;/* + * @lc app=leetcode.cn id=1 lang=java + * + * [1] 两数之和 + * + * https://leetcode-cn.com/problems/two-sum/description/ + * + * algorithms + * Easy (47.53%) + * Likes: 7673 + * Dislikes: 0 + * Total Accepted: 828.2K + * Total Submissions: 1.7M + * Testcase Example: '[2,7,11,15]\n9' + * + * 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 + * + * 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 + * + * 示例: + * + * 给定 nums = [2, 7, 11, 15], target = 9 + * + * 因为 nums[0] + nums[1] = 2 + 7 = 9 + * 所以返回 [0, 1] + * + * + */ + +import java.util.HashMap; +import java.util.HashSet; + +// @lc code=start +class Solution { + + //暴力枚举 + public int[] twoSum_1(int[] nums, int target) { + for (int i = 0; i < nums.length; i++) { + for (int j = i + 1; j < nums.length; j++) { + if (nums[i] + nums[j] == target) { + return new int[] {i, j}; + } + } + } + throw new IllegalArgumentException("no"); + } + //两次hash + public int[] twoSum_2(int[] nums, int target) { + HashMap hashMap = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + hashMap.put(nums[i], i); + } + for (int i = 0; i < nums.length; i++) { + int complement = target - nums[i]; + if (hashMap.containsKey(complement) && hashMap.get(complement) != i) { + return new int [] {i,hashMap.get(complement)}; + } + } + throw new IllegalArgumentException("no"); + } + + //一次hash + public int[] twoSum_3(int[] nums,int target) { + HashMap map = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + int complement = target - nums[i]; + if (map.containsKey(complement)) { + return new int[] {map.get(complement), i}; + } + } + throw new IllegalArgumentException("null"); + } + +} +// @lc code=end + diff --git a/Week_01/G20200343030021/LeetCode_283_021.java b/Week_01/G20200343030021/LeetCode_283_021.java new file mode 100644 index 00000000..14f011ea --- /dev/null +++ b/Week_01/G20200343030021/LeetCode_283_021.java @@ -0,0 +1,50 @@ +package week_01;/* + * @lc app=leetcode.cn id=283 lang=java + * + * [283] 移动零 + */ + +// @lc code=start +class Solution { + + public int[] moveZeroes(int[] nums) { + int j = 0; + for (int i = 0; i < nums.length; i++) { + if (nums[i] != 0) { + nums[j] = nums[i]; + if (i != j) { + nums[i] = 0; + } + j++; + } + } + return nums; + } + + public int[] moveZeroes2(int[] nums) { + int count = 0; + for (int i = 0; i < nums.length; i++) { + if (nums[i] == 0) { + count++; + }else if (count > 0) { + nums[i - count] = nums[i]; + nums[i] = 0; + } + } + return nums; + } + + public int[] moveZeroes_3(int[] nums) { + int count = 0; + for (int i = 0; i Date: Sun, 16 Feb 2020 11:03:35 +0800 Subject: [PATCH 0134/1268] 021-week 01 --- Week_01/G20200343030021/LeetCode_283_021.java | 1 - 1 file changed, 1 deletion(-) diff --git a/Week_01/G20200343030021/LeetCode_283_021.java b/Week_01/G20200343030021/LeetCode_283_021.java index 14f011ea..de981a66 100644 --- a/Week_01/G20200343030021/LeetCode_283_021.java +++ b/Week_01/G20200343030021/LeetCode_283_021.java @@ -6,7 +6,6 @@ // @lc code=start class Solution { - public int[] moveZeroes(int[] nums) { int j = 0; for (int i = 0; i < nums.length; i++) { From 8811b20a4d4a6453e9a781d5def5a8125e4c1c50 Mon Sep 17 00:00:00 2001 From: FristResponder <406803663@qq.com> Date: Sun, 16 Feb 2020 11:28:47 +0800 Subject: [PATCH 0135/1268] =?UTF-8?q?=E5=94=90=E9=93=B6=E9=B9=8F=E6=8F=90?= =?UTF-8?q?=E4=BA=A4leetcod=E7=AC=AC189=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.gitignore | 2 + .idea/algorithm006-class01.iml | 9 ++ .../inspectionProfiles/profiles_settings.xml | 5 + .idea/misc.xml | 6 + .idea/modules.xml | 8 ++ .idea/vcs.xml | 6 + Week_01/G20200343030531/leetcode_189_531.go | 117 ++++++++++++++++++ 7 files changed, 153 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/algorithm006-class01.iml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 Week_01/G20200343030531/leetcode_189_531.go diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..5c98b428 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,2 @@ +# Default ignored files +/workspace.xml \ No newline at end of file diff --git a/.idea/algorithm006-class01.iml b/.idea/algorithm006-class01.iml new file mode 100644 index 00000000..5e764c4f --- /dev/null +++ b/.idea/algorithm006-class01.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 00000000..0eefe328 --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..28a804d8 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..f394d715 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..94a25f7f --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Week_01/G20200343030531/leetcode_189_531.go b/Week_01/G20200343030531/leetcode_189_531.go new file mode 100644 index 00000000..a7f08e07 --- /dev/null +++ b/Week_01/G20200343030531/leetcode_189_531.go @@ -0,0 +1,117 @@ +package main + +import "fmt" + +func main() { + a := []int{1, 2, 3, 4, 5, 6 ,7} + rotate(a, 5) +} +// 暴力法 +// 太复杂了,失败,需要思考为什么这样做 +/* + 反思:1.可以从第一个开始就进行置换处理,获取最后一个进行置换 + 2.到了最后一个的时候实际上已经完成所有的置换了。 + 3.这里有个问题就是从第一个开始直接置换之前的还是等带置换最后的。 +*/ +/* +func rotate(nums []int, k int) { + for i := 0; i < k; i++ { + var temp, previous int + for j := 0; j < len(nums); j++ { + if j+1 < len(nums) { + if j == 0 { + previous = nums[0] + }else { + previous = temp + } + temp = nums[j+1] + nums[j+1] = previous + }else { + nums[0] = temp + } + + } + } +} +*/ +// 经典暴力法 +/* +func rotate(nums []int, k int) { + for i := 0; i < k; i++ { + var temp, previous int + previous = nums[len(nums) - 1] + for j := 0; j < len(nums); j++ { + temp = nums[j] + nums[j] = previous + previous = temp + } + } + fmt.Println(nums) +} +*/ +// 使用反转 +func rotate(nums []int, k int) { + k %= len(nums) + revers(&nums, 0, len(nums)-1) + revers(&nums, 0, k) + revers(&nums, k+1, len(nums)-1) + /* + // 全部反转 + rotateAll(&nums) + fmt.Println("第二次打印:", nums) + // 前部反转 + rotateFront(&nums, 0, k) + fmt.Println("第四次打印:", nums) + // 后部反转 + rotateBack(&nums, k, len(nums)) + fmt.Println("第六次打印:", nums) + */ +} +// 全部反转 +// 使用双指针夹逼替换 +/* +func rotateAll(nums *[]int) { + for i := 0; i < len(*nums)/2; i++ { + var temp int + temp = (*nums)[i] + (*nums)[i] = (*nums)[len(*nums)-1-i] + (*nums)[len(*nums)-1-i] = temp + } + fmt.Println("第一次打印:", *nums) +} + +// 前部反转 +func rotateFront(nums *[]int, start, end int) { + for i := 0; i < end/2; i++ { + var temp int + temp = (*nums)[i+start] + (*nums)[i+start] = (*nums)[end-i-1] + (*nums)[end-i-1] = temp + } + fmt.Println("第三次打印:", *nums) +} + +// 后部反转 +func rotateBack(nums *[]int, start, end int) { + for i := 0; i < (end-start)/2; i++ { + fmt.Println("i = ", i, "start = ", start, "end = ", end) + var temp int + temp = (*nums)[i+start] + (*nums)[i+start] = (*nums)[end-i-1] + (*nums)[end-i-1] = temp + } + fmt.Println("第五次打印:", *nums) +} +*/ +// 对照leetcode使用反转解法 +func revers(num *[]int, start, end int) { + for start < end { + var temp int + temp = (*num)[start] + (*num)[start] = (*num)[end] + (*num)[end] = temp + start++ + end-- + } + fmt.Println(*num) +} From d87f254e3c1f98b5a209cb40715c33b50537cb86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E6=B3=A2?= Date: Sun, 16 Feb 2020 11:30:44 +0800 Subject: [PATCH 0136/1268] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E5=91=A8=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...350\275\254\346\225\260\347\273\204.swift" | 58 ++++++++++++++ ...351\207\215\345\244\215\351\241\271.swift" | 75 +++++++++++++++++++ ...347\247\273\345\212\250\351\233\266.swift" | 65 ++++++++++++++++ 3 files changed, 198 insertions(+) create mode 100644 "Week_01/G20200343030369/189.\346\227\213\350\275\254\346\225\260\347\273\204.swift" create mode 100644 "Week_01/G20200343030369/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.swift" create mode 100644 "Week_01/G20200343030369/283.\347\247\273\345\212\250\351\233\266.swift" diff --git "a/Week_01/G20200343030369/189.\346\227\213\350\275\254\346\225\260\347\273\204.swift" "b/Week_01/G20200343030369/189.\346\227\213\350\275\254\346\225\260\347\273\204.swift" new file mode 100644 index 00000000..b0314962 --- /dev/null +++ "b/Week_01/G20200343030369/189.\346\227\213\350\275\254\346\225\260\347\273\204.swift" @@ -0,0 +1,58 @@ +/* + * @lc app=leetcode.cn id=189 lang=swift + * + * [189] 旋转数组 + * + * https://leetcode-cn.com/problems/rotate-array/description/ + * + * algorithms + * Easy (40.37%) + * Likes: 487 + * Dislikes: 0 + * Total Accepted: 97.1K + * Total Submissions: 240.2K + * Testcase Example: '[1,2,3,4,5,6,7]\n3' + * + * 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 + * + * 示例 1: + * + * 输入: [1,2,3,4,5,6,7] 和 k = 3 + * 输出: [5,6,7,1,2,3,4] + * 解释: + * 向右旋转 1 步: [7,1,2,3,4,5,6] + * 向右旋转 2 步: [6,7,1,2,3,4,5] + * 向右旋转 3 步: [5,6,7,1,2,3,4] + * + * + * 示例 2: + * + * 输入: [-1,-100,3,99] 和 k = 2 + * 输出: [3,99,-1,-100] + * 解释: + * 向右旋转 1 步: [99,-1,-100,3] + * 向右旋转 2 步: [3,99,-1,-100] + * + * 说明: + * + * + * 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。 + * 要求使用空间复杂度为 O(1) 的 原地 算法。 + * + * + */ + +// @lc code=start +class Solution { + func rotate(_ nums: inout [Int], _ k: Int) { + rotate0(&nums, k) + } + + private func rotate0(_ nums: inout [Int], _ k: Int) { + let mod = k % nums.count + nums.reverse() + nums[0.. Int { + return removeDuplicates0(&nums) + } + + private func removeDuplicates0(_ nums: inout [Int]) -> Int { + var i = 0 + if nums.count >= 1 { + for j in 1.. Date: Sun, 16 Feb 2020 11:47:15 +0800 Subject: [PATCH 0137/1268] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E5=91=A8LeetCode?= =?UTF-8?q?=E9=A2=98=E7=9B=AE=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030019/LeetCode_189_019.java | 24 +++++ Week_01/G20200343030019/LeetCode_1_019.java | 13 +++ Week_01/G20200343030019/LeetCode_21_019.java | 23 +++++ Week_01/G20200343030019/LeetCode_26_019.java | 19 ++++ Week_01/G20200343030019/LeetCode_283_019.java | 15 +++ Week_01/G20200343030019/LeetCode_42_019.java | 28 ++++++ Week_01/G20200343030019/LeetCode_641_019.java | 99 +++++++++++++++++++ Week_01/G20200343030019/LeetCode_66_019.java | 20 ++++ Week_01/G20200343030019/LeetCode_88_019.java | 18 ++++ 9 files changed, 259 insertions(+) create mode 100644 Week_01/G20200343030019/LeetCode_189_019.java create mode 100644 Week_01/G20200343030019/LeetCode_1_019.java create mode 100644 Week_01/G20200343030019/LeetCode_21_019.java create mode 100644 Week_01/G20200343030019/LeetCode_26_019.java create mode 100644 Week_01/G20200343030019/LeetCode_283_019.java create mode 100644 Week_01/G20200343030019/LeetCode_42_019.java create mode 100644 Week_01/G20200343030019/LeetCode_641_019.java create mode 100644 Week_01/G20200343030019/LeetCode_66_019.java create mode 100644 Week_01/G20200343030019/LeetCode_88_019.java diff --git a/Week_01/G20200343030019/LeetCode_189_019.java b/Week_01/G20200343030019/LeetCode_189_019.java new file mode 100644 index 00000000..a83c64da --- /dev/null +++ b/Week_01/G20200343030019/LeetCode_189_019.java @@ -0,0 +1,24 @@ +class Solution { + public void rotate(int[] nums, int k) { + if (k == 0 || nums == null || nums.length <= 1) { + return; + } + int startIndex = 0; + int index = 0; + int tmp = nums[0]; + int tmp2 = 0; + int nextIndex = 0; + for (int i = 0; i < nums.length; i ++) { + if (i > 0 && startIndex == index) { + index ++; + startIndex ++; + tmp = nums[index]; + } + nextIndex = (index + k) % nums.length; + tmp2 = nums[nextIndex]; + nums[nextIndex] = tmp; + index = nextIndex; + tmp = tmp2; + } + } +} \ No newline at end of file diff --git a/Week_01/G20200343030019/LeetCode_1_019.java b/Week_01/G20200343030019/LeetCode_1_019.java new file mode 100644 index 00000000..6d1223d1 --- /dev/null +++ b/Week_01/G20200343030019/LeetCode_1_019.java @@ -0,0 +1,13 @@ +class Solution { + public int[] twoSum(int[] nums, int target) { + Map map = new HashMap(); + for (int index = 0; index < nums.length; index ++) { + if (map.containsKey(target - nums[index])) { + return new int[]{map.get(target - nums[index]), index}; + } + map.put(nums[index], index); + } + + throw new RuntimeException("not have tow num sum to target!"); + } +} \ No newline at end of file diff --git a/Week_01/G20200343030019/LeetCode_21_019.java b/Week_01/G20200343030019/LeetCode_21_019.java new file mode 100644 index 00000000..98dd514e --- /dev/null +++ b/Week_01/G20200343030019/LeetCode_21_019.java @@ -0,0 +1,23 @@ +class Solution { + public ListNode mergeTwoLists(ListNode l1, ListNode l2) { + ListNode head = new ListNode(0); + ListNode node = head; + while (l1 != null && l2 != null) { + if (l1.val < l2.val) { + node.next = l1; + l1 = l1.next; + } else { + node.next = l2; + l2 = l2.next; + } + node = node.next; + } + if (l1 != null) { + node.next = l1; + } + if (l2 != null) { + node.next = l2; + } + return head.next; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030019/LeetCode_26_019.java b/Week_01/G20200343030019/LeetCode_26_019.java new file mode 100644 index 00000000..2ea8cb9d --- /dev/null +++ b/Week_01/G20200343030019/LeetCode_26_019.java @@ -0,0 +1,19 @@ +class Solution { + public int removeDuplicates(int[] nums) { + if (nums == null || nums.length <= 0) { + return 0; + } + if (nums.length ==1) { + return 1; + } + int repeatNum = 0; + for (int index = 1; index < nums.length; index ++) { + if (nums[index] == nums[index -1]) { + repeatNum ++; + } else { + nums[index - repeatNum] = nums[index]; + } + } + return nums.length - repeatNum; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030019/LeetCode_283_019.java b/Week_01/G20200343030019/LeetCode_283_019.java new file mode 100644 index 00000000..c58abfca --- /dev/null +++ b/Week_01/G20200343030019/LeetCode_283_019.java @@ -0,0 +1,15 @@ +class Solution { + public void moveZeroes(int[] nums) { + int zeroIndex = 0; + for (int index = 0; index < nums.length; index ++) { + if(nums[index] != 0) { + if (index == zeroIndex) { + zeroIndex ++; + continue; + } + nums[zeroIndex ++] = nums[index]; + nums[index] = 0; + } + } + } +} \ No newline at end of file diff --git a/Week_01/G20200343030019/LeetCode_42_019.java b/Week_01/G20200343030019/LeetCode_42_019.java new file mode 100644 index 00000000..196ce8a5 --- /dev/null +++ b/Week_01/G20200343030019/LeetCode_42_019.java @@ -0,0 +1,28 @@ +class Solution { + public int trap(int[] height) { + if (height.length < 3) { + return 0; + } + int left = 0; + int leftH = height[left]; + int right = height.length -1; + int rightH = height[right]; + int area = 0; + while (left < right) { + if (height[left] <= height[right]) { + area += leftH - height[left]; + left ++; + if (height[left] > leftH) { + leftH = height[left]; + } + } else { + area += rightH - height[right]; + right --; + if (height[right] > rightH) { + rightH = height[right]; + } + } + } + return area; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030019/LeetCode_641_019.java b/Week_01/G20200343030019/LeetCode_641_019.java new file mode 100644 index 00000000..e359b0f5 --- /dev/null +++ b/Week_01/G20200343030019/LeetCode_641_019.java @@ -0,0 +1,99 @@ +class MyCircularDeque { + private int capacity; + private int size; + private int[] arr; + private int head; + private int tail; + /** Initialize your data structure here. Set the size of the deque to be k. */ + public MyCircularDeque(int k) { + arr = new int[k]; + capacity = k; + } + + /** Adds an item at the front of Deque. Return true if the operation is successful. */ + public boolean insertFront(int value) { + if (size >= capacity) { + return false; + } + head = (head + capacity - 1) % capacity; + arr[head] = value; + size ++; + return true; + } + + /** Adds an item at the rear of Deque. Return true if the operation is successful. */ + public boolean insertLast(int value) { + if (size >= capacity) { + return false; + } + arr[tail] = value; + tail = (tail + capacity + 1) % capacity; + size ++; + return true; + } + + /** Deletes an item from the front of Deque. Return true if the operation is successful. */ + public boolean deleteFront() { + if (size <= 0) { + return false; + } + head = (head + capacity + 1) % capacity; + size --; + return true; + } + + /** Deletes an item from the rear of Deque. Return true if the operation is successful. */ + public boolean deleteLast() { + if (size <= 0) { + return false; + } + tail = (tail + capacity - 1) % capacity; + size --; + return true; + } + + /** Get the front item from the deque. */ + public int getFront() { + if (size <= 0) { + return -1; + } + return arr[head]; + } + + /** Get the last item from the deque. */ + public int getRear() { + if (size <= 0) { + return -1; + } + return arr[(tail + capacity - 1) % capacity]; + } + + /** Checks whether the circular deque is empty or not. */ + public boolean isEmpty() { + if (size <= 0) { + return true; + } + return false; + } + + /** Checks whether the circular deque is full or not. */ + public boolean isFull() { + if (size >= capacity) { + return true; + } + return false; + } +} + +/** + * Your MyCircularDeque object will be instantiated and called as such: + * MyCircularDeque obj = new MyCircularDeque(k); + * boolean param_1 = obj.insertFront(value); + * boolean param_2 = obj.insertLast(value); + * boolean param_3 = obj.deleteFront(); + * boolean param_4 = obj.deleteLast(); + * int param_5 = obj.getFront(); + * int param_6 = obj.getRear(); + * boolean param_7 = obj.isEmpty(); + * boolean param_8 = obj.isFull(); + */ \ No newline at end of file diff --git a/Week_01/G20200343030019/LeetCode_66_019.java b/Week_01/G20200343030019/LeetCode_66_019.java new file mode 100644 index 00000000..d8db5384 --- /dev/null +++ b/Week_01/G20200343030019/LeetCode_66_019.java @@ -0,0 +1,20 @@ +class Solution { + public int[] plusOne(int[] digits) { + if (digits == null || digits.length <= 0) { + return digits; + } + digits[digits.length -1] ++; + for (int index = digits.length - 1; index >= 0 && digits[index] > 9; index --) { + digits[index] -= 10; + if (index == 0) { + int[] newArr = new int[digits.length + 1]; + System.arraycopy(digits, 0, newArr, 1, digits.length); + newArr[0] = 1; + digits = newArr; + break; + } + digits[index - 1] ++; + } + return digits; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030019/LeetCode_88_019.java b/Week_01/G20200343030019/LeetCode_88_019.java new file mode 100644 index 00000000..83bc8fd2 --- /dev/null +++ b/Week_01/G20200343030019/LeetCode_88_019.java @@ -0,0 +1,18 @@ +class Solution { + public void merge(int[] nums1, int m, int[] nums2, int n) { + if (m == 0) { + System.arraycopy(nums2, 0, nums1, 0, n); + } + int index = m-- + n-- - 1; + while (m >=0 && n >= 0) { + if (nums1[m] > nums2[n]) { + nums1[index--] = nums1[m--]; + } else { + nums1[index--] = nums2[n--]; + } + } + while (n >= 0) { + nums1[index--] = nums2[n--]; + } + } +} \ No newline at end of file From 28a06d2711d0c9de44e38b24655526d0e7e8baa2 Mon Sep 17 00:00:00 2001 From: FatWhale <59955510+FatFat-Whale@users.noreply.github.com> Date: Sun, 16 Feb 2020 12:07:49 +0800 Subject: [PATCH 0138/1268] Create plus-one-code-442.java --- Week_01/G20200343030443/plus-one-code-442.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Week_01/G20200343030443/plus-one-code-442.java diff --git a/Week_01/G20200343030443/plus-one-code-442.java b/Week_01/G20200343030443/plus-one-code-442.java new file mode 100644 index 00000000..83af56f7 --- /dev/null +++ b/Week_01/G20200343030443/plus-one-code-442.java @@ -0,0 +1,17 @@ +class Solution { + public int[] plusOne(int[] digits) { + if (digits[0] == 0) + return new int[] { 1 }; + if (++digits[digits.length - 1] < 10) + return digits; + for (int i = digits.length - 1; i >= 1 && digits[i] >= 10; i--) { + digits[i] -= 10; + digits[i - 1]++; + } + if (digits[0] < 10) + return digits; + int[] result = new int[digits.length + 1]; + result[0] = 1; + return result; + } +} From 222cb5f10d640c2f45489149b19833ed5889371a Mon Sep 17 00:00:00 2001 From: FatWhale <59955510+FatFat-Whale@users.noreply.github.com> Date: Sun, 16 Feb 2020 12:09:59 +0800 Subject: [PATCH 0139/1268] Create move-zeroes-code-443.java --- Week_01/G20200343030443/move-zeroes-code-443.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Week_01/G20200343030443/move-zeroes-code-443.java diff --git a/Week_01/G20200343030443/move-zeroes-code-443.java b/Week_01/G20200343030443/move-zeroes-code-443.java new file mode 100644 index 00000000..32f104a8 --- /dev/null +++ b/Week_01/G20200343030443/move-zeroes-code-443.java @@ -0,0 +1,15 @@ +class Solution { + public void moveZeroes(int[] nums) { + int i, j;// i:全递增,j:非零递增 + for (i = 0, j = 0; i < nums.length; i++) { + if (nums[i] != 0) { + nums[j] = nums[i]; + j++; + } + } + // i结束遍历后,从j开始后面全部赋值0 + for (; j < nums.length; j++) { + nums[j] = 0; + } + } +} From e1a5387c551cec37adda39d8bc2ddb1f7eb039e5 Mon Sep 17 00:00:00 2001 From: mahuiming <807741077@qq.com> Date: Sun, 16 Feb 2020 12:12:09 +0800 Subject: [PATCH 0140/1268] 453-Week 01 --- Week_00/G20200343030453/LeetCode_21_453 | 71 +++++++++++++ Week_00/G20200343030453/LeetCode_26_453 | 16 +++ Week_00/G20200343030453/LeetCode_42_453 | 22 ++++ Week_00/G20200343030453/LeetCode_641_453 | 123 +++++++++++++++++++++++ Week_00/G20200343030453/NOTE.md | 36 ++++++- 5 files changed, 267 insertions(+), 1 deletion(-) create mode 100644 Week_00/G20200343030453/LeetCode_21_453 create mode 100644 Week_00/G20200343030453/LeetCode_26_453 create mode 100644 Week_00/G20200343030453/LeetCode_42_453 create mode 100644 Week_00/G20200343030453/LeetCode_641_453 diff --git a/Week_00/G20200343030453/LeetCode_21_453 b/Week_00/G20200343030453/LeetCode_21_453 new file mode 100644 index 00000000..327c89b4 --- /dev/null +++ b/Week_00/G20200343030453/LeetCode_21_453 @@ -0,0 +1,71 @@ +/* + * @lc app=leetcode.cn id=21 lang=c + * + * [21] 合并两个有序链表 + */ + +// @lc code=start +/** + * Definition for singly-linked list. + * struct ListNode { + * int val; + * struct ListNode *next; + * }; + */ + +// 解法一 迭代 +struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){ + if(!l1 || !l2) { + return l1 == NULL ? l2 : l1; + } + struct ListNode *head = NULL; + if(l1 -> val < l2 -> val) { + head = l1; + l1 = l1 -> next; + } + else { + head = l2; + l2 = l2 -> next; + } + struct ListNode *p = head; + while(l1 || l2) { + if(!l1) { + p -> next = l2; + break; + } + else if(!l2) { + p -> next = l1; + break; + } + else if(l1 -> val < l2 -> val) { + p -> next = l1; + p = p -> next; + l1 = l1 -> next; + } + else { + p -> next = l2; + p = p -> next; + l2 = l2 -> next; + } + } + return head; +} + + +// 解法二 递归 +struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){ + if(!l1) { + return l2; + } + else if(!l2) { + return l1; + } + else if(l1 -> val < l2 -> val) { + l1 -> next = mergeTwoLists(l1 -> next, l2); + return l1; + } + else { + l2 -> next = mergeTwoLists(l1, l2 -> next); + return l2; + } +} \ No newline at end of file diff --git a/Week_00/G20200343030453/LeetCode_26_453 b/Week_00/G20200343030453/LeetCode_26_453 new file mode 100644 index 00000000..ad9d7262 --- /dev/null +++ b/Week_00/G20200343030453/LeetCode_26_453 @@ -0,0 +1,16 @@ +//[26] 删除排序数组中的重复项 +int removeDuplicates(int* nums, int numsSize){ + // 1. 暴力法 + // 2. 双指针 O(n) + if(numsSize < 2) { + return numsSize; + } + int i = 0; + int j = 0; + for(i = 1; i < numsSize; i++) { + if(nums[i] != nums[j]) { + nums[++j] = nums[i]; + } + } + return j + 1; +} \ No newline at end of file diff --git a/Week_00/G20200343030453/LeetCode_42_453 b/Week_00/G20200343030453/LeetCode_42_453 new file mode 100644 index 00000000..25d8d5f6 --- /dev/null +++ b/Week_00/G20200343030453/LeetCode_42_453 @@ -0,0 +1,22 @@ +// [42] 接雨水 + +int trap(int* height, int heightSize){ + + // 暴力法 + int i, j; + int size = 0; + for(i = 0; i < heightSize; i++) { + int leftmax = 0, rightmax = 0; + for(j = 0; j < i; j++) { + leftmax = leftmax < height[j] ? height[j] : leftmax; + } + for(j = i + 1; j < heightSize; j++) { + rightmax = rightmax < height[j] ? height[j] : rightmax; + } + int temp = leftmax < rightmax ? leftmax : rightmax; + if(temp > height[i]) { + size += temp - height[i]; + } + } + return size; +} \ No newline at end of file diff --git a/Week_00/G20200343030453/LeetCode_641_453 b/Week_00/G20200343030453/LeetCode_641_453 new file mode 100644 index 00000000..c7720274 --- /dev/null +++ b/Week_00/G20200343030453/LeetCode_641_453 @@ -0,0 +1,123 @@ +// [641] 设计循环双端队列 + +typedef struct { + int *data; + int capacity; + int head; + int tail; +} MyCircularDeque; + +/** Initialize your data structure here. Set the size of the deque to be k. */ + +bool myCircularDequeIsEmpty(MyCircularDeque* obj); +bool myCircularDequeIsFull(MyCircularDeque* obj); + +MyCircularDeque* myCircularDequeCreate(int k) { + MyCircularDeque *Dq = (MyCircularDeque *)calloc(1 , sizeof(MyCircularDeque)); + Dq -> data = (int *)calloc(k + 1, sizeof(int)); + Dq -> capacity = k + 1; + Dq -> head = Dq -> tail = 0; + return Dq; +} + +/** Adds an item at the front of Deque. Return true if the operation is successful. */ +bool myCircularDequeInsertFront(MyCircularDeque* obj, int value) { + if(!myCircularDequeIsFull(obj)) { + obj -> head = (obj -> head - 1 + obj -> capacity) % obj -> capacity; + obj -> data[obj -> head] = value; + return true; + } + return false; +} + +/** Adds an item at the rear of Deque. Return true if the operation is successful. */ +bool myCircularDequeInsertLast(MyCircularDeque* obj, int value) { + + if(!myCircularDequeIsFull(obj)) { + obj -> data[obj -> tail] = value; + obj -> tail = (obj -> tail + 1) % obj -> capacity; + return true; + } + return false; +} + +/** Deletes an item from the front of Deque. Return true if the operation is successful. */ +bool myCircularDequeDeleteFront(MyCircularDeque* obj) { + + if(!myCircularDequeIsEmpty(obj)) { + obj -> head = (obj -> head + 1) % obj -> capacity; // 问题 + return true; + } + return false; +} + +/** Deletes an item from the rear of Deque. Return true if the operation is successful. */ +bool myCircularDequeDeleteLast(MyCircularDeque* obj) { + + if(!myCircularDequeIsEmpty(obj)) { + obj -> tail = (obj -> tail - 1 + obj -> capacity) % obj -> capacity; + return true; + } + return false; +} + +/** Get the front item from the deque. */ +int myCircularDequeGetFront(MyCircularDeque* obj) { + if(myCircularDequeIsEmpty(obj)) { + return -1; + } + + return obj -> data[obj -> head]; +} + +/** Get the last item from the deque. */ +int myCircularDequeGetRear(MyCircularDeque* obj) { + + if(myCircularDequeIsEmpty(obj)) { + return -1; + } + return obj -> data[(obj -> tail - 1 + obj -> capacity) % obj -> capacity]; +} + +/** Checks whether the circular deque is empty or not. */ +bool myCircularDequeIsEmpty(MyCircularDeque* obj) { + + return obj -> head == obj -> tail ? true : false; +} + +/** Checks whether the circular deque is full or not. */ +bool myCircularDequeIsFull(MyCircularDeque* obj) { + + return (obj -> tail + 1) % obj -> capacity == obj -> head ? true : false; +} + +void myCircularDequeFree(MyCircularDeque* obj) { + if(obj != NULL) { + free(obj -> data); + obj -> data = NULL; + free(obj); + obj = NULL; + } +} + +/** + * Your MyCircularDeque struct will be instantiated and called as such: + * MyCircularDeque* obj = myCircularDequeCreate(k); + * bool param_1 = myCircularDequeInsertFront(obj, value); + + * bool param_2 = myCircularDequeInsertLast(obj, value); + + * bool param_3 = myCircularDequeDeleteFront(obj); + + * bool param_4 = myCircularDequeDeleteLast(obj); + + * int param_5 = myCircularDequeGetFront(obj); + + * int param_6 = myCircularDequeGetRear(obj); + + * bool param_7 = myCircularDequeIsEmpty(obj); + + * bool param_8 = myCircularDequeIsFull(obj); + + * myCircularDequeFree(obj); +*/ \ No newline at end of file diff --git a/Week_00/G20200343030453/NOTE.md b/Week_00/G20200343030453/NOTE.md index 50de3041..fdec6200 100644 --- a/Week_00/G20200343030453/NOTE.md +++ b/Week_00/G20200343030453/NOTE.md @@ -1 +1,35 @@ -学习笔记 \ No newline at end of file +学习笔记 + +学号:G20200343030453 姓名: 马辉明 + +日期: 2020.2.16 + +[21] 合并两个有序链表 题目总结 +(1)迭代法: +归并排序的思想,因为两个链表有序,只做一次排序即可,稍作改进,当其中一个有序表结束时,可以将 next 指向另一个链表的剩余节点,不需要遍历完之后作判断,这样节省了比较时间,时间复杂度 O(n + m) +(2)递归法:终止条件:当 l1 或 l2 为空时,返回剩余 l2 或 l1 结束; +返回值为每一层都已排好序的头指针; +递归内容:当 l1 的值 val 较小时,l1 的 next 指向之后排完序的链表头,否则,l2 的 next 指向排好序的链表头; +时间复杂度:O(n + m)空间复杂度也是一样,递归会消耗(n + m)个栈空间 + +[42] 接雨水 题目总结 +(1) 暴力法 遍历每一根柱子,找出该柱子左右两边最高的柱子取较小值,较小值与当前柱子差值为接雨水数 +此题有很多解法,后续抽空总结... + +[641] 设计循环双端队列 题目总结 https://blog.csdn.net/xiaoma_2018/article/details/103997820 +实现该循环队列,需要注意以下几点: + +1.判断队列为空? 当收尾指针相等,队列为空,head == tail +2.判断队列已满? 当尾指针的下一位等于头指针,队列已满,(tail + 1 + capacity) % capacity == head; +3.初始化队列时? 首尾指针从0开始, head = tail = 0 +4.从头部插入数据? head 指针向前移动, head = (head - 1 + capacity) % capacity +5.从尾部插入数据? tail 指针向后移动, tail = (tail + 1) % capacity +6.从头部删除数据? head 指针向后移动, head = (head + 1) % capacity +7.从尾部删除数据? tail 指针向前移动, tail = (tail - 1 + capacity) % capacity +8.从尾部读取数据? 考虑头部插入(head 前移一位)和尾部插入(插入后,tail后移一位),所以读取data[(tail - 1 + capacity) % capacity] + +[26] 删除排序数组中的重复项 题目总结 + +用双指针遍历 + + From ba233cc7d8f7710ff05549a0992458902f8a2c1b Mon Sep 17 00:00:00 2001 From: Lovice Date: Sun, 16 Feb 2020 12:14:10 +0800 Subject: [PATCH 0141/1268] Week 01 --- Week_01/G20200343030491/LeetCode_189_491.py | 10 ++++++ Week_01/G20200343030491/LeetCode_21_491.py | 37 +++++++++++++++++++++ Week_01/G20200343030491/LeetCode_83_491.py | 18 ++++++++++ Week_01/G20200343030491/LeetCode_88_491.py | 29 ++++++++++++++++ 4 files changed, 94 insertions(+) create mode 100644 Week_01/G20200343030491/LeetCode_189_491.py create mode 100644 Week_01/G20200343030491/LeetCode_21_491.py create mode 100644 Week_01/G20200343030491/LeetCode_83_491.py create mode 100644 Week_01/G20200343030491/LeetCode_88_491.py diff --git a/Week_01/G20200343030491/LeetCode_189_491.py b/Week_01/G20200343030491/LeetCode_189_491.py new file mode 100644 index 00000000..db6a3505 --- /dev/null +++ b/Week_01/G20200343030491/LeetCode_189_491.py @@ -0,0 +1,10 @@ +class Solution: + def rotate(self, nums: List[int], k: int) -> None: + """ + Do not return anything, modify nums in-place instead. + """ + n = len(nums) + k %= n + temp = (nums + nums)[n-k:2*n-k] + for i in range(n): + nums[i] = temp[i] \ No newline at end of file diff --git a/Week_01/G20200343030491/LeetCode_21_491.py b/Week_01/G20200343030491/LeetCode_21_491.py new file mode 100644 index 00000000..80b31bdd --- /dev/null +++ b/Week_01/G20200343030491/LeetCode_21_491.py @@ -0,0 +1,37 @@ +# Definition for singly-linked list. +class ListNode: + def __init__(self, x): + self.val = x + self.next = None + +def mergeTwoLists(l1, l2): + dummy = ListNode(-1) + newHead = dummy + while l1 and l2: + if l1.val<=l2.val: + newHead.next = l1 + l1 = l1.next + else: + newHead.next = l2 + l2 = l2.next + newHead = newHead.next + newHead.next = l1 if l1 is not None else l2 + return dummy.next + +def mergeTwoListsRec(l1,l2): + if not l1 or not l2: + return l1 or l2 + + if l1.val <= l2.val: + l1.next = mergeTwoListsRec(l1.next, l2) + return l1 + else: + l2.next = mergeTwoListsRec(l1, l2.next) + return l2 + +def mergeTwoListsRecSimple(l1, l2): + if l1 and l2: + if l1.val > l2.val: + l1, l2 = l2, l1 + l1.next = mergeTwoListsRecSimple(l1.next, l2) + return l1 or l2 \ No newline at end of file diff --git a/Week_01/G20200343030491/LeetCode_83_491.py b/Week_01/G20200343030491/LeetCode_83_491.py new file mode 100644 index 00000000..c318ca70 --- /dev/null +++ b/Week_01/G20200343030491/LeetCode_83_491.py @@ -0,0 +1,18 @@ +# Definition for singly-linked list. +# class ListNode: +# def __init__(self, x): +# self.val = x +# self.next = None + +class Solution: + def deleteDuplicates(self, head: ListNode) -> ListNode: + cur1, cur2 = head, head + while cur2 and cur2.next: + if cur1.val == cur2.next.val: + cur2 = cur2.next + else: + cur1.next = cur2.next + cur1, cur2 = cur2.next, cur2.next + if cur2 and not cur2.next: + cur1.next = cur2.next + return head \ No newline at end of file diff --git a/Week_01/G20200343030491/LeetCode_88_491.py b/Week_01/G20200343030491/LeetCode_88_491.py new file mode 100644 index 00000000..d59a2496 --- /dev/null +++ b/Week_01/G20200343030491/LeetCode_88_491.py @@ -0,0 +1,29 @@ +def merge_pythonic(nums1,m,nums2,n): + nums1 = nums1[:m] + nums1.extend(nums2) + nums1.sort() + return nums1 + +def merge(nums1,m,nums2,n): + while n > 0: + if m<= 0 or nums1[m-1] <= nums2[n-1]: + nums1[m+n-1] = nums2[n-1] + n -= 1 + else: + nums1[m+n-1] = nums1[m-1] + m -= 1 + return nums1 + +def mergeRec(nums1,m,nums2,n): + if n == 0: + return + if m == 0: + nums1[:n] = nums2[:n] + return + maxVal = max(nums1[m-1],nums2[n-1]) + nums1[m+n-1] = maxVal + if (maxVal == nums1[m-1]): + mergeRec(nums1,m-1,nums2,n) + else: + mergeRec(nums1,m,nums2,n-1) + \ No newline at end of file From 796d236866da57f3fef2b0a395ff847838c116e1 Mon Sep 17 00:00:00 2001 From: wangfeng Date: Sun, 16 Feb 2020 12:15:13 +0800 Subject: [PATCH 0142/1268] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E5=91=A8=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_00/G20200343030503/LeetCode_11_503.java | 32 +++++++ Week_00/G20200343030503/LeetCode_15_503.java | 44 ++++++++++ Week_00/G20200343030503/LeetCode_189_503.java | 25 ++++++ Week_00/G20200343030503/LeetCode_1_503.java | 38 ++++++++ Week_00/G20200343030503/LeetCode_22_503.java | 24 +++++ Week_00/G20200343030503/LeetCode_283_503.java | 22 +++++ Week_00/G20200343030503/LeetCode_66_503.java | 25 ++++++ Week_00/G20200343030503/LeetCode_70_503.java | 28 ++++++ Week_00/G20200343030503/LeetCode_88_503.java | 88 +++++++++++++++++++ Week_00/G20200343030503/NOTE.md | 71 ++++++++++++++- 10 files changed, 396 insertions(+), 1 deletion(-) create mode 100644 Week_00/G20200343030503/LeetCode_11_503.java create mode 100644 Week_00/G20200343030503/LeetCode_15_503.java create mode 100644 Week_00/G20200343030503/LeetCode_189_503.java create mode 100644 Week_00/G20200343030503/LeetCode_1_503.java create mode 100644 Week_00/G20200343030503/LeetCode_22_503.java create mode 100644 Week_00/G20200343030503/LeetCode_283_503.java create mode 100644 Week_00/G20200343030503/LeetCode_66_503.java create mode 100644 Week_00/G20200343030503/LeetCode_70_503.java create mode 100644 Week_00/G20200343030503/LeetCode_88_503.java diff --git a/Week_00/G20200343030503/LeetCode_11_503.java b/Week_00/G20200343030503/LeetCode_11_503.java new file mode 100644 index 00000000..2cb2a22b --- /dev/null +++ b/Week_00/G20200343030503/LeetCode_11_503.java @@ -0,0 +1,32 @@ +/** + * 采用双指针向中间移动 + * 1. 遍历数组 并且定义2个指针 rear和head 如果head < rear 就遍历 + * 2. 求面积 s = x * y + * x = (rear - head) + * y = Math.min(nums[rear],nums[head]); + * 3. 取出最大的面积 + * + * 最容易出现问题的就是: 三目运算中++ -- 的使用 + * + */ +class Solution { + public int maxArea(int[] nums) { + int maxArea = 0; + for (int head = 0,rear = nums.length - 1; head < rear; ) { + //int minHeight = nums[head] > nums[rear] ? nums[rear--] : nums[head++] ; + int minHeight = 0; + if (nums[head] > nums[rear]) { + minHeight = nums[rear]; + rear --; + }else { + minHeight = nums[head]; + head ++; + } + + int area = (rear - head + 1) * minHeight; + maxArea = Math.max(maxArea,area); + + } + return maxArea; + } +} \ No newline at end of file diff --git a/Week_00/G20200343030503/LeetCode_15_503.java b/Week_00/G20200343030503/LeetCode_15_503.java new file mode 100644 index 00000000..5b984315 --- /dev/null +++ b/Week_00/G20200343030503/LeetCode_15_503.java @@ -0,0 +1,44 @@ +/** + * + * 三数之和 + * 核心思想 排序 + 双指针 或者 使用哈希表 + * 排序 + 双指针 中 1. 排序是前提(特别注意排序问题) 2. 双指针向内收敛 + * 难以想到的地方: + * sum = 0的时候去完重复 i和j都需要变化 i++ j-- + * + */ + +class Solution { + public List> threeSum(int[] nums) { + //结果保存在list集合中 + List> result = new ArrayList<>(); + //排序 + Arrays.sort(nums); + //遍历集合 + //定义2个指针 i、j + int i; + int j; + for (int k = 0; k < nums.length; k++) { + // 因为已经排好序nums[k],nums[i],nums[j]中nums[k]最小,如果nums[k]大于0那么三数只和就不可能等于0,直接返回 + if (nums[k] > 0) break; + //k对应元素去重 + if (k > 0 && nums[k] == nums[k-1]) continue; + i = k + 1; //i从k的下一个元素开始 + j = nums.length - 1;//j从最后一个元素开始 + while (i < j) { + int sum = nums[k] + nums[i] + nums[j]; + if ( sum == 0) { + result.add(Arrays.asList(nums[k],nums[i],nums[j])); + //i、j元素去重 + while (i < j && nums[i] == nums[i+1]) { i++; } + while (i < j && nums[j] == nums[j-1]) { j--; } + i++; + j--; + } + else if (sum < 0) i ++; + else j --; + } + } + return result; + } +} \ No newline at end of file diff --git a/Week_00/G20200343030503/LeetCode_189_503.java b/Week_00/G20200343030503/LeetCode_189_503.java new file mode 100644 index 00000000..44134e72 --- /dev/null +++ b/Week_00/G20200343030503/LeetCode_189_503.java @@ -0,0 +1,25 @@ +/** + * + * homework + * https://leetcode-cn.com/problems/rotate-array/ + * + * 题目要点: 1. 使用取余的方式判断i+k大于len 则从头开始 arr[(i + k) % nums.length] + * 2. 需要重新开辟一个数组去存放旋转之后的值 用于改变原数组的顺序 + * time complexity O(n) + * space complexity O(n) + * 关于官方题解中的 使用环状和使用反转 现阶段理解比较困难 + * + */ +class Solution { + public void rotate(int[] nums, int k) { + int[] arr = new int[nums.length]; + + for (int i = 0; i < nums.length; i++) { + arr[(i + k) % nums.length] = nums[i]; + } + + for (int i = 0; i < arr.length; i++) { + nums[i] = arr[i]; + } + } +} \ No newline at end of file diff --git a/Week_00/G20200343030503/LeetCode_1_503.java b/Week_00/G20200343030503/LeetCode_1_503.java new file mode 100644 index 00000000..a21bccfe --- /dev/null +++ b/Week_00/G20200343030503/LeetCode_1_503.java @@ -0,0 +1,38 @@ +/* + * homework + * https://leetcode-cn.com/problems/two-sum/ + * 方式一、 暴力求解法 + * 双层for循环 + * time complexity O(n^2) + * space complexity O(1) + * 方式二、 使用哈希表 + * time complexity O(n) 只遍历了一边nums所以时间复杂度是O(n) + * space complexity O(n) 空间复杂度取决于hash表中元素的个数 + * + * + * + * 题目明确: 每种输入只会对应一个答案 + */ +class Solution { + // public int[] twoSum(int[] nums, int target) { + // for (int i = 0; i < nums.length; i++) { + // for (int j = i + 1; j < nums.length; j++) { + // if (nums[i] + nums[j] == target) { + // return new int[] { i, j }; + // } + // } + // } + + // throw new IllegalArgumentException("No two sum solution"); + // } + public int[] twoSum(int[] nums, int target) { + Map map = new HashMap(); + for (int i = 0; i < nums.length; i++) { + if (map.containsKey(target - nums[i])) { + return new int[]{i,map.get(target - nums[i])}; + } + map.put(nums[i],i); + } + throw new IllegalArgumentException("No two sum solution"); + } +} \ No newline at end of file diff --git a/Week_00/G20200343030503/LeetCode_22_503.java b/Week_00/G20200343030503/LeetCode_22_503.java new file mode 100644 index 00000000..fba1a0e8 --- /dev/null +++ b/Week_00/G20200343030503/LeetCode_22_503.java @@ -0,0 +1,24 @@ +/** + * + * homework + * https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/ + * + * 题目要点: 1. 有序的数组 2. 双指针法解决相同元素 3. 返回的是新数组的长度 + * 特别注意: 遍历的时候一定要根据返回的数组的新的长度进行遍历,否则会出现 eg. [1,1,2] ==> [1,2,2] + * time complexity O(n) + * space complexity O(1) + * + * + */ + +class Solution { + public int removeDuplicates(int[] nums) { + int j = 0; + for (int i = 1; i < nums.length; i++) { + if (nums[j] != nums[i]) { + nums[++j] = nums[i]; + } + } + return j + 1; + } +} \ No newline at end of file diff --git a/Week_00/G20200343030503/LeetCode_283_503.java b/Week_00/G20200343030503/LeetCode_283_503.java new file mode 100644 index 00000000..1d61fa52 --- /dev/null +++ b/Week_00/G20200343030503/LeetCode_283_503.java @@ -0,0 +1,22 @@ +class Solution { + /** + * + * 1. 遍历数组,如果元素不为0,先用nums[j]记录该值nums[i] + * 2. 判断如果j与i不想等,把nums[i]所对应的值改为0 否则继续遍历 + * 3. j++ + * + * 做这个题目的时候,老师的这段代码思想可以理解,就是最终卡到了赋值 i!=j num[i] = 0 这块,遇到第1个0开始,下一次遍历j和i 就不相同了此时要先使用nums[j]记录nums[i]当前的值,然后把nums[i]修改为0 + **/ + public void moveZeroes(int[] nums) { + int j = 0; + for (int i = 0; i < nums.length; i++) { + if (nums[i] != 0) { + nums[j] = nums[i]; + if (i != j ) { + nums[i] = 0; + } + j++; + } + } + } +} \ No newline at end of file diff --git a/Week_00/G20200343030503/LeetCode_66_503.java b/Week_00/G20200343030503/LeetCode_66_503.java new file mode 100644 index 00000000..8c7d07e6 --- /dev/null +++ b/Week_00/G20200343030503/LeetCode_66_503.java @@ -0,0 +1,25 @@ +/** + * + * homework + * https://leetcode-cn.com/problems/plus-one/ + * + * 题目理解: 其实就是多位数加1之后的值 特殊情况就是出现9的时候需要进位,如果999这种数字,加1之后需要进位,需要给数组扩容 + * time complexity O(n) + * space complexity O(1) + * + * + */ +class Solution { + public int[] plusOne(int[] digits) { + for (int i = digits.length - 1; i >= 0 ; i--) { + digits[i]++; + digits[i] = digits[i]%10; + if (digits[i] != 0) { + return digits; + } + } + digits = new int[digits.length + 1]; + digits[0] = 1; + return digits; + } +} \ No newline at end of file diff --git a/Week_00/G20200343030503/LeetCode_70_503.java b/Week_00/G20200343030503/LeetCode_70_503.java new file mode 100644 index 00000000..80e339b1 --- /dev/null +++ b/Week_00/G20200343030503/LeetCode_70_503.java @@ -0,0 +1,28 @@ +/** + * 爬楼梯 + * 方式一、 使用递归 + * 方式二、 初始化3个值,每次修改前2个值,第三个值等于前两个值只和 + * + */ +class Solution { + public int climbStairs(int n) { + // if (n <= 2) { + // return n; + // } + // return climbStairs(n - 1) + climbStairs(n - 2); + if(n <= 2) { + return n; + } + int step_one = 1; + int step_two = 2; + + int step_three = 0; + for (int i = 3 ; i <= n ;i++) { + step_three = step_two + step_one; + step_one = step_two; + step_two = step_three; + } + return step_three; + } + +} \ No newline at end of file diff --git a/Week_00/G20200343030503/LeetCode_88_503.java b/Week_00/G20200343030503/LeetCode_88_503.java new file mode 100644 index 00000000..2a9805d9 --- /dev/null +++ b/Week_00/G20200343030503/LeetCode_88_503.java @@ -0,0 +1,88 @@ +/** + * + * homework + * https://leetcode-cn.com/problems/merge-sorted-array/ + * + * 方式一、直接将数组二中的元素添加到数组一中然后排序 + * time complexity O(nlogn) Arrays.sort(arr) 内部用的是快排时间复杂度是nlogn > 大于for循环的时间复杂度n所以取大的nlog + * space complexity O(1) + * + * 方式二、将输出数组中的有效值存放到复制数组中nums1_copy, 分别定义2个指针到nums1_copy p1和nums2 p2 然后循环判断p1和p2所对应的值,将其添加到输出数组中 + * time complexity O(n + m) + * space complexity O(m) 使用了一个复制数组,所以空间复杂度为O(m) + * 方式二特别注意一点: 假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 如果没有这个条件那么会出现数组ArrayIndexOutOfBoundsException + * + * 方式三、 + * 核心思想,从后往前将nums2和nums1中有效值中大的一次放到nums1的最后 + * 实现: 定义三个指针分别从指向nums有效数值处p1,nums1的last处p,nums2的last处p2 + * time complexity O(n + m) + * space complexity O(1) 在原数组上进行的操作 + * + * + * 一定要注意: 题干明确表示需要 1. 有序整数数组 2. nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素 + * + */ + +时间复杂度O(n) 是不是只要是一层循环,就可以理解为时间复杂度就是O(n) +class Solution1 { + + public void merge1(int[] nums1, int m, int[] nums2, int n) { + int j = 0; + for (int i = m; i < m + n; i++) { + nums1[i] = nums2[j]; + j++; + } + Arrays.sort(nums1); + } + + public void merge2(int[] nums1, int m, int[] nums2, int n) { + //复制nums1的数组,保留有效数据位 + int[] nums1_copy = new int[m]; + System.arraycopy(nums1,0,nums1_copy,0,m); + //定义2个指针p1 0~m p2 0~n + int p1 = 0; + int p2 = 0; + int p = 0; + while (p1 < m && p2 < n) { + if (nums1_copy[p1] < nums2[p2]) { + nums1[p++] = nums1_copy[p1++]; + }else { + nums1[p++] = nums2[p2++]; + } + } + if (p1 < m) { + System.arraycopy(nums1_copy,p1,nums1,p1+p2,m+n-p1-p2); + } + if (p2 < n) { + System.arraycopy(nums2,p2,nums1,p1+p2,m+n-p1-p2); + } + } + /** + * 核心思想,因为题干明确 nums1 有足够的空间来保存 nums2 中的元素 + * 所以从nums1的last处开始存储nums1有效值与nums2中的最大值 + * @param nums1 + * @param m + * @param nums2 + * @param n + */ + public void merge3(int[] nums1, int m, int[] nums2, int n) { + //定义三个指针分别从指向nums有效数值处p1,nums1的last处p,nums2的last处p2 + //通常来说,下表总是从0开始,所以需要减1 + int p1 = m - 1; + int p2 = n - 1; + int p = m + n - 1; + + while (p1 >= 0 && p2>=0) { + if (nums1[p1] > nums2[p2]) { + nums1[p--] = nums1[p1--]; + }else { + nums1[p--] = nums2[p2--]; + } + } + //因为是在原数组nums1上进行操作,所以如果循环之后,nums1有多出来的不需要动,nums2多出来的需要放到nums1中 + System.arraycopy(nums2,0,nums1,0,p2+1); + } + +} + + diff --git a/Week_00/G20200343030503/NOTE.md b/Week_00/G20200343030503/NOTE.md index 50de3041..29ad703b 100644 --- a/Week_00/G20200343030503/NOTE.md +++ b/Week_00/G20200343030503/NOTE.md @@ -1 +1,70 @@ -学习笔记 \ No newline at end of file +一、 知识笔记 + + 1. 复杂度 常见的复杂度 + + O(1): Constant Complexity 常数复杂度 + O(log n): Logarithmic Complexity 对数复杂度 + + O(n): Linear Complexity 线性时间复杂度 + + O(n^2): N square Complexity 平⽅方 + O(n^3): N square Complexity ⽴立⽅方 + O(2^n): Exponential Growth 指数 + O(n!): Factorial 阶乘
 + + 2. 数据结构与算法 + + a. 程序**=**数据结构**+**算法 + + b. 数据结构: 线性结构和非线性结构。 + + 线性结构: 顺序存储结构(数组)和链式存储结构(链表) + + 1. 顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的 + 2. 链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息 + 3. 线性结构常见的有:数组、队列、链表和栈 + + 非线性结构: 二维数组,多维数组,广义表,树结构,图结构 + +二、 课后作业 + + 1. 两数之和: 借助hashmap 来求解,时间复杂度数组的大小O(n) ,空间复杂度取决于hashmap中元素的个数O(n) + + 2. 盛水最多的容器: 采用双指针向内收敛法 其实就是就面积 area = x * y ; x= (rear - head) ; y = Math.min(nums[rear],nums[head]); + + 3. 三数只和: 核心思想 排序 + 双指针 或者 使用哈希表 题目重点: 1. 排序, 2 双指针手敛,3. 数组中重复元素问题 + + 4. 删除数组中的重复项: 1. 有序的数组 2. 双指针法解决相同元素 3. 返回的是新数组的长度特别注意返回新数组的长度,遍历的时候一定要根据返回的数组的新的长度进行遍历 + + 5. 加一: 其实就是多位数加1之后的值 特殊情况就是出现9的时候需要进位,如果999这种数字,加1之后需要进位,需要给数组扩容 + + 6. 爬楼梯: 方法一使用递归,效率不高,方法二使用初始化3个值,每次修改前2个值,第三个值等于前两个值只和 + + 7. 合并2个有序数组: + + 方式1 将输出数组中的有效值存放到复制数组中nums1_copy, 分别定义2个指针到nums1_copy p1和nums2 p2 然后循环判断p1和p2所对应的值,将其添加到输出数组中 + + 方式2 从后往前在原数组上进行操作,减少了空间复杂度 + + 需要注意的地方 题干明确表示需要 1. 有序整数数组 2. nums1 有足够的空间来保存 nums2 中的元素如果nums1保存不下nums2那么会报数组下标越界 + + 8. 旋转数组: a. 使用取余的方式判断i+k大于len 则从头开始 arr[(i + k) % nums.length] + + b. 需要重新开辟一个数组去存放旋转之后的值 用于改变原数组的顺序 + + 关于官方题解中的 使用环状和使用反转 现阶段理解比较困难 + + 9. 移动0: 做这个题目的时候,老师的这段代码思想可以理解,就是最终卡到了赋值 i!=j num[i] = 0 这块,遇到第1个0开始,下一次遍历j和i 就不相同了此时要先使用nums[j]记录nums[i]当前的值,然后把nums[i]修改为0 + +三、 总结 + + 1. 基础知识点的复习: 每天复习一遍数据结构与算法的脑图,记住数据结构与算法的脉络 + 2. 代码过数遍: 当敲完一遍的时候,可以理解,第二天需要重新复习一下才能将结果敲出来 + 3. 看题解 + 4. 最重要的还是强迫自己不断的敲代码,训练自己的思维能力 + 5. 感谢助教的帮助 + +四、建议 + +​ 知识点稍微在细一点 ,现阶段对于知识点只能自己在网上搜索总结 + From e0ffa6f2a5270888c34645e9821e4592a9166b50 Mon Sep 17 00:00:00 2001 From: zhujiashuai Date: Sun, 16 Feb 2020 12:15:32 +0800 Subject: [PATCH 0143/1268] =?UTF-8?q?id=5F523=E4=BD=9C=E4=B8=9A=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030523/.DS_Store | Bin 0 -> 6148 bytes .../id_523/MergeSortedArray.java | 40 +++++++++++ .../id_523/MergeTwoSortedLists.java | 62 ++++++++++++++++++ .../G20200343030523/id_523/MoveZeroes01.java | 28 ++++++++ Week_01/G20200343030523/id_523/PlusOne01.java | 31 +++++++++ .../RemoveDuplicatesFromSortedArray.java | 33 ++++++++++ .../G20200343030523/id_523/RotateArray.java | 37 +++++++++++ Week_01/G20200343030523/id_523/TwoSum.java | 50 ++++++++++++++ 8 files changed, 281 insertions(+) create mode 100644 Week_01/G20200343030523/.DS_Store create mode 100644 Week_01/G20200343030523/id_523/MergeSortedArray.java create mode 100644 Week_01/G20200343030523/id_523/MergeTwoSortedLists.java create mode 100644 Week_01/G20200343030523/id_523/MoveZeroes01.java create mode 100644 Week_01/G20200343030523/id_523/PlusOne01.java create mode 100644 Week_01/G20200343030523/id_523/RemoveDuplicatesFromSortedArray.java create mode 100644 Week_01/G20200343030523/id_523/RotateArray.java create mode 100644 Week_01/G20200343030523/id_523/TwoSum.java diff --git a/Week_01/G20200343030523/.DS_Store b/Week_01/G20200343030523/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..9a84a5658e78a1336dd7829cbbdb677c953c7b49 GIT binary patch literal 6148 zcmeHKy-EZz5T4OP7HqDxGp*$*_VHMs;2uCZ7gV@qud%b((wFdId@l>XFEa|O0l`8} znStb+WPUdLEt_OSM3)cULS!x?4H{9YRD{!2)1EuefLd~#%Gu_2vAP-hZ6(nzPI2uA zaxa}+$+^_mKe6{i+pagm8gb3j^YP=!>&wOG9R1LJ>$AQ4Q#|eBw~I9e1HnKr5Dff` z0i4;C=Fl+uU?3O>20j?z{*cg!*>N;1TL-#Q0swi9E&`pk1Y?q8b{q|1fvAN7EmXb4 zPz%R=a=+|28d|uh7a!_RelK3MJRSK{aTm>o(FX&;z?6Y~8_s$DU*eak7WvbV7zG2t zz&~R^XYHz8;-&m-{qlM|YZKZv8ijr%6$tdnB>)5NBS*z(_Cy_i*>N;v7S5M&U|a+W LA<+c`zres7yBsM9 literal 0 HcmV?d00001 diff --git a/Week_01/G20200343030523/id_523/MergeSortedArray.java b/Week_01/G20200343030523/id_523/MergeSortedArray.java new file mode 100644 index 00000000..f8565f26 --- /dev/null +++ b/Week_01/G20200343030523/id_523/MergeSortedArray.java @@ -0,0 +1,40 @@ +package array; + +/** + * https://leetcode-cn.com/problems/merge-sorted-array/ + */ +public class MergeSortedArray { + + public void merge(int[] nums1, int m, int[] nums2, int n) { + + int j = m - 1; + int i = n - 1; + int pos = m + n - 1; + while (i >= 0 && j >= 0) { + if (nums2[i] >= nums1[j]) { + nums1[pos--] = nums2[i--]; + } else { + nums1[pos--] = nums1[j]; + nums1[j] = Integer.MIN_VALUE; + j--; + } + } + + while (i >= 0) { + nums1[i] = nums2[i]; + i--; + } + + } + + public static void main(String[] args) { + int[] num1 = new int[]{1, 2, 3, 0, 0, 0}; + int m = 3; + int[] num2 = new int[]{-1, 1, 2}; + int n = 3; + + MergeSortedArray mergeSortedArray = new MergeSortedArray(); + mergeSortedArray.merge(num1, m, num2, n); + } + +} diff --git a/Week_01/G20200343030523/id_523/MergeTwoSortedLists.java b/Week_01/G20200343030523/id_523/MergeTwoSortedLists.java new file mode 100644 index 00000000..63213c90 --- /dev/null +++ b/Week_01/G20200343030523/id_523/MergeTwoSortedLists.java @@ -0,0 +1,62 @@ +package linkedlist; + +/** + * https://leetcode-cn.com/problems/merge-two-sorted-lists/ + */ +public class MergeTwoSortedLists { + + public ListNode mergeTwoLists(ListNode l1, ListNode l2) { + + ListNode head = new ListNode(0); + ListNode pos = head; + + ListNode p1 = l1; + ListNode p2 = l2; + while (p1 != null && p2 != null) { + if (p1.val <= p2.val) { + pos.next = p1; + p1 = p1.next; + } else if (p2.val < p1.val) { + pos.next = p2; + p2 = p2.next; + } + pos = pos.next; + } + + while (p1 != null) { + pos.next = p1; + pos = pos.next; + p1 = p1.next; + } + + while (p2 != null) { + pos.next = p2; + pos = pos.next; + p2 = p2.next; + } + + return head.next; + } + + public static void main(String[] args) { + ListNode node1 = new ListNode(1); + ListNode node2 = new ListNode(2); + ListNode node3 = new ListNode(4); + ListNode l1 = node1; + node1.next = node2; + node2.next = node3; + + ListNode node4 = new ListNode(1); + ListNode node5 = new ListNode(3); + ListNode node6 = new ListNode(4); + ListNode node7 = new ListNode(6); + ListNode l2 = node4; + node4.next = node5; + node5.next = node6; + node6.next = node7; + + MergeTwoSortedLists mergeTwoSortedLists = new MergeTwoSortedLists(); + ListNode l3 = mergeTwoSortedLists.mergeTwoLists(l1, null); + } + +} diff --git a/Week_01/G20200343030523/id_523/MoveZeroes01.java b/Week_01/G20200343030523/id_523/MoveZeroes01.java new file mode 100644 index 00000000..5d54700a --- /dev/null +++ b/Week_01/G20200343030523/id_523/MoveZeroes01.java @@ -0,0 +1,28 @@ +package array; + +/** + * https://leetcode-cn.com/problems/move-zeroes/ + */ +public class MoveZeroes01 { + + public void moveZeroes(int[] nums) { + int j = 0; + for (int i = 0; i < nums.length; i++) { + if (nums[i] != 0) { + nums[j] = nums[i]; + if (i != j) { + nums[i] = 0; + } + j++; + } + } + } + + public static void main(String[] args) { + int[] nums = new int[]{0, 1, 0, 3, 12}; + MoveZeroes01 moveZeroes = new MoveZeroes01(); + moveZeroes.moveZeroes(nums); + System.out.println(nums); + } + +} diff --git a/Week_01/G20200343030523/id_523/PlusOne01.java b/Week_01/G20200343030523/id_523/PlusOne01.java new file mode 100644 index 00000000..9b3f5b25 --- /dev/null +++ b/Week_01/G20200343030523/id_523/PlusOne01.java @@ -0,0 +1,31 @@ +package array; + +/** + * https://leetcode-cn.com/problems/plus-one/ + */ +public class PlusOne01 { + + public int[] plusOne(int[] digits) { + for (int i = digits.length - 1; i >= 0; i--) { + if (digits[i] != 9) { + digits[i]++; + break; + } else { + digits[i] = 0; + } + } + + if (digits[0] == 0) { + digits = new int[digits.length + 1]; + digits[0] = 1; + } + return digits; + } + + public static void main(String[] args) { + int[] digits = new int[]{9, 9, 9}; + PlusOne01 plusOne = new PlusOne01(); + int[] res = plusOne.plusOne(digits); + } + +} diff --git a/Week_01/G20200343030523/id_523/RemoveDuplicatesFromSortedArray.java b/Week_01/G20200343030523/id_523/RemoveDuplicatesFromSortedArray.java new file mode 100644 index 00000000..ab5c5a9c --- /dev/null +++ b/Week_01/G20200343030523/id_523/RemoveDuplicatesFromSortedArray.java @@ -0,0 +1,33 @@ +package array; + +/** + * https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/ + */ +public class RemoveDuplicatesFromSortedArray { + + public int removeDuplicates(int[] nums) { + if (nums == null || nums.length == 0) { + return 0; + } + + int i = 0; + for (int j = 1; j < nums.length; j++) { + if (nums[j] != nums[i]) { + i++; + nums[i] = nums[j]; + } + } + return i + 1; + } + + public static void main(String[] args) { + int[] nums = new int[]{0, 0, 1, 1, 1, 2, 2, 3, 3, 4}; + RemoveDuplicatesFromSortedArray array = new RemoveDuplicatesFromSortedArray(); + int length = array.removeDuplicates(nums); + System.out.println("length:" + length); + for (int i = 0; i < length; i++) { + System.out.print(nums[i] + " "); + } + } + +} diff --git a/Week_01/G20200343030523/id_523/RotateArray.java b/Week_01/G20200343030523/id_523/RotateArray.java new file mode 100644 index 00000000..62f55e08 --- /dev/null +++ b/Week_01/G20200343030523/id_523/RotateArray.java @@ -0,0 +1,37 @@ +package array; + +/** + * https://leetcode-cn.com/problems/rotate-array/ + */ +public class RotateArray { + + public void rotate(int[] nums, int k) { + + if (nums == null || nums.length == 1 || k <= 0) { + return; + } + + k = k % nums.length; + int count = 0; + for (int start = 0; count < nums.length; start++) { + int pre = nums[start]; + int current = start; + do { + int next = (current + k) % nums.length; + int temp = nums[next]; + nums[next] = pre; + pre = temp; + current = next; + count++; + } while (start != current); + } + } + + public static void main(String[] args) { + int[] nums = new int[]{1, 2, 3, 4, 5, 6, 7}; + int k = 3; + RotateArray rotateArray = new RotateArray(); + rotateArray.rotate(nums, k); + } + +} diff --git a/Week_01/G20200343030523/id_523/TwoSum.java b/Week_01/G20200343030523/id_523/TwoSum.java new file mode 100644 index 00000000..2d8ca6c6 --- /dev/null +++ b/Week_01/G20200343030523/id_523/TwoSum.java @@ -0,0 +1,50 @@ +package hashmap; + +import java.util.HashMap; +import java.util.Map; + +/** + * https://leetcode-cn.com/problems/two-sum/ + */ +public class TwoSum { + + public int[] twoSum(int[] nums, int target) { + + if (nums == null) { + return new int[]{}; + } + + HashMap map = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + Integer existIndex = map.get(nums[i]); + if (existIndex != null) { + if (target == 2 * nums[i]) { + return new int[]{existIndex, i}; + } + } else { + map.put(nums[i], i); + } + } + + for (Map.Entry keyValue : map.entrySet()) { + Integer key = map.get(target - keyValue.getKey()); + if (key != null && !key.equals(keyValue.getValue())) { + return new int[]{keyValue.getValue(), key}; + } + } + return new int[]{}; + + } + + public static void main(String[] args) { +// int[] nums = {2, 7, 11, 15}; + int[] nums = {3, 3}; + int target = 6; + TwoSum twoSum = new TwoSum(); + int[] ret = twoSum.twoSum(nums, target); + for (int i : ret) { + System.out.println(i); + } + } + +} From 8bf811da272029d209d9d99f2f261e26241970db Mon Sep 17 00:00:00 2001 From: zhujiashuai Date: Sun, 16 Feb 2020 12:25:08 +0800 Subject: [PATCH 0144/1268] =?UTF-8?q?=E9=87=8D=E6=96=B0=E5=91=BD=E5=90=8D?= =?UTF-8?q?=E4=B8=8B=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../id_523/{RotateArray.java => LeetCode_189_523.java} | 0 .../G20200343030523/id_523/{TwoSum.java => LeetCode_1_523.java} | 0 .../id_523/{MergeTwoSortedLists.java => LeetCode_21_523.java} | 0 ...{RemoveDuplicatesFromSortedArray.java => LeetCode_26_523.java} | 0 .../id_523/{MoveZeroes01.java => LeetCode_283_523.java} | 0 .../id_523/{PlusOne01.java => LeetCode_66_523.java} | 0 .../id_523/{MergeSortedArray.java => LeetCode_88_523.java} | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename Week_01/G20200343030523/id_523/{RotateArray.java => LeetCode_189_523.java} (100%) rename Week_01/G20200343030523/id_523/{TwoSum.java => LeetCode_1_523.java} (100%) rename Week_01/G20200343030523/id_523/{MergeTwoSortedLists.java => LeetCode_21_523.java} (100%) rename Week_01/G20200343030523/id_523/{RemoveDuplicatesFromSortedArray.java => LeetCode_26_523.java} (100%) rename Week_01/G20200343030523/id_523/{MoveZeroes01.java => LeetCode_283_523.java} (100%) rename Week_01/G20200343030523/id_523/{PlusOne01.java => LeetCode_66_523.java} (100%) rename Week_01/G20200343030523/id_523/{MergeSortedArray.java => LeetCode_88_523.java} (100%) diff --git a/Week_01/G20200343030523/id_523/RotateArray.java b/Week_01/G20200343030523/id_523/LeetCode_189_523.java similarity index 100% rename from Week_01/G20200343030523/id_523/RotateArray.java rename to Week_01/G20200343030523/id_523/LeetCode_189_523.java diff --git a/Week_01/G20200343030523/id_523/TwoSum.java b/Week_01/G20200343030523/id_523/LeetCode_1_523.java similarity index 100% rename from Week_01/G20200343030523/id_523/TwoSum.java rename to Week_01/G20200343030523/id_523/LeetCode_1_523.java diff --git a/Week_01/G20200343030523/id_523/MergeTwoSortedLists.java b/Week_01/G20200343030523/id_523/LeetCode_21_523.java similarity index 100% rename from Week_01/G20200343030523/id_523/MergeTwoSortedLists.java rename to Week_01/G20200343030523/id_523/LeetCode_21_523.java diff --git a/Week_01/G20200343030523/id_523/RemoveDuplicatesFromSortedArray.java b/Week_01/G20200343030523/id_523/LeetCode_26_523.java similarity index 100% rename from Week_01/G20200343030523/id_523/RemoveDuplicatesFromSortedArray.java rename to Week_01/G20200343030523/id_523/LeetCode_26_523.java diff --git a/Week_01/G20200343030523/id_523/MoveZeroes01.java b/Week_01/G20200343030523/id_523/LeetCode_283_523.java similarity index 100% rename from Week_01/G20200343030523/id_523/MoveZeroes01.java rename to Week_01/G20200343030523/id_523/LeetCode_283_523.java diff --git a/Week_01/G20200343030523/id_523/PlusOne01.java b/Week_01/G20200343030523/id_523/LeetCode_66_523.java similarity index 100% rename from Week_01/G20200343030523/id_523/PlusOne01.java rename to Week_01/G20200343030523/id_523/LeetCode_66_523.java diff --git a/Week_01/G20200343030523/id_523/MergeSortedArray.java b/Week_01/G20200343030523/id_523/LeetCode_88_523.java similarity index 100% rename from Week_01/G20200343030523/id_523/MergeSortedArray.java rename to Week_01/G20200343030523/id_523/LeetCode_88_523.java From d45d40068513954e40cc0660a08efd028f697b1e Mon Sep 17 00:00:00 2001 From: zzzzz1797 <979652917@qq.com> Date: Sun, 16 Feb 2020 12:40:24 +0800 Subject: [PATCH 0145/1268] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E5=91=A8=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030545/LeetCode_141_545.py | 67 ++++++++ Week_01/G20200343030545/LeetCode_142_545.py | 79 +++++++++ Week_01/G20200343030545/LeetCode_24_545.py | 58 +++++++ Week_01/G20200343030545/LeetCode_25_545.py | 69 ++++++++ Week_01/G20200343030545/LeetCode_42_545.py | 167 ++++++++++++++++++++ Week_01/G20200343030545/LeetCode_641_545.py | 129 +++++++++++++++ 6 files changed, 569 insertions(+) create mode 100644 Week_01/G20200343030545/LeetCode_141_545.py create mode 100644 Week_01/G20200343030545/LeetCode_142_545.py create mode 100644 Week_01/G20200343030545/LeetCode_24_545.py create mode 100644 Week_01/G20200343030545/LeetCode_25_545.py create mode 100644 Week_01/G20200343030545/LeetCode_42_545.py create mode 100644 Week_01/G20200343030545/LeetCode_641_545.py diff --git a/Week_01/G20200343030545/LeetCode_141_545.py b/Week_01/G20200343030545/LeetCode_141_545.py new file mode 100644 index 00000000..0d030878 --- /dev/null +++ b/Week_01/G20200343030545/LeetCode_141_545.py @@ -0,0 +1,67 @@ +""" + 给定一个链表,判断链表中是否有环。 + 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 + 如果 pos 是 -1,则在该链表中没有环。 + + 示例 1: + 输入:head = [3,2,0,-4], pos = 1 + 输出:true + 解释:链表中有一个环,其尾部连接到第二个节点。 + + 示例 2: + 输入:head = [1,2], pos = 0 + 输出:true + 解释:链表中有一个环,其尾部连接到第一个节点。 + + 示例 3 + 输入:head = [1], pos = -1 + 输出:false + 解释:链表中没有环。 +""" + + +class ListNode: + def __init__(self, x): + self.val = x + self.next = None + + +class Solution: + def hasCycle(self, head: ListNode) -> bool: + return self.double_pointer(head) + + @classmethod + def use_hash(cls, head: ListNode) -> bool: + """ + 依次遍历链表,每次遍历的时候判断该节点是否存在于hash表中。 + 如果存在则证明链表有环,反之将节点存入到hash表中。 + 时间复杂度O(n),空间复杂度O(n) + """ + hash_map = {} + while head and head.next: + if head in hash_map: + return True + hash_map[head] = 0 + head = head.next + return False + + @classmethod + def double_pointer(cls, head: ListNode) -> bool: + """ + 快慢指针循环遍历,当快指针等于慢指针的时候,则说明有环。 + 时间复杂度O(n),空间复杂度O(1) + """ + if not (head and head.next): + return False + + slow_node = head.next + fast_node = head.next.next + + while fast_node and fast_node.next: + if slow_node == fast_node: + return True + + slow_node = slow_node.next + fast_node = fast_node.next.next + + return False diff --git a/Week_01/G20200343030545/LeetCode_142_545.py b/Week_01/G20200343030545/LeetCode_142_545.py new file mode 100644 index 00000000..57b08bb0 --- /dev/null +++ b/Week_01/G20200343030545/LeetCode_142_545.py @@ -0,0 +1,79 @@ +""" + 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 + 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 + 如果 pos 是 -1,则在该链表中没有环。 + 说明:不允许修改给定的链表。 + + 示例 1: + 输入:head = [3,2,0,-4], pos = 1 + 输出:tail connects to node index 1 + 解释:链表中有一个环,其尾部连接到第二个节点。 + + 示例 2: + 输入:head = [1,2], pos = 0 + 输出:tail connects to node index 0 + 解释:链表中有一个环,其尾部连接到第一个节点。 + + 示例 3: + 输入:head = [1], pos = -1 + 输出:no cycle + 解释:链表中没有环。 +""" + + +class ListNode: + def __init__(self, x): + self.val = x + self.next = None + + +class Solution: + def detectCycle(self, head: ListNode) -> ListNode: + return self.use_hash(head) + + @classmethod + def use_hash(cls, head: ListNode) -> ListNode: + """ + 使用hash表保存每个节点的值,在保存之前判断一下如果该节点已经存在则说明已经有环,返回该节点即可。 + 时间复杂度O(n),空间复杂度O(n) + """ + if not (head and head.next): + return head + + res = None + hash_map = {} + while head and head.next: + if head in hash_map: + return head + hash_map[head] = 0 + head = head.next + + return res + + @classmethod + def floyd(cls, head: ListNode) -> ListNode: + res = None + + if not (head and head.next): + return res + + fast_node = head.next.next + slow_node = head.next + check_node = None + + # 找出快慢节点交汇的节点 + while fast_node and fast_node.next: + if slow_node == fast_node: + check_node = fast_node + break + fast_node = fast_node.next.next + slow_node = slow_node.next + + # 如果check_code,则说明链表有环。 + if check_node: + root_node = head + while check_node != root_node: + check_node = check_node.next + root_node = root_node.next + res = check_node + return res diff --git a/Week_01/G20200343030545/LeetCode_24_545.py b/Week_01/G20200343030545/LeetCode_24_545.py new file mode 100644 index 00000000..b44efd12 --- /dev/null +++ b/Week_01/G20200343030545/LeetCode_24_545.py @@ -0,0 +1,58 @@ +""" + 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 + 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 + + 示例: + 给定 1->2->3->4, 你应该返回 2->1->4->3. +""" + + +class ListNode: + def __init__(self, x): + self.val = x + self.next = None + + +class Solution: + def swapPairs(self, head: ListNode) -> ListNode: + return self.loop(head) + + @classmethod + def recursive(cls, head: ListNode) -> ListNode: + """ + 递归更新每两个点的链表形态。 + 时间复杂度:O(N),N 指的是链表的节点数量。 + 空间复杂度:O(N),递归过程使用的堆栈空间。 + """ + if not (head and head.next): + return head + + next_node = head.next + head.next = cls.recursive(head.next.next) + next_node.next = head + return next_node + + @classmethod + def loop(cls, head: ListNode) -> ListNode: + """ + 循环遍历 + 单独设置一个前驱节点,方便 + 时间复杂度是O(n),空间复杂度是O(1) + """ + root = ListNode(-1) + root.next = head + + prev = root + + while head and head.next: + first_node = head + second_node = head.next + + prev.next = second_node + first_node.next = second_node.next + second_node.next = first_node + + head = first_node.next + prev = first_node + + return root.next diff --git a/Week_01/G20200343030545/LeetCode_25_545.py b/Week_01/G20200343030545/LeetCode_25_545.py new file mode 100644 index 00000000..4a2d0567 --- /dev/null +++ b/Week_01/G20200343030545/LeetCode_25_545.py @@ -0,0 +1,69 @@ +""" + 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 + k 是一个正整数,它的值小于或等于链表的长度。 + 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 + + 示例: + 给定这个链表:1->2->3->4->5 + 当 k = 2 时,应当返回: 2->1->4->3->5 + 当 k = 3 时,应当返回: 3->2->1->4->5 + 说明: + 你的算法只能使用常数的额外空间。 + 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 +""" + + +class ListNode: + def __init__(self, x): + self.val = x + self.next = None + + +class Solution: + def reverseKGroup(self, head: ListNode, k: int) -> ListNode: + return self.loop(head, k) + + @classmethod + def loop(cls, head: ListNode, k: int) -> ListNode: + + # FIXME 还没做完 + total_count = cls.find_node_count(head) + stop_times = total_count - (total_count % k) + + prev_node = head + total_loop_times = 0 + + while True: + tmp_k = k + + next_node = None + while prev_node: + + prev_node = prev_node.next + tmp_k -= 1 + + if tmp_k == 0: + # 说明在这个节点停止 + prev_node = prev_node.next + + if total_loop_times == stop_times: + break + + @classmethod + def find_node_count(cls, head: ListNode) -> int: + res = 0 + while head: + head = head.next + res += 1 + return res + + @classmethod + def reverse_node(cls, head: ListNode) -> ListNode: + prev_node = None + while head: + next_node = head.next + head.next = prev_node + prev_node = head + head = next_node + + return prev_node diff --git a/Week_01/G20200343030545/LeetCode_42_545.py b/Week_01/G20200343030545/LeetCode_42_545.py new file mode 100644 index 00000000..3e3cc862 --- /dev/null +++ b/Week_01/G20200343030545/LeetCode_42_545.py @@ -0,0 +1,167 @@ +""" + 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 + 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。 + + 示例: + 输入: [0,1,0,2,1,0,1,3,2,1,2,1] + 输出: 6 +""" +from typing import List + + +class Stack: + def __init__(self): + self.__list = list() + + def peek(self): + if not self.empty(): + return self.__list[-1] + + def empty(self) -> bool: + return not bool(self.__list) + + def pop(self) -> bool: + if self.empty(): + return False + self.__list.pop() + return True + + def push(self, v: object) -> bool: + self.__list.append(v) + return True + + def __str__(self): + return "Stack[" + ",".join([str(self.__list[i]) for i in range(len(self.__list) - 1, -1, -1)]) + "]" + + +class Solution: + def trap(self, height: List[int]) -> int: + return self.dp_2(height) + + @classmethod + def stack_hand(cls, height: List[int]) -> int: + """ + 使用栈处理 + 依次入栈: + 1) 当栈为空时,继续入栈 + 2) 当栈顶元素小于当前元素时,说明会产生积水,继续入栈 + 3) 当栈顶元素大于当前元素时,说明积水停止了。 + 时间复杂度:O(n),空间复杂度:O(n) + """ + + current = 0 + height_len = len(height) + res = 0 + stack = Stack() + + while current < height_len: + while not stack.empty() and height[current] > height[stack.peek()]: + print(current,'ff') + v = height[stack.peek()] + stack.pop() + if stack.empty(): + break + + distance = current - stack.peek() - 1 + min_v = min(height[stack.peek()], height[current]) + res += (distance * (min_v - v)) + + stack.push(current) + current += 1 + + return res + + @classmethod + def directly(cls, height: List[int]) -> int: + """ + 暴力求解法。计算每一个下标能存储的最大雨滴然后累加。 + 详细: + 计算每一列中左边最高的和右边最高的,取两者最小值V和当前列比较。 + 1)如果V大雨当前列的值,则可以存放的雨水是当前列和V的差值 + 2)如果V等于或者小于当前列,则该列存放的雨水为0。 + 时间复杂度:O(n^2),空间复杂度O(1) + """ + res = 0 + + for i in range(len(height)): + max_left = max_right = 0 + for j in range(0, i): + max_left = max(max_left, height[j]) + + for k in range(i, len(height)): + max_right = max(max_right, height[k]) + + v = height[i] + + check_v = min(max_left, max_right) + + if check_v > v: + res += check_v - v + return res + + @classmethod + def dp_1(cls, height: List[int]) -> int: + """ + 动态规划求解 + 用两个列表存储 左边最大列 右边做大列 + 总共3次循环。 + + 时间复杂度O(n),空间复杂度O(n) + """ + res = 0 + height_length = len(height) + max_left_info = [0] * height_length + max_right_info = [0] * height_length + + for i in range(1, height_length): + max_left_info[i] = max(max_left_info[i - 1], height[i - 1]) + + for j in range(height_length - 2, -1, -1): + max_right_info[j] = max(max_right_info[j + 1], height[j + 1]) + + for k in range(height_length): + max_left = max_left_info[k] + max_right = max_right_info[k] + + v = height[k] + check_v = min(max_left, max_right) + if check_v > v: + res += (check_v - v) + return res + + @classmethod + def dp_2(cls, height: List[int]) -> int: + """ + 动态规划求解。 + 思路和dp_1 一样,只不过是用两个临时变量保存max_left, max_right + 时间复杂度O(n),空间复杂度O(1) + """ + height_len = len(height) + max_left = max_right = 0 + left = 1 + right = height_len - 2 + + res = 0 + + for i in range(1, height_len - 1): + if height[left - 1] < height[right + 1]: + # 左柱子比右柱子小 + max_left = max(max_left, height[left - 1]) + + if max_left > height[left]: + res += (max_left - height[left]) + + left += 1 + else: + # 右柱子比左柱子小 + max_right = max(max_right, height[right + 1]) + + if max_right > height[right]: + res += (max_right - height[right]) + right -= 1 + + return res + + +if __name__ == '__main__': + print(Solution.stack_hand([2, 1, 2])) diff --git a/Week_01/G20200343030545/LeetCode_641_545.py b/Week_01/G20200343030545/LeetCode_641_545.py new file mode 100644 index 00000000..6fc9c820 --- /dev/null +++ b/Week_01/G20200343030545/LeetCode_641_545.py @@ -0,0 +1,129 @@ +""" + 设计实现双端队列。 + 你的实现需要支持以下操作: + MyCircularDeque(k):构造函数,双端队列的大小为k。 + insertFront():将一个元素添加到双端队列头部。 如果操作成功返回 true。 + insertLast():将一个元素添加到双端队列尾部。如果操作成功返回 true。 + deleteFront():从双端队列头部删除一个元素。 如果操作成功返回 true。 + deleteLast():从双端队列尾部删除一个元素。如果操作成功返回 true。 + getFront():从双端队列头部获得一个元素。如果双端队列为空,返回 -1。 + getRear():获得双端队列的最后一个元素。 如果双端队列为空,返回 -1。 + isEmpty():检查双端队列是否为空。 + isFull():检查双端队列是否满了。 + + 示例: + MyCircularDeque circularDeque = new MycircularDeque(3); // 设置容量大小为3 + circularDeque.insertLast(1); // 返回 true + circularDeque.insertLast(2); // 返回 true + circularDeque.insertFront(3); // 返回 true + circularDeque.insertFront(4); // 已经满了,返回 false + circularDeque.getRear(); // 返回 2 + circularDeque.isFull(); // 返回 true + circularDeque.deleteLast(); // 返回 true + circularDeque.insertFront(4); // 返回 true + circularDeque.getFront(); // 返回 4 +  + 提示: + + 所有值的范围为 [1, 1000] + 操作次数的范围为 [1, 1000] + 请不要使用内置的双端队列库。 +""" + + +class MyCircularDeque: + + def __init__(self, k: int): + """ + Initialize your data structure here. Set the size of the deque to be k. + """ + self.__k = k + self.__front = 0 # 指向队列头部第 1 个有效数据的位置。 + self.__rear = 0 # 指向队列尾部的下一个位置,即下一个从队尾入队元素的位置。 + self.__capacity = self.__k + 1 + self.__array = [0] * self.__capacity # 多存储一个空间用于 区分 队列满还是空 + + def insertFront(self, value: int) -> bool: + """ + Adds an item at the front of Deque. Return true if the operation is successful. + """ + if self.isFull(): + return False + + self.__front = (self.__front - 1 + self.__capacity) % self.__capacity + self.__array[self.__front] = value + return True + + def insertLast(self, value: int) -> bool: + """ + Adds an item at the rear of Deque. Return true if the operation is successful. + """ + if self.isFull(): + return False + self.__array[self.__rear] = value + self.__rear = (self.__rear + 1) % self.__capacity + return True + + def deleteFront(self) -> bool: + """ + Deletes an item from the front of Deque. Return true if the operation is successful. + """ + if self.isEmpty(): + return False + + self.__front = (self.__front + 1) % self.__capacity + return True + + def deleteLast(self) -> bool: + """ + Deletes an item from the rear of Deque. Return true if the operation is successful. + """ + if self.isEmpty(): + return False + self.__rear = (self.__rear - 1 + self.__capacity) % self.__capacity + return True + + def getFront(self) -> int: + """ + Get the front item from the deque. + """ + if self.isEmpty(): + return -1 + return self.__array[self.__front] + + def getRear(self) -> int: + """ + Get the last item from the deque. + """ + if self.isEmpty(): + return -1 + return self.__array[(self.__rear - 1 + self.__capacity) % self.__capacity] + + def isEmpty(self) -> bool: + """ + Checks whether the circular deque is empty or not. + """ + return self.__front == self.__rear + + def isFull(self) -> bool: + """ + Checks whether the circular deque is full or not. + """ + return (self.__rear + 1) % self.__capacity == self.__front + + +if __name__ == '__main__': + myci = MyCircularDeque(7) + myci.insertFront(10) + myci.insertFront(11) + myci.insertFront(12) + myci.insertFront(13) + myci.insertFront(14) + myci.insertFront(15) + myci.insertLast(16) + myci.insertLast(17) + myci.deleteFront() + myci.insertLast(17) + myci.insertLast(142) + + print(myci._MyCircularDeque__array) From 3672356b935badc795d25f1dd80cb464a6ab3b8f Mon Sep 17 00:00:00 2001 From: Huangzikun <381560728@qq.com> Date: Sun, 16 Feb 2020 13:17:58 +0800 Subject: [PATCH 0146/1268] =?UTF-8?q?=E6=8C=AA=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030393/NOTE.md | 24 ----------------- .../LeetCode_141.java | 2 +- .../LeetCode_1_395.java | 2 +- .../LeetCode_2_395.java | 2 +- .../LeetCode_3_395.java | 2 +- .../LeetCode_3sum.java | 2 +- .../LeetCode_4_395.java | 2 +- .../LeetCode_5_395.java | 2 +- .../LeetCode_6_395.java | 2 +- .../LeetCode_7_395.java | 2 +- .../LeetCode_8_395.java | 2 +- Week_01/G20200343030395/NOTE.md | 27 ++++++++++++++++++- 12 files changed, 36 insertions(+), 35 deletions(-) rename Week_01/{G20200343030393 => G20200343030395}/LeetCode_141.java (96%) rename Week_01/{G20200343030393 => G20200343030395}/LeetCode_1_395.java (96%) rename Week_01/{G20200343030393 => G20200343030395}/LeetCode_2_395.java (97%) rename Week_01/{G20200343030393 => G20200343030395}/LeetCode_3_395.java (97%) rename Week_01/{G20200343030393 => G20200343030395}/LeetCode_3sum.java (98%) rename Week_01/{G20200343030393 => G20200343030395}/LeetCode_4_395.java (96%) rename Week_01/{G20200343030393 => G20200343030395}/LeetCode_5_395.java (97%) rename Week_01/{G20200343030393 => G20200343030395}/LeetCode_6_395.java (91%) rename Week_01/{G20200343030393 => G20200343030395}/LeetCode_7_395.java (93%) rename Week_01/{G20200343030393 => G20200343030395}/LeetCode_8_395.java (98%) diff --git a/Week_01/G20200343030393/NOTE.md b/Week_01/G20200343030393/NOTE.md index 857cfd2a..74aac902 100644 --- a/Week_01/G20200343030393/NOTE.md +++ b/Week_01/G20200343030393/NOTE.md @@ -1,26 +1,2 @@ 学习笔记 -## 2020/2/10 -* 视频进度:今日看了第三课1,2,3看了一半 -* 题目:跟着视频2做了 -* 题目完成情况 -[删除排序数组中的重复项](https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/) -[盛最多水的容器](https://leetcode-cn.com/problems/container-with-most-water/) -* 代码片段 - * 用于循环一维数组,i和j下标不重复 - ```java - for(int i=0;i Date: Sat, 15 Feb 2020 21:44:19 -0800 Subject: [PATCH 0147/1268] 449 week 01 easy --- Week_00/G20200343030449/LeetCode_189_449.java | 25 +++++++++++ Week_00/G20200343030449/LeetCode_1_449.java | 24 ++++++++++ Week_00/G20200343030449/LeetCode_21_449.java | 31 +++++++++++++ Week_00/G20200343030449/LeetCode_26_449.java | 36 +++++++++++++++ Week_00/G20200343030449/LeetCode_283_449.java | 45 +++++++++++++++++++ Week_00/G20200343030449/LeetCode_66_449.java | 31 +++++++++++++ Week_00/G20200343030449/LeetCode_88_449.java | 21 +++++++++ 7 files changed, 213 insertions(+) create mode 100644 Week_00/G20200343030449/LeetCode_189_449.java create mode 100644 Week_00/G20200343030449/LeetCode_1_449.java create mode 100644 Week_00/G20200343030449/LeetCode_21_449.java create mode 100644 Week_00/G20200343030449/LeetCode_26_449.java create mode 100644 Week_00/G20200343030449/LeetCode_283_449.java create mode 100644 Week_00/G20200343030449/LeetCode_66_449.java create mode 100644 Week_00/G20200343030449/LeetCode_88_449.java diff --git a/Week_00/G20200343030449/LeetCode_189_449.java b/Week_00/G20200343030449/LeetCode_189_449.java new file mode 100644 index 00000000..c206f27d --- /dev/null +++ b/Week_00/G20200343030449/LeetCode_189_449.java @@ -0,0 +1,25 @@ +/* + * @lc app=leetcode id=189 lang=java + * + * [189] Rotate Array + */ + +// 时间复杂度: O(n^2) +// 空间复杂度: O(1) +// @lc code=start +class Solution { + public void rotate(int[] nums, int k) { + while (k-- > 0) { + moveToRightByOneStep(nums); + } + } + + private void moveToRightByOneStep(int[] nums) { + int temp = nums[nums.length - 1]; + for (int i = nums.length - 2; i >= 0; i--) { + nums[i + 1] = nums[i]; + } + nums[0] = temp; + } +} +// @lc code=end diff --git a/Week_00/G20200343030449/LeetCode_1_449.java b/Week_00/G20200343030449/LeetCode_1_449.java new file mode 100644 index 00000000..6c6317ac --- /dev/null +++ b/Week_00/G20200343030449/LeetCode_1_449.java @@ -0,0 +1,24 @@ +import java.util.*; +/* + * @lc app=leetcode id=1 lang=java + * + * [1] Two Sum + */ +/** + * 构造一个map。扫描数组时直接查找target - nums[n]是否在map中 + * 时间/空间复杂度:O(n)/O(n) + */ +// @lc code=start +class Solution { + public int[] twoSum(int[] nums, int target) { + Map map = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + if (map.containsKey(nums[i])) { + return new int[] { i, map.get(nums[i]) }; + } + map.put(target - nums[i], i); + } + return null; // Won't execute, according to the question desc. + } +} +// @lc code=end diff --git a/Week_00/G20200343030449/LeetCode_21_449.java b/Week_00/G20200343030449/LeetCode_21_449.java new file mode 100644 index 00000000..d1503d70 --- /dev/null +++ b/Week_00/G20200343030449/LeetCode_21_449.java @@ -0,0 +1,31 @@ +/* + * @lc app=leetcode id=21 lang=java + * + * [21] Merge Two Sorted Lists + */ + +// @lc code=start +/** + * Definition for singly-linked list. public class ListNode { int val; ListNode + * next; ListNode(int x) { val = x; } } + */ +/** + * merge sort类似方法 + * 时间/空间复杂度:O(n)/O(n) + */ +class Solution { + public ListNode mergeTwoLists(ListNode l1, ListNode l2) { + if (l1 != null && l2 != null) { + if (l1.val < l2.val) { + l1.next = mergeTwoLists(l1.next, l2); + return l1; + } else { + l2.next = mergeTwoLists(l1, l2.next); + return l2; + } + } else { + return l1 == null ? l2 : l1; + } + } +} +// @lc code=end diff --git a/Week_00/G20200343030449/LeetCode_26_449.java b/Week_00/G20200343030449/LeetCode_26_449.java new file mode 100644 index 00000000..f1cec649 --- /dev/null +++ b/Week_00/G20200343030449/LeetCode_26_449.java @@ -0,0 +1,36 @@ +/* + * @lc app=leetcode id=26 lang=java + * + * [26] Remove Duplicates from Sorted Array + */ +// 时间复杂度: O(n) +// 空间复杂度: O(1) +// @lc code=start +class Solution { + public int removeDuplicates(int[] nums) { + int length = nums.length; + if (length <= 1) { + return length; + } + + // 从位置1开始插入第一个和currentNum不相等的数字 + int result = 1; + int insertPos = 1; + int currentNum = nums[0]; + for (int i = 1; i < length; i++) { + if (nums[i] != currentNum) { + nums[insertPos] = nums[i]; + result++; + insertPos++; + currentNum = nums[i]; + } + } + + // 剩余位置补0 + for (int i = result; i < length; i++) { + nums[i] = 0; + } + return result; + } +} +// @lc code=end diff --git a/Week_00/G20200343030449/LeetCode_283_449.java b/Week_00/G20200343030449/LeetCode_283_449.java new file mode 100644 index 00000000..fe4b16d5 --- /dev/null +++ b/Week_00/G20200343030449/LeetCode_283_449.java @@ -0,0 +1,45 @@ +/* + * @lc app=leetcode id=283 lang=java + * + * [283] Move Zeroes + */ + +// @lc code=start +/* + * 1. 只有数组有0时才有计算的意义。所以判断第一个0的位置,如果没有则直接返回 + * 2. 如果找到第一个零,则从此处开始处理之后的元素: + * a. 指针pointer始终指向未处理元素中第一个0的位置 + * b. 指针i发现未处理元素中有非零项则插入到pointer位置。pointer同时后移一位 + * c. i == nums.length 时返回 + * + * 时间复杂度:O(n) 数组中每个元素都用常数项时间处理一遍 + * 空间复杂度:O(1) 没有占用额外空间 + */ + +class Solution { + public void moveZeroes(int[] nums) { + int len = nums.length; + if (len <= 1) { + return; + } + + int pointer = 0; + while (pointer < len) { + if (nums[pointer] == 0) { + break; + } + pointer++; + } + if (pointer == len) { + return; + } + for (int i = pointer; i < len; i++) { + if (nums[i] != 0) { + nums[pointer] = nums[i]; + nums[i] = 0; + pointer++; + } + } + } +} +// @lc code=end diff --git a/Week_00/G20200343030449/LeetCode_66_449.java b/Week_00/G20200343030449/LeetCode_66_449.java new file mode 100644 index 00000000..40a31506 --- /dev/null +++ b/Week_00/G20200343030449/LeetCode_66_449.java @@ -0,0 +1,31 @@ +/* + * @lc app=leetcode id=66 lang=java + * + * [66] Plus One + */ + +// 时间复杂度: O(n) +// 空间复杂度: O(1) +// @lc code=start +class Solution { + public int[] plusOne(int[] digits) { + return plusOneAt(digits, digits.length - 1); + } + + private int[] plusOneAt(int[] digits, int at) { + if (at == -1) { + int[] biggerDigits = new int[digits.length + 1]; + biggerDigits[0] = 1; + return biggerDigits; + } + + if (digits[at] == 9) { + digits[at] = 0; + return plusOneAt(digits, at - 1); + } else { + digits[at]++; + return digits; + } + } +} +// @lc code=end diff --git a/Week_00/G20200343030449/LeetCode_88_449.java b/Week_00/G20200343030449/LeetCode_88_449.java new file mode 100644 index 00000000..3d632f7c --- /dev/null +++ b/Week_00/G20200343030449/LeetCode_88_449.java @@ -0,0 +1,21 @@ +/* + * @lc app=leetcode id=88 lang=java + * + * [88] Merge Sorted Array + */ +// 时间复杂度: O(m+n) +// 空间复杂度: O(1) +// @lc code=start +class Solution { + public void merge(int[] nums1, int m, int[] nums2, int n) { + if (m != 0 && n != 0) { + nums1[m + n - 1] = nums1[m - 1] > nums2[n - 1] ? nums1[m-- - 1] : nums2[n-- - 1]; + merge(nums1, m, nums2, n); + } + if (m == 0 && n != 0) { + nums1[n - 1] = nums2[n - 1]; + merge(nums1, 0, nums2, n - 1); + } + } +} +// @lc code=end From ed61d56dee9f7d9ef03af4c49173e8212fe47cef Mon Sep 17 00:00:00 2001 From: FatWhale <59955510+FatFat-Whale@users.noreply.github.com> Date: Sun, 16 Feb 2020 13:49:51 +0800 Subject: [PATCH 0148/1268] Update NOTE.md --- Week_01/G20200343030443/NOTE.md | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/Week_01/G20200343030443/NOTE.md b/Week_01/G20200343030443/NOTE.md index 50de3041..e0c455d0 100644 --- a/Week_01/G20200343030443/NOTE.md +++ b/Week_01/G20200343030443/NOTE.md @@ -1 +1,22 @@ -学习笔记 \ No newline at end of file +问题1:重写DequeDemo +import java.util.Deque; +import java.util.LinkedList; + +public class DequeDemo { + + public static void main(String[] args) { + Deque deque = new LinkedList(); + deque.offerFirst("a"); + deque.offerFirst("b"); + deque.offerFirst("c"); + System.out.println(deque); + String str = deque.peekFirst(); + System.out.println(str); + System.out.println(deque); + while (deque.size() > 0) { + System.out.println(deque.pollFirst()); + } + System.out.println(deque); + + } +} From 7a356b07261ddb0002389493910c491eb41fed49 Mon Sep 17 00:00:00 2001 From: Peng Wu Date: Sat, 15 Feb 2020 21:45:13 -0800 Subject: [PATCH 0149/1268] 449 week 00 --- Week_00/G20200343030449/LeetCode_11_449.java | 40 ++++++++++++++++++ Week_00/G20200343030449/LeetCode_141_449.java | 42 +++++++++++++++++++ Week_00/G20200343030449/LeetCode_15_449.java | 42 +++++++++++++++++++ .../G20200343030449/LeetCode_283-2_449.java | 27 ++++++++++++ Week_00/G20200343030449/LeetCode_70_449.java | 37 ++++++++++++++++ 5 files changed, 188 insertions(+) create mode 100644 Week_00/G20200343030449/LeetCode_11_449.java create mode 100644 Week_00/G20200343030449/LeetCode_141_449.java create mode 100644 Week_00/G20200343030449/LeetCode_15_449.java create mode 100644 Week_00/G20200343030449/LeetCode_283-2_449.java create mode 100644 Week_00/G20200343030449/LeetCode_70_449.java diff --git a/Week_00/G20200343030449/LeetCode_11_449.java b/Week_00/G20200343030449/LeetCode_11_449.java new file mode 100644 index 00000000..2304974f --- /dev/null +++ b/Week_00/G20200343030449/LeetCode_11_449.java @@ -0,0 +1,40 @@ +/* + * @lc app=leetcode id=11 lang=java + * + * [11] Container With Most Water + */ +/** + * an能承载的水量由离an最远的不矮于an的竖线ax决定 + * calculateMaxArea()从左右两个方向寻找ax,并返回最大值。 + * 时间复杂度:O(n^2) 最优O(n),当两端的竖线最长时;最差O(n^2),当最长竖线在中间时 + * 空间复杂度:O(1) + */ +// @lc code=start +class Solution { + public int maxArea(int[] height) { + int result = 0; + for (int i = 0; i < height.length; i++) { + result = Math.max(result, calculateMaxArea(height, i)); + } + return result; + } + + private int calculateMaxArea(int[] height, int selfIndex) { + int left = 0; + int right = height.length - 1; + while (left != selfIndex) { + if (height[selfIndex] <= height[left]) { + break; + } + left++; + } + while (right != selfIndex) { + if (height[selfIndex] <= height[right]) { + break; + } + right--; + } + return Math.max(height[selfIndex] * (selfIndex - left), height[selfIndex] * (right - selfIndex)); + } +} +// @lc code=end diff --git a/Week_00/G20200343030449/LeetCode_141_449.java b/Week_00/G20200343030449/LeetCode_141_449.java new file mode 100644 index 00000000..07c43724 --- /dev/null +++ b/Week_00/G20200343030449/LeetCode_141_449.java @@ -0,0 +1,42 @@ +/* + * @lc app=leetcode id=141 lang=java + * + * [141] Linked List Cycle + */ + +// @lc code=start + +// Definition for singly-linked list. +class ListNode { + int val; + ListNode next; + + ListNode(int x) { + val = x; + next = null; + } +} + +/* + * 使用快慢两个指针:快指针一次走2步,慢指针一次走1步。 如果有环则快慢指针必相遇,否则快指针会首先走到链表尾部(fast == null || + * fast.next == null) + */ +class Solution { + public boolean hasCycle(ListNode head) { + if (head == null || head.next == null) { + return false; + } + + ListNode fast = head.next.next; + ListNode slow = head.next; + while (fast != null && fast.next != null) { + if (fast.val == slow.val) { + return true; + } + fast = fast.next.next; + slow = slow.next; + } + return false; + } +} +// @lc code=end diff --git a/Week_00/G20200343030449/LeetCode_15_449.java b/Week_00/G20200343030449/LeetCode_15_449.java new file mode 100644 index 00000000..272d2d94 --- /dev/null +++ b/Week_00/G20200343030449/LeetCode_15_449.java @@ -0,0 +1,42 @@ +import java.util.*; + +/* + * @lc app=leetcode id=15 lang=java + * + * [15] 3Sum + */ + +// @lc code=start +/*******未通过******* + * 思路: 建立一个Map(key: 加多少等于0, value: nums的下标) + * 遍历nums中所有两个数的组合,利用组合的结果来从map中找到第三个数的下标 + * 未通过,因为虽然下标同,但值可以相同。这个方法不能去除相同的值。例如: + * input: [-1,0,1,2,-1,-4] + * expected: [[-1,-1,2],[-1,0,1]] + * output: [[-1,0,1],[-1,2,-1],[0,1,-1]] + */ +class Solution { + public List> threeSum(int[] nums) { + // key: 加多少等于0, value: nums的下标 + Map map = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + map.put(-nums[i], i); + } + + List> results = new ArrayList<>(); + for (int i = 0; i < nums.length - 2; i++) { + for (int j = i + 1; j < nums.length - 1; j++) { + Integer thirdNumber = map.get(nums[i] + nums[j]); + if (thirdNumber != null && thirdNumber > j) { + List result = new ArrayList<>(); + result.add(nums[i]); + result.add(nums[j]); + result.add(nums[thirdNumber]); + results.add(result); + } + } + } + return results; + } +} +// @lc code=end diff --git a/Week_00/G20200343030449/LeetCode_283-2_449.java b/Week_00/G20200343030449/LeetCode_283-2_449.java new file mode 100644 index 00000000..e1a1027c --- /dev/null +++ b/Week_00/G20200343030449/LeetCode_283-2_449.java @@ -0,0 +1,27 @@ +/* + * @lc app=leetcode id=283 lang=java + * + * [283] Move Zeroes + */ + +// @lc code=start +class Solution { + public void moveZeroes(int[] nums) { + int insertAt = 0; + for (int i = 0; i < nums.length; i++) { + if (nums[i] != 0) { + if (i != insertAt) { + swap(nums, i, insertAt); + } + insertAt++; + } + } + } + + private void swap(int[] nums, int pos1, int pos2) { + int temp = nums[pos1]; + nums[pos1] = nums[pos2]; + nums[pos2] = temp; + } +} +// @lc code=end diff --git a/Week_00/G20200343030449/LeetCode_70_449.java b/Week_00/G20200343030449/LeetCode_70_449.java new file mode 100644 index 00000000..dcc2c505 --- /dev/null +++ b/Week_00/G20200343030449/LeetCode_70_449.java @@ -0,0 +1,37 @@ +/* + * @lc app=leetcode id=70 lang=java + * + * [70] Climbing Stairs + */ + +// @lc code=start +/* + * 最简单代码可以用递归,直接返回 climbStairs(n - 1) + climbStairs(n - 2)。 + * 但代码会超时,因为大概有一半重复计算。计算climbStairs(n - 1)时其实已经计算了下一个数的climbStairs(n - 2)。 + * 所以用一个数组进行动态规划:dbArray[n] = climbStairs(n)。 + * 时间复杂度:O(2^n) 动态规划树中每一个节点计算一次 + * 空间复杂度:O(n) 只占用了动态规划数组的空间 + */ +class Solution { + public int climbStairs(int n) { + if (n == 0) { + return 0; + } + if (n == 1) { + return 1; + } + if (n == 2) { + return 2; + } + + int[] dbArray = new int[n]; + dbArray[0] = 0; + dbArray[1] = 1; + dbArray[2] = 2; + for (int i = 3; i < n; i++) { + dbArray[i] = dbArray[i - 1] + dbArray[i - 2]; + } + return dbArray[n - 1] + dbArray[n - 2]; + } +} +// @lc code=end From 2a4c0f25b75872dc8719c06b36d6875bba9e61ec Mon Sep 17 00:00:00 2001 From: first-giver <406803663@qq.com> Date: Sun, 16 Feb 2020 14:26:44 +0800 Subject: [PATCH 0150/1268] zero move --- Week_01/G20200343030531/leetcode_189_531.go | 9 ++-- Week_01/G20200343030531/leetcode_283_531.go | 53 +++++++++++++++++++++ 2 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 Week_01/G20200343030531/leetcode_283_531.go diff --git a/Week_01/G20200343030531/leetcode_189_531.go b/Week_01/G20200343030531/leetcode_189_531.go index a7f08e07..179c93df 100644 --- a/Week_01/G20200343030531/leetcode_189_531.go +++ b/Week_01/G20200343030531/leetcode_189_531.go @@ -53,8 +53,12 @@ func rotate(nums []int, k int) { func rotate(nums []int, k int) { k %= len(nums) revers(&nums, 0, len(nums)-1) - revers(&nums, 0, k) - revers(&nums, k+1, len(nums)-1) + fmt.Println(nums) + revers(&nums, 0, k-1) + fmt.Println(nums) + revers(&nums, k, len(nums)-1) + fmt.Println(nums) + /* // 全部反转 rotateAll(&nums) @@ -113,5 +117,4 @@ func revers(num *[]int, start, end int) { start++ end-- } - fmt.Println(*num) } diff --git a/Week_01/G20200343030531/leetcode_283_531.go b/Week_01/G20200343030531/leetcode_283_531.go new file mode 100644 index 00000000..872b735f --- /dev/null +++ b/Week_01/G20200343030531/leetcode_283_531.go @@ -0,0 +1,53 @@ +package main + +import ( +"fmt" +) + +func main() { + sli := []int{0, 1, 0 , 3, 12, 0, 0, 14, 4} + moveZeroes(sli) +} + +// 双指针法 +// 双指针法,快指针向前移动,慢指针指向当前0值,快指针位置是非零值, +// 则将该值移动到慢指针位置,慢指针前进一位, +// 补零操作, + +// 记录0值操作非常多余,把非零值移动到前面,插入下标以后的都是0值 +func moveZeroes(nums []int) { + var count int + slow := 0 + for quick := 0; quick < len(nums); quick++ { + if nums[quick] == 0 { + count++ + }else { + nums[slow] = nums[quick] + slow++ + } + } + for i := (len(nums) - count); i < len(nums); i++ { + nums[i] = 0 + } + fmt.Println(nums) +} + +// 该方法通过记录0值个数,将非零值前移,然后末端补零的方式实现移动 +/* +func moveZeroes(nums []int) { + + var count int + for i := 0; i < len(nums); i++ { + if nums[i] == 0 { + count++ + }else { + nums[i-count] = nums[i] + } + } + + for i := (len(nums) - count); i < len(nums); i++ { + nums[i] = 0 + } + fmt.Println(nums) +} +*/ \ No newline at end of file From 55d0f93c4c386302cfd661a4ee82ec44b4426e6e Mon Sep 17 00:00:00 2001 From: dinglei Date: Sun, 16 Feb 2020 14:37:22 +0800 Subject: [PATCH 0151/1268] 3sum --- Week_01/G20200343030377/LeetCode_15_377.java | 80 ++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 Week_01/G20200343030377/LeetCode_15_377.java diff --git a/Week_01/G20200343030377/LeetCode_15_377.java b/Week_01/G20200343030377/LeetCode_15_377.java new file mode 100644 index 00000000..bbc5d8f9 --- /dev/null +++ b/Week_01/G20200343030377/LeetCode_15_377.java @@ -0,0 +1,80 @@ +import java.util.*; + +//leetcode submit region begin(Prohibit modification and deletion) +class Solution { + + public List> threeSum(int[] nums) { + if (null == nums || nums.length < 3) { + return Collections.EMPTY_LIST; + } + List> res = new ArrayList<>(); + Arrays.sort(nums); + for (int i = 0; i < nums.length - 2; i++) { + if (nums[i] > 0) { + return res; + } + if (i > 0 && nums[i] == nums[i - 1]) { + continue; + } + int j = i + 1; + int k = nums.length - 1; + while ((j < k)) { + int sum = nums[i] + nums[j] + nums[k]; + if (sum == 0) { + res.add(Arrays.asList(nums[i], nums[j], nums[k])); + while (j < k && nums[j] == nums[j + 1]) { + j++; + } + while ((j < k && nums[k] == nums[k - 1])) { + k--; + } + j++; + k--; + } else if (sum < 0) { + j++; + } else if (sum > 0) { + k--; + } + } + } + return res; + } + + // n * two sum + public List> threeSum2(int[] nums) { + Set> res = new HashSet<>(); + for (int i = 0; i < nums.length - 2; i++) { + int target = -nums[i]; + Set set = new HashSet<>(); + for (int j = i + 1; j < nums.length; j++) { + if (set.contains(nums[j])) { + List temp = Arrays.asList(nums[i], nums[j], target - nums[j]); + Collections.sort(temp); + res.add(temp); + } else { + set.add(target - nums[j]); + } + } + } + return new ArrayList<>(res); + } + + + //暴力 三重循环 + public List> threeSum1(int[] nums) { + Set> res = new HashSet<>(); + for (int i = 0; i < nums.length - 2; i++) { + for (int j = i + 1; j < nums.length - 1; j++) { + for (int k = j + 1; k < nums.length; k++) { + if (nums[i] + nums[j] + nums[k] == 0) { + List temp = Arrays.asList(nums[i], nums[j], nums[k]); + Collections.sort(temp); + ((HashSet) res).add(temp); + } + + } + } + } + return new ArrayList<>(res); + } +} From 37eef573602e5e2433111355dc010636f4211e82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=89=E8=B4=9E?= Date: Sun, 16 Feb 2020 14:49:45 +0800 Subject: [PATCH 0152/1268] week 01 --- .gitignore | 2 + Week_00/G20200343030391/LeetCode_141_391.java | 46 +++++ Week_00/G20200343030391/LeetCode_15_391.java | 43 +++++ Week_00/G20200343030391/LeetCode_283_391.java | 49 ----- Week_00/G20200343030391/LeetCode_70_391.java | 11 +- Week_01/G20200343030391/LeetCode_189_391.java | 28 +++ Week_01/G20200343030391/LeetCode_26_391.java | 21 +- Week_01/G20200343030391/LeetCode_283_391.java | 43 +++++ Week_01/G20200343030391/LeetCode_42_391.java | 34 ++++ Week_01/G20200343030391/LeetCode_641_391.java | 182 ++++++++++++++++++ Week_01/G20200343030391/LeetCode_66_391.java | 28 +++ Week_01/G20200343030391/LeetCode_88_391.java | 34 ++++ Week_01/G20200343030391/NOTE.md | 2 +- 13 files changed, 457 insertions(+), 66 deletions(-) create mode 100644 .gitignore create mode 100644 Week_00/G20200343030391/LeetCode_141_391.java create mode 100644 Week_00/G20200343030391/LeetCode_15_391.java delete mode 100644 Week_00/G20200343030391/LeetCode_283_391.java create mode 100644 Week_01/G20200343030391/LeetCode_42_391.java create mode 100644 Week_01/G20200343030391/LeetCode_641_391.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..8dd0da6f --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.idea +output diff --git a/Week_00/G20200343030391/LeetCode_141_391.java b/Week_00/G20200343030391/LeetCode_141_391.java new file mode 100644 index 00000000..038b8b6e --- /dev/null +++ b/Week_00/G20200343030391/LeetCode_141_391.java @@ -0,0 +1,46 @@ +package G20200343030391; + +public class LeetCode_141_391 { + public static void main(String[] args) { + //1->2->3->4->5->NULL + ListNode listNode1 = new ListNode(1); + ListNode listNode2 = new ListNode(2); + ListNode listNode3 = new ListNode(3); + ListNode listNode4 = new ListNode(4); + ListNode listNode5 = new ListNode(5); + listNode1.next = listNode2; + listNode2.next = listNode3; + listNode3.next = listNode4; + listNode4.next = listNode5; + listNode5.next = listNode2; + + boolean b = hasCycle(listNode1); + System.out.println(b); + } + + public static boolean hasCycle(ListNode head) { + if (head == null || head.next == null) { + return false; + } + ListNode slow = head; + ListNode fast = head.next; + while (slow != fast) { + if (fast == null || fast.next == null) { + return false; + } + slow = slow.next; + fast = fast.next.next; + } + return true; + } + public static class ListNode { + int val; + ListNode next; + + ListNode(int x) { + val = x; + } + + } + +} diff --git a/Week_00/G20200343030391/LeetCode_15_391.java b/Week_00/G20200343030391/LeetCode_15_391.java new file mode 100644 index 00000000..8d7bb89c --- /dev/null +++ b/Week_00/G20200343030391/LeetCode_15_391.java @@ -0,0 +1,43 @@ +package G20200343030391; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class LeetCode_15_391 { + public static void main(String[] args) { + int[] nums = {-1, 0, 1, 2, -1, -4}; + List> lists = threeSum(nums); + System.out.println(lists); + } + + public static List> threeSum(int[] nums) { + List> ans = new ArrayList<>(); + int len = nums.length; + if (len < 3) { + return ans; + } + Arrays.sort(nums); // 排序 + for (int i = 0; i < len; i++) { + if (nums[i] > 0) break; // 如果当前数字大于0,则三数之和一定大于0,所以结束循环 + if (i > 0 && nums[i] == nums[i - 1]) continue; // 去重 + int L = i + 1; + int R = len - 1; + while (L < R) { + int sum = nums[i] + nums[L] + nums[R]; + if (sum == 0) { + ans.add(Arrays.asList(nums[i], nums[L], nums[R])); + while (L < R && nums[L] == nums[L + 1]) L++; // 去重 + while (L < R && nums[R] == nums[R - 1]) R--; // 去重 + L++; + R--; + } else if (sum < 0) { + L++; + } else { + R--; + } + } + } + return ans; + } +} diff --git a/Week_00/G20200343030391/LeetCode_283_391.java b/Week_00/G20200343030391/LeetCode_283_391.java deleted file mode 100644 index 7a57fbb0..00000000 --- a/Week_00/G20200343030391/LeetCode_283_391.java +++ /dev/null @@ -1,49 +0,0 @@ -import java.util.Arrays; - -public class LeetCode_283_391 { - - public static void main(String[] args) { - int[] nums = {0, 0, 1}; - moveZeroesDoubleCursor(nums); - System.out.println(Arrays.toString(nums)); - } - - /** - * 暴力补0 - * index记录非0下标,若有0则直接向前移动;最后补0 - * 时间复杂度O(n) - * @param nums - */ - public static void moveZeroes_1(int[] nums) { - int index = 0; - for (int i = 0; i < nums.length; i++) { - if (nums[i] != 0) { - nums[index] = nums[i]; - index++; - } - } - for (int i = index; i < nums.length; i++) { - nums[i] = 0; - } - } - - /** - * 双指针: - * 快指针i 满指针j 非0元素直接前移 - * 时间复杂度O(n) - * @param nums - */ - public static void moveZeroesDoubleCursor(int[] nums) { - - int j = 0; - for (int i = 0; i < nums.length; i++) { - if (nums[i] != 0) { - int tmp = nums[i]; - nums[i] = nums[j]; - nums[j] = tmp; - j++; - } - } - } - -} diff --git a/Week_00/G20200343030391/LeetCode_70_391.java b/Week_00/G20200343030391/LeetCode_70_391.java index 59a5cd2b..3c8a1689 100644 --- a/Week_00/G20200343030391/LeetCode_70_391.java +++ b/Week_00/G20200343030391/LeetCode_70_391.java @@ -1,3 +1,5 @@ +package G20200343030391; + public class LeetCode_70_391 { public static void main(String[] args) { @@ -5,7 +7,12 @@ public static void main(String[] args) { } public static int climbStairs(int n) { - - return 0; + int[] dp = new int[n + 1]; + dp[0] = 1; + dp[1] = 1; + for(int i = 2; i <= n; i++) { + dp[i] = dp[i - 1] + dp[i - 2]; + } + return dp[n]; } } diff --git a/Week_01/G20200343030391/LeetCode_189_391.java b/Week_01/G20200343030391/LeetCode_189_391.java index e1a75f7d..89d7eed6 100644 --- a/Week_01/G20200343030391/LeetCode_189_391.java +++ b/Week_01/G20200343030391/LeetCode_189_391.java @@ -1,8 +1,36 @@ package G20200343030391; +import java.util.Arrays; + public class LeetCode_189_391 { public static void main(String[] args) { + int[] nums = {1, 2, 3, 4, 5, 6}; + int k = 2; + rotate(nums, k); + System.out.println(Arrays.toString(nums)); + } + /** + * 环状替换:从开始位置连续替换,发生碰撞则开启下一轮替换 + * 时间复杂度:O(n) + * @param nums + * @param k + */ + public static void rotate(int[] nums, int k) { + k = k % nums.length; + int count = 0; + for (int start = 0; count < nums.length; start++) { + int current = start; + int currentVal = nums[start]; + do { + int newIndex = (current + k) % (nums.length); + int temp = nums[newIndex]; + nums[newIndex] = currentVal; + currentVal = temp; + current = newIndex; + count++; + } while (start != current); + } } } diff --git a/Week_01/G20200343030391/LeetCode_26_391.java b/Week_01/G20200343030391/LeetCode_26_391.java index 28c909e8..2ace01db 100644 --- a/Week_01/G20200343030391/LeetCode_26_391.java +++ b/Week_01/G20200343030391/LeetCode_26_391.java @@ -11,26 +11,19 @@ public static void main(String[] args) { } /** - * 双指针 + * 双指针:慢指针j保留去重后下标,快指针i寻找下一个数字 + * 时间复杂度:O(n) * @param nums * @return */ public static int removeDuplicates_1(int[] nums) { - int j = 1; - for (int i = 0; i < nums.length; i++) { - if (nums[i] == nums[j]) { - nums[] + int j = 0; + for (int i = 1; i < nums.length; i++) { + if (nums[i] != nums[j]) { + nums[++j] = nums[i]; } } - return j; + return j+1; } - /** - * 递归 - * @param nums - * @return - */ - public static int removeDuplicates_2(int[] nums) { - return 0; - } } diff --git a/Week_01/G20200343030391/LeetCode_283_391.java b/Week_01/G20200343030391/LeetCode_283_391.java index 11a800ae..5669bd2d 100644 --- a/Week_01/G20200343030391/LeetCode_283_391.java +++ b/Week_01/G20200343030391/LeetCode_283_391.java @@ -1,8 +1,51 @@ package G20200343030391; +import java.util.Arrays; + public class LeetCode_283_391 { public static void main(String[] args) { + int[] nums = {0, 0, 1}; + moveZeroesDoubleCursor(nums); + System.out.println(Arrays.toString(nums)); + } + + /** + * 暴力补0 + * index记录非0下标,若有0则直接向前移动;最后补0 + * 时间复杂度O(n) + * @param nums + */ + public static void moveZeroes_1(int[] nums) { + int index = 0; + for (int i = 0; i < nums.length; i++) { + if (nums[i] != 0) { + nums[index] = nums[i]; + index++; + } + } + for (int i = index; i < nums.length; i++) { + nums[i] = 0; + } + } + + /** + * 双指针: + * 快指针i 满指针j 非0元素直接前移 + * 时间复杂度O(n) + * @param nums + */ + public static void moveZeroesDoubleCursor(int[] nums) { + int j = 0; + for (int i = 0; i < nums.length; i++) { + if (nums[i] != 0) { + int tmp = nums[i]; + nums[i] = nums[j]; + nums[j] = tmp; + j++; + } + } } + } diff --git a/Week_01/G20200343030391/LeetCode_42_391.java b/Week_01/G20200343030391/LeetCode_42_391.java new file mode 100644 index 00000000..23e62e6d --- /dev/null +++ b/Week_01/G20200343030391/LeetCode_42_391.java @@ -0,0 +1,34 @@ +package G20200343030391; + +import java.util.Stack; + +public class LeetCode_42_391 { + + public static void main(String[] args) { + int[] height = {0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1}; + int trap = trap(height); + System.out.println(trap); + } + + public static int trap(int[] height) { + int sum = 0; + Stack stack = new Stack<>(); + int current = 0; + while (current < height.length) { + //如果栈不空并且当前指向的高度大于栈顶高度就一直循环 + while (!stack.empty() && height[current] > height[stack.peek()]) { + int h = height[stack.peek()]; //取出要出栈的元素 + stack.pop(); //出栈 + if (stack.empty()) { // 栈空就出去 + break; + } + int distance = current - stack.peek() - 1; //两堵墙之前的距离。 + int min = Math.min(height[stack.peek()], height[current]); + sum = sum + distance * (min - h); + } + stack.push(current); //当前指向的墙入栈 + current++; //指针后移 + } + return sum; + } +} diff --git a/Week_01/G20200343030391/LeetCode_641_391.java b/Week_01/G20200343030391/LeetCode_641_391.java new file mode 100644 index 00000000..051f41ef --- /dev/null +++ b/Week_01/G20200343030391/LeetCode_641_391.java @@ -0,0 +1,182 @@ +package G20200343030391; + +public class LeetCode_641_391 { + public static void main(String[] args) { + MyCircularDeque myCircularDeque = new MyCircularDeque(8); + boolean b = myCircularDeque.insertFront(5); + assert b; + boolean empty22 = myCircularDeque.isEmpty(); + assert !empty22; + int front = myCircularDeque.getFront(); + assert front == 5; + boolean empty = myCircularDeque.isEmpty(); + assert !empty; + boolean b1 = myCircularDeque.deleteFront(); + assert b1; + boolean b2 = myCircularDeque.insertLast(3); + assert b2; + int rear = myCircularDeque.getRear(); + assert rear == 3; + boolean empty1 = myCircularDeque.isEmpty(); + assert !empty1; + boolean b3 = myCircularDeque.insertLast(7); + assert b3; + boolean b4 = myCircularDeque.insertFront(7); + assert b4; + boolean b5 = myCircularDeque.deleteLast(); + assert b5; + boolean b6 = myCircularDeque.insertLast(4); + assert b6; + boolean empty2 = myCircularDeque.isEmpty(); + assert !empty2; + } + + public static class MyCircularDeque { + + int size; + int count; + MyCircularDequeNode first; + MyCircularDequeNode last; + + public static class MyCircularDequeNode{ + int val; + MyCircularDequeNode prev; + MyCircularDequeNode next; + public MyCircularDequeNode(int val) { + this.val = val; + } + } + + /** + * Initialize your data structure here. Set the size of the deque to be k. + */ + public MyCircularDeque(int k) { + this.count = 0; + this.size = k; + } + + /** + * Adds an item at the front of Deque. Return true if the operation is successful. + */ + public boolean insertFront(int value) { + if (count < size) { + MyCircularDequeNode node = new MyCircularDequeNode(value); + if (count == 0) { + this.first = node; + this.last = node; + } else { + MyCircularDequeNode currentFirst = this.first; + node.next = currentFirst; + currentFirst.prev = node; + this.first = node; + } + count++; + return true; + } else { + return false; + } + } + + /** + * Adds an item at the rear of Deque. Return true if the operation is successful. + */ + public boolean insertLast(int value) { + if (count < size) { + MyCircularDequeNode node = new MyCircularDequeNode(value); + if (count == 0) { + this.first = node; + this.last = node; + } else { + MyCircularDequeNode currentLast = this.last; + currentLast.next = node; + node.prev = currentLast; + this.last = node; + } + count++; + return true; + } else { + return false; + } + } + + /** + * Deletes an item from the front of Deque. Return true if the operation is successful. + */ + public boolean deleteFront() { + if (count > 0) { + if (count == 1) { + this.first = null; + this.last = null; + } else { + MyCircularDequeNode first = this.first; + MyCircularDequeNode second = first.next; + second.prev = null; + first = null; + this.first = second; + } + count--; + return true; + } else { + return false; + } + } + + /** + * Deletes an item from the rear of Deque. Return true if the operation is successful. + */ + public boolean deleteLast() { + if (count > 0) { + if (count == 1) { + this.first = null; + this.last = null; + } else { + MyCircularDequeNode currentLast = this.last; + MyCircularDequeNode second_to_last = currentLast.prev; + second_to_last.next = null; + this.last = second_to_last; + currentLast = null; + } + count--; + return true; + } else { + return false; + } + } + + /** + * Get the front item from the deque. + */ + public int getFront() { + if (count > 0) { + return this.first.val; + } else { + return -1; + } + } + + /** + * Get the last item from the deque. + */ + public int getRear() { + if (count > 0) { + return this.last.val; + } else { + return -1; + } + } + + /** + * Checks whether the circular deque is empty or not. + */ + public boolean isEmpty() { + return count == 0; + } + + /** + * Checks whether the circular deque is full or not. + */ + public boolean isFull() { + return count == size; + } + } +} diff --git a/Week_01/G20200343030391/LeetCode_66_391.java b/Week_01/G20200343030391/LeetCode_66_391.java index abc0ecd1..6062326a 100644 --- a/Week_01/G20200343030391/LeetCode_66_391.java +++ b/Week_01/G20200343030391/LeetCode_66_391.java @@ -1,8 +1,36 @@ package G20200343030391; +import java.util.Arrays; + public class LeetCode_66_391 { public static void main(String[] args) { + int[] nums = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0}; + int[] plusOne = plusOne(nums); + System.out.println(Arrays.toString(plusOne)); + + } + + /** + * 末位无进位,直接加一; + * 末位有进位,则末位=0,下一位继续加一,直到!=0,结束进位, + * 进位全为0,位数+1 + * 时间复杂度:O(n) + * @param digits + * @return + */ + public static int[] plusOne(int[] digits) { + int len = digits.length; + for (int i = len - 1; i >= 0; i--) { + digits[i]++; + digits[i] %= 10; + if (digits[i] != 0) { + return digits; + } + } + digits = new int[len + 1]; + digits[0] = 1; + return digits; } } diff --git a/Week_01/G20200343030391/LeetCode_88_391.java b/Week_01/G20200343030391/LeetCode_88_391.java index 79917bc3..aa376788 100644 --- a/Week_01/G20200343030391/LeetCode_88_391.java +++ b/Week_01/G20200343030391/LeetCode_88_391.java @@ -1,8 +1,42 @@ package G20200343030391; +import java.util.Arrays; + public class LeetCode_88_391 { public static void main(String[] args) { + int[] nums1 = {1, 2, 3, 0, 0, 0}; + int m = 3; + int[] nums2 = {2, 5, 6}; + int n = 3; + merge(nums1, m, nums2, n); + System.out.println(Arrays.toString(nums1)); + } + /** + * 双指针:从尾部开始遍历,最大的放到最尾巴;最后补充num2未遍历到的 + * 时间复杂度 : O(n) + * + * @param nums1 + * @param m + * @param nums2 + * @param n + */ + public static void merge(int[] nums1, int m, int[] nums2, int n) { + int nums1Tail = m - 1; + int nums2Tail = n - 1; + int mergeTail = m + n - 1; + while (nums1Tail >= 0 && nums2Tail >= 0) { + if (nums1[nums1Tail] < nums2[nums2Tail]) { + nums1[mergeTail] = nums2[nums2Tail]; + mergeTail--; + nums2Tail--; + } else { + nums1[mergeTail] = nums1[nums1Tail]; + mergeTail--; + nums1Tail--; + } + } + System.arraycopy(nums2, 0, nums1, 0, nums2Tail + 1); } } diff --git a/Week_01/G20200343030391/NOTE.md b/Week_01/G20200343030391/NOTE.md index 50de3041..107ea7d6 100644 --- a/Week_01/G20200343030391/NOTE.md +++ b/Week_01/G20200343030391/NOTE.md @@ -1 +1 @@ -学习笔记 \ No newline at end of file +# 学习笔记 From dc4ac66ddb90b498a510899f2440fc148b663ed2 Mon Sep 17 00:00:00 2001 From: digitspace Date: Sun, 16 Feb 2020 15:03:08 +0800 Subject: [PATCH 0153/1268] =?UTF-8?q?Week=2001=E7=AE=97=E6=B3=95=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030569/LeetCode_189_569.java | 35 ++++ Week_01/G20200343030569/LeetCode_1_569.java | 33 ++++ Week_01/G20200343030569/LeetCode_21_569.java | 52 ++++++ Week_01/G20200343030569/LeetCode_26_569.java | 31 ++++ Week_01/G20200343030569/LeetCode_283_569.java | 28 ++++ Week_01/G20200343030569/LeetCode_42_569.java | 50 ++++++ Week_01/G20200343030569/LeetCode_641_569.java | 150 ++++++++++++++++++ Week_01/G20200343030569/LeetCode_66_569.java | 30 ++++ Week_01/G20200343030569/LeetCode_88_569.java | 24 +++ 9 files changed, 433 insertions(+) create mode 100644 Week_01/G20200343030569/LeetCode_189_569.java create mode 100644 Week_01/G20200343030569/LeetCode_1_569.java create mode 100644 Week_01/G20200343030569/LeetCode_21_569.java create mode 100644 Week_01/G20200343030569/LeetCode_26_569.java create mode 100644 Week_01/G20200343030569/LeetCode_283_569.java create mode 100644 Week_01/G20200343030569/LeetCode_42_569.java create mode 100644 Week_01/G20200343030569/LeetCode_641_569.java create mode 100644 Week_01/G20200343030569/LeetCode_66_569.java create mode 100644 Week_01/G20200343030569/LeetCode_88_569.java diff --git a/Week_01/G20200343030569/LeetCode_189_569.java b/Week_01/G20200343030569/LeetCode_189_569.java new file mode 100644 index 00000000..1ff14292 --- /dev/null +++ b/Week_01/G20200343030569/LeetCode_189_569.java @@ -0,0 +1,35 @@ + +/* + * 189.Rotate Array + * 旋转数组 + */ +public class LeetCode_189_569 { + + public static void main(String[] args) { + int[] nums = { 1,2,3,4,5,6,7 }; + int k = 4; + (new LeetCode_189_569()).new Solution().rotate(nums,k); + for( int i = 0; i < nums.length; i++ ){ + System.out.println(nums[i]); + } + } + + class Solution { + public void rotate(int[] nums, int k) { + k = k % nums.length; + for (int i = 0, count = 0; count < nums.length; i++) { + int source = i; + int sourceValue = nums[source]; + do { + int dest = (source + k) % nums.length; + int temp = nums[dest]; + nums[dest] = sourceValue; + source = dest; + sourceValue = temp; + count++; + } while (source != i); + } + } + } +} + diff --git a/Week_01/G20200343030569/LeetCode_1_569.java b/Week_01/G20200343030569/LeetCode_1_569.java new file mode 100644 index 00000000..a6759fb7 --- /dev/null +++ b/Week_01/G20200343030569/LeetCode_1_569.java @@ -0,0 +1,33 @@ +import java.util.HashMap; +import java.util.Map; + +/* + * 1. Two Sum + * 两数之和 + */ +public class LeetCode_1_569 { + + public static void main(String[] args) { + // TODO Auto-generated method stub + int[] nums = { 12,2,7,11,15 }; + int target = 9; + int[] n = (new LeetCode_1_569()).new Solution().twoSum(nums, target); + for( int i = 0; i < n.length; i++ ){ + System.out.println(n[i]); + } + } + + class Solution { + public int[] twoSum(int[] nums, int target) { + Map map = new HashMap(); + for (int i = 0; i < nums.length; i++) { + int want = target - nums[i]; + if( map.containsKey(want) ) { + return new int[] { map.get(want), i }; + } + map.put(nums[i], i); + } + return null; + } + } +} diff --git a/Week_01/G20200343030569/LeetCode_21_569.java b/Week_01/G20200343030569/LeetCode_21_569.java new file mode 100644 index 00000000..5e98222f --- /dev/null +++ b/Week_01/G20200343030569/LeetCode_21_569.java @@ -0,0 +1,52 @@ +/* + * 21. Merge Two Sorted Lists + * 合并两个有序链表 + */ +public class LeetCode_21_569 { + + public static void main(String[] args) { + LeetCode_21_569 lc = new LeetCode_21_569(); + ListNode ln13 = lc.createNewNode(4, null); + ListNode ln12 = lc.createNewNode(2, ln13); + ListNode ln11 = lc.createNewNode(1, ln12); + + ListNode ln23 = lc.createNewNode(4, null); + ListNode ln22 = lc.createNewNode(3, ln23); + ListNode ln21 = lc.createNewNode(1, ln22); + + ListNode node = lc.new Solution().mergeTwoLists(ln11,ln21); + while (node != null) { + System.out.println(node.val); + node = node.next; + } + + } + + public ListNode createNewNode( int i, ListNode next ) { + ListNode node = new ListNode(i); + node.next = next; + return node; + } + + + public class ListNode { + int val; + ListNode next; + ListNode(int x) { val = x; } + } + + class Solution { + public ListNode mergeTwoLists(ListNode l1, ListNode l2) { + ListNode tempNode = new ListNode(0); + ListNode currentNode = tempNode; + while (l1 != null && l2 != null) { + currentNode.next = (l1.val < l2.val) ? l1 : l2; + ListNode n = (l1.val < l2.val) ? (l1 = l1.next) : (l2 = l2.next); + currentNode = currentNode.next; + } + ListNode nonEmpty = (l1 != null) ? l1 : l2; + currentNode.next = nonEmpty; + return tempNode.next; + } + } +} diff --git a/Week_01/G20200343030569/LeetCode_26_569.java b/Week_01/G20200343030569/LeetCode_26_569.java new file mode 100644 index 00000000..f708d3f9 --- /dev/null +++ b/Week_01/G20200343030569/LeetCode_26_569.java @@ -0,0 +1,31 @@ +/* + * 26. Remove Duplicates from Sorted Array + * 删除排序数组中的重复项 + */ +public class LeetCode_26_569 { + public static void main( String[] argv) { + int[] nums = { 0,0,1,1,1,2,2,3,3,4,4 }; + int n = (new LeetCode_26_569()).new Solution().removeDuplicates(nums); + for( int i = 0; i < n; i++ ){ + System.out.println(nums[i]); + } + } + + class Solution { + public int removeDuplicates(int[] nums) { + if (nums.length <= 1) + return nums.length; + + int validIndex = 1; + int lastNum = nums[0]; + for (int i = 1; i < nums.length; i++) { + if (nums[i] != lastNum) { + nums[validIndex++] = nums[i]; + lastNum = nums[i]; + } + } + return validIndex; + } + } +} + diff --git a/Week_01/G20200343030569/LeetCode_283_569.java b/Week_01/G20200343030569/LeetCode_283_569.java new file mode 100644 index 00000000..9b0cedac --- /dev/null +++ b/Week_01/G20200343030569/LeetCode_283_569.java @@ -0,0 +1,28 @@ + +/* + * 283. Move Zeroes + * 移动零 + */ +public class LeetCode_283_569 { + + public static void main(String[] args) { + int[] nums = { 0,1,0,3,12,0 }; + int target = 9; + (new LeetCode_283_569()).new Solution().moveZeroes(nums); + for( int i = 0; i < nums.length; i++ ){ + System.out.println(nums[i]); + } + } + + class Solution { + public void moveZeroes(int[] nums) { + int validIndex = 0; + for ( int i = 0; i < nums.length; i++ ) { + if ( nums[i] != 0 ) { + nums[validIndex++] = nums[i]; + nums[i] = 0; + } + } + } + } +} diff --git a/Week_01/G20200343030569/LeetCode_42_569.java b/Week_01/G20200343030569/LeetCode_42_569.java new file mode 100644 index 00000000..fed72188 --- /dev/null +++ b/Week_01/G20200343030569/LeetCode_42_569.java @@ -0,0 +1,50 @@ +/* + * 42. Trapping Rain Water + * 接雨水 + */ +public class LeetCode_42_569 { + + public static void main(String[] args) { + // TODO Auto-generated method stub + int[] nums = { 2,0,2 }; + int n = (new LeetCode_42_569()).new Solution().trap(nums); + System.out.println(n); + } + + class Solution { + /* + * 按行算水量,行数等于高度数组的最大值,但这个算法对于高度高的数组超时,比较垃圾 + */ + public int trap(int[] height) { + int water = 0; + int rows = 0; + for (int i:height) { + rows = Math.max(rows, i); + } + //遍历每行 + for ( int i = 1; i <= rows; i++ ) { + int rowWater = 0; + int left = -1; + int right = -1; + for ( int j = 0; j < height.length; j++ ) { + if ( height[j] >= i ) { + if ( left < 0 ) { //第一个left + left = j; + }else { + if ( j == left + 1 ) { + left = j; + }else { + right = j; + rowWater = rowWater + (right - left - 1); + left = right; + right = -1; + } + } + } + } + water += rowWater; + } + return water; + } + } +} diff --git a/Week_01/G20200343030569/LeetCode_641_569.java b/Week_01/G20200343030569/LeetCode_641_569.java new file mode 100644 index 00000000..9c9f5e0c --- /dev/null +++ b/Week_01/G20200343030569/LeetCode_641_569.java @@ -0,0 +1,150 @@ +/* + * 641. Design Circular Deque + * 设计循环双端队列 + */ +public class LeetCode_641_569 { + + public static void main(String[] args) { + + MyCircularDeque circularDeque = new MyCircularDeque(8); + circularDeque.insertFront(5); + circularDeque.getFront(); + circularDeque.isEmpty(); + circularDeque.deleteFront(); + circularDeque.insertLast(3); + circularDeque.getRear(); + circularDeque.insertLast(7); + circularDeque.insertFront(7); + circularDeque.deleteLast(); + circularDeque.insertLast(4); + circularDeque.isEmpty(); + + + + + + + + /*circularDeque.insertFront(1); + circularDeque.insertLast(2); + circularDeque.getFront(); + circularDeque.insertLast(3); + circularDeque.getFront(); + circularDeque.insertFront(5); + circularDeque.getRear(); + circularDeque.getFront(); + circularDeque.getFront(); + circularDeque.deleteLast(); + circularDeque.getRear();*/ + + + /* circularDeque.insertLast(1); // 返回 true + circularDeque.insertLast(2); // 返回 true + circularDeque.insertFront(3); // 返回 true + circularDeque.insertFront(4); // 已经满了,返回 false + circularDeque.getRear(); // 返回 2 + circularDeque.isFull(); // 返回 true + circularDeque.deleteLast(); // 返回 true + circularDeque.insertFront(4); // 返回 true + circularDeque.getFront(); // 返回 4 +*/ + } + + +} + +class MyCircularDeque { + + class Node { + Node prev; + int value; + Node next; + + Node( Node prev, int value, Node next) { + this.prev = prev; + this.value = value; + this.next = next; + } + } + + int maxSize; + int size; + Node head; + Node tail; + + public MyCircularDeque(int k) { + this.maxSize = k; + } + + public boolean insertFront(int value) { + if ( size == maxSize ) + return false; + Node n = new Node( null, value, head ); + if ( head == null ) + tail = n; + else + head.prev = n; + head = n; + size++; + return true; + } + + public boolean insertLast(int value) { + if ( size == maxSize ) + return false; + Node n = new Node( tail, value, null ); + if ( tail == null ) + head = n; + else + tail.next = n; + tail = n; + size++; + return true; + } + + public boolean deleteFront() { + if ( head == null ) + return false; + Node n = head; + Node next = head.next; + n.next = null; + head = next; + if ( head != null ) + head.prev = null; + else + tail = null; + size--; + return true; + } + + public boolean deleteLast() { + if ( tail == null ) + return false; + Node n = tail; + Node prev = tail.prev; + n.prev = null; + tail = prev; + if ( tail != null ) + tail.next = null; + else + head = null; + size--; + return true; + } + + public int getFront() { + return (size==0) ? -1 : head.value; + } + + public int getRear() { + return (size==0) ? -1 : tail.value; + } + + public boolean isEmpty() { + return (size == 0); + } + + public boolean isFull() { + return (size == maxSize); + } +} \ No newline at end of file diff --git a/Week_01/G20200343030569/LeetCode_66_569.java b/Week_01/G20200343030569/LeetCode_66_569.java new file mode 100644 index 00000000..5ff5ebe5 --- /dev/null +++ b/Week_01/G20200343030569/LeetCode_66_569.java @@ -0,0 +1,30 @@ +/* + * 66. Plus One + * 加一 + */ +public class LeetCode_66_569 { + + public static void main(String[] args) { + int[] nums = { 4,3,8,9 }; + (new LeetCode_66_569()).new Solution().plusOne(nums); + for( int i = 0; i < nums.length; i++ ){ + System.out.println(nums[i]); + } + } + + class Solution { + public int[] plusOne(int[] digits) { + int carry = 0; + for ( int i = digits.length - 1; i >= 0; i-- ) { + int j = digits[i] + (i == digits.length-1 ? 1 : 0 ) + carry--; + carry = (j / 10 > 0) ? 1 : 0; + digits[i] = j % 10; + } + if ( carry > 0 ) { + digits = new int[digits.length+1]; + digits[0] = 1; + } + return digits; + } + } +} diff --git a/Week_01/G20200343030569/LeetCode_88_569.java b/Week_01/G20200343030569/LeetCode_88_569.java new file mode 100644 index 00000000..0002ebab --- /dev/null +++ b/Week_01/G20200343030569/LeetCode_88_569.java @@ -0,0 +1,24 @@ +import java.util.Arrays; + +/* + * 88. Merge Sorted Array + * 合并两个有序数组 + */ +public class LeetCode_88_569 { + + public static void main(String[] args) { + int[] nums1 = { 1,2,3,0,0,0 }; + int[] nums2 = { 2,5,6 }; + (new LeetCode_88_569()).new Solution().merge(nums1, 3, nums2, 3); + for( int i = 0; i < nums1.length; i++ ){ + System.out.println(nums1[i]); + } + } + + class Solution { + public void merge(int[] nums1, int m, int[] nums2, int n) { + System.arraycopy(nums2, 0, nums1, m, n); + Arrays.sort(nums1); + } + } +} From 69756a71f0d13785a6b3e67454997659e6df11c5 Mon Sep 17 00:00:00 2001 From: Saul_Cui Date: Sun, 16 Feb 2020 15:18:06 +0800 Subject: [PATCH 0154/1268] moveZeroes --- Week_00/G20200343030643/643-movezeros.py | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/Week_00/G20200343030643/643-movezeros.py b/Week_00/G20200343030643/643-movezeros.py index d454efa0..3ce4e17b 100644 --- a/Week_00/G20200343030643/643-movezeros.py +++ b/Week_00/G20200343030643/643-movezeros.py @@ -1,16 +1,12 @@ class Solution(object): - def moveZeroes(self, nums): - """ - :type nums: List[int] - :rtype: None Do not return anything, modify nums in-place instead. - """ - if not nums: - return 0 - j = 0 - for i in xrange(len(nums)): - if nums[i]: - nums[j] = nums[i] - j += 1 - for i in xrange(j,len(nums)): - nums[i] = 0 + def moveZeroes (self, nums): + if not nums: + return 0 + j = 0 + for i in xrange(len(nums)): + if nums[i] : + nums[j] = nums[i] + j += 1 + for i in xrange(j,len(nums)): + nums[i] = 0 From e071b7e98b682d579f70e1e3eddbb644600ceebf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=B6=A6=E7=82=9C?= Date: Sun, 16 Feb 2020 15:32:12 +0800 Subject: [PATCH 0155/1268] feat: add LeetCode_189_387.js --- Week_01/G20200343030387/LeetCode_189_387.js | 48 +++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Week_01/G20200343030387/LeetCode_189_387.js diff --git a/Week_01/G20200343030387/LeetCode_189_387.js b/Week_01/G20200343030387/LeetCode_189_387.js new file mode 100644 index 00000000..6b884d8a --- /dev/null +++ b/Week_01/G20200343030387/LeetCode_189_387.js @@ -0,0 +1,48 @@ +/** + * @param {number[]} nums + * @param {number} k + * @return {void} Do not return anything, modify nums in-place instead. + */ +var rotate = function(nums, k) { + // 暴力解法 + // 循环k次移动,每次遍历整个数组且每个元素旋转一位 + // let temp, previous + // for (let i = 0; i < k; i++) { + // previous = nums[nums.length - 1] // 当前要移到元素的上一个元素 + // for (let j = 0; j < nums.length; j++) { + // temp = nums[j] + // nums[j] = previous + // previous = temp + // } + // } + + // 额外数组 + // 空间复杂度为:O(n) + // let newArr = [] + // let numsLen = nums.length + // for (let i = 0; i < numsLen; i++) { + // newArr[(i+k)%numsLen] = nums[i] + // } + // for (let j = 0; j < newArr.length; j++) { + // nums[j] = newArr[j] + // } + + // 多次反转数组 + k %= nums.length + reverse(nums, 0, nums.length - 1) + reverse(nums, 0, k - 1) + reverse(nums, k, nums.length - 1) +} + +function reverse(arr, start, end) { + while (start < end) { + swap(arr, start, end) + start++ + end-- + } +} +function swap(arr, a, b) { + let temp = arr[a] + arr[a] = arr[b] + arr[b] = temp +} From 0c603c0c95f3ace9db275005e9dbf9408636bdef Mon Sep 17 00:00:00 2001 From: yequn <15726815997@163.com> Date: Sun, 16 Feb 2020 15:33:25 +0800 Subject: [PATCH 0156/1268] =?UTF-8?q?add=20LeetCode=20=E8=A7=A3=E9=A2=98?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030401/LeetCode_189_401.java | 69 +++++++++++++++++++ Week_01/G20200343030401/LeetCode_21_401.java | 52 ++++++++++++++ Week_01/G20200343030401/LeetCode_26_401.java | 35 ++++++++++ Week_01/G20200343030401/NOTE.md | 6 +- 4 files changed, 161 insertions(+), 1 deletion(-) create mode 100644 Week_01/G20200343030401/LeetCode_189_401.java create mode 100644 Week_01/G20200343030401/LeetCode_21_401.java create mode 100644 Week_01/G20200343030401/LeetCode_26_401.java diff --git a/Week_01/G20200343030401/LeetCode_189_401.java b/Week_01/G20200343030401/LeetCode_189_401.java new file mode 100644 index 00000000..0f4e08fc --- /dev/null +++ b/Week_01/G20200343030401/LeetCode_189_401.java @@ -0,0 +1,69 @@ +//题目链接: https://leetcode-cn.com/problems/rotate-array/ + +class Solution { + /** + * 方法1: 暴力求解 + * 时间复杂度O(n*k): 每个元素都被移动1步O(n),k次(O(k); + * 空间复杂度O(1): 使用常数个额外的空间 + */ + public void rotate1(int[] nums, int k) { + int temp, previous; + //旋转k次 + for (int i = 0; i < k; i++) { + previous = nums[nums.length - 1]; + //每次数组旋转一个元素 + for (int j = 0; j < nums.length; j++) { + temp = nums[j]; + nums[j] = previous; + previous = temp; + } + } + } + /** + * 方法2: 环状替换 + * 时间复杂度O(n): 只遍历每个元素一次 + * 空间复杂度O(1): 使用常数个额外空间 + */ + public void rotate2(int[] nums, int k) { + k %= nums.length; + int count = 0; + for (int start = 0; count < nums.length; start++) { + int current = start; + int prev = nums[start]; + do { + int next = (current + k) % nums.length; + int temp = nums[next]; + nums[next] = prev; + prev = temp; + current = next; + count++; + } while (start != current); + } + } + + /** + * 方法3: 反转 + * 时间复杂度O(n): n个元素反转了总共3次 + * 空间复杂度O(1): 使用常数个额外空间 + */ + public void rotate3(int[] nums, int k) { + k %= nums.length; + //1.反转整个数组数字 + reverse(nums, 0, nums.length - 1); + //2.反转前k个数字 + reverse(nums, 0, k - 1); + //3.反转后n-k个数字 + reverse(nums, k, nums.length - 1); + } + //反转函数 + public void reverse(int[] nums, int start, int end) { + while (start < end) { + int temp = nums[start]; + nums[start] = nums[end]; + nums[end] = temp; + start++; + end--; + } + } + +} \ No newline at end of file diff --git a/Week_01/G20200343030401/LeetCode_21_401.java b/Week_01/G20200343030401/LeetCode_21_401.java new file mode 100644 index 00000000..750a4a41 --- /dev/null +++ b/Week_01/G20200343030401/LeetCode_21_401.java @@ -0,0 +1,52 @@ +//题目链接: https://leetcode-cn.com/problems/merge-two-sorted-lists/ + +class Solution { + /** + * 方法1: 递归 + * 时间复杂度O(n+m): 每次递归去掉l1或者l2的头元素,函数遍历每个元素一次 + * 空间复杂度O(n+m): l1和l2每个元素遍历过一次,n+m个栈帧消耗O(n+m)空间 + */ + public ListNode mergeTwoLists1(ListNode l1, ListNode l2) { + if (l1 == null) { + return l2; + } + else if (l2 == null) { + return l1; + } + else if (l1.val < l2.val) { + l1.next = mergeTwoLists(l1.next, l2); + return l1; + } + else { + l2.next = mergeTwoLists(l1, l2.next); + return l2; + } + } + + /** + * 方法2: 迭代 + * 时间复杂度O(n+m): 每次迭代只能合并l1或者l2的其中一个元素,while循环次数等于两个链表总长度 + * 空间复杂度O(1): 迭代过程中产生几个指针,所需的空间是常数级别的 + */ + public ListNode mergeTwoLists2(ListNode l1, ListNode l2) { + ListNode prehead = new ListNode(-1); + ListNode prev = prehead; + while (l1 != null && l2 != null) { + if (l1.val <= l2.val) { + prev.next = l1; + l1 = l1.next; + } else { + prev.next = l2; + l2 = l2.next; + } + prev = prev.next; + } + + // exactly one of l1 and l2 can be non-null at this point, so connect + // the non-null list to the end of the merged list. + prev.next = l1 == null ? l2 : l1; + + return prehead.next; + } + +} \ No newline at end of file diff --git a/Week_01/G20200343030401/LeetCode_26_401.java b/Week_01/G20200343030401/LeetCode_26_401.java new file mode 100644 index 00000000..c20d73a6 --- /dev/null +++ b/Week_01/G20200343030401/LeetCode_26_401.java @@ -0,0 +1,35 @@ +//题目链接: https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/ + +class Solution { + //方法1: 双指针法 时间复杂度O(n) 空间复杂度O(1) + public int removeDuplicates1(int[] nums) { + if(nums == null || nums.length == 0){ + return 0; + } + int i = 0; + for(int j = 1; j < nums.length; j++ ){ + if(nums[i] != nums[j]) + i++; + nums[i] = nums[j]; + } + return i + 1; + } + + //方法2: 双指针法优化 时间复杂度O(n) 空间复杂度O(1) + public int removeDuplicates2(int[] nums) { + if(nums == null || nums.length == 0) return 0; + int p = 0; + int q = 1; + while(q < nums.length){ + if(nums[p] != nums[q]){ + //当 q - p > 1 时,才进行复制 + if(q - p > 1){ + nums[p + 1] = nums[q]; + } + p++; + } + q++; + } + return p + 1; + } +} diff --git a/Week_01/G20200343030401/NOTE.md b/Week_01/G20200343030401/NOTE.md index 50de3041..5fe745d1 100644 --- a/Week_01/G20200343030401/NOTE.md +++ b/Week_01/G20200343030401/NOTE.md @@ -1 +1,5 @@ -学习笔记 \ No newline at end of file +# 极客大学算法训练营学习笔记 +## 1.week_01 + + + From 658717162166d5b81ce322de6a57cbdd4bc3c952 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9F=A9=E8=B4=B5=E5=B0=81?= Date: Sun, 16 Feb 2020 15:44:36 +0800 Subject: [PATCH 0157/1268] 435-Week01 --- Week_01/G20200343030435/LeetCode_189_435.js | 17 +++++++++++++++++ Week_01/G20200343030435/LeetCode_1_435.js | 10 ++++++++++ Week_01/G20200343030435/LeetCode_21_435.js | 16 ++++++++++++++++ Week_01/G20200343030435/LeetCode_26_435.js | 10 ++++++++++ Week_01/G20200343030435/LeetCode_283_435.js | 11 +++++++++++ Week_01/G20200343030435/LeetCode_88_435.js | 7 +++++++ 6 files changed, 71 insertions(+) create mode 100644 Week_01/G20200343030435/LeetCode_189_435.js create mode 100644 Week_01/G20200343030435/LeetCode_1_435.js create mode 100644 Week_01/G20200343030435/LeetCode_21_435.js create mode 100644 Week_01/G20200343030435/LeetCode_26_435.js create mode 100644 Week_01/G20200343030435/LeetCode_283_435.js create mode 100644 Week_01/G20200343030435/LeetCode_88_435.js diff --git a/Week_01/G20200343030435/LeetCode_189_435.js b/Week_01/G20200343030435/LeetCode_189_435.js new file mode 100644 index 00000000..162cb429 --- /dev/null +++ b/Week_01/G20200343030435/LeetCode_189_435.js @@ -0,0 +1,17 @@ +let rotate = function(nums, k) { + const n = nums.length; + k %= n; + const reverse = (start, end) => { + while (start < end) { + const tmp = nums[start]; + nums[start] = nums[end]; + nums[end] = tmp; + start++; + end--; + } + }; + reverse(0, n - 1); + reverse(0, k - 1); + reverse(k, n - 1); + return nums; +}; diff --git a/Week_01/G20200343030435/LeetCode_1_435.js b/Week_01/G20200343030435/LeetCode_1_435.js new file mode 100644 index 00000000..0949413e --- /dev/null +++ b/Week_01/G20200343030435/LeetCode_1_435.js @@ -0,0 +1,10 @@ +let twoSum = function(nums, target) { + const items = []; + for (let i = 0; i < nums.length; i++) { + const diff = target - nums[i]; + if (items[diff] !== undefined) { + return [i, items[diff]]; + } + items[nums[i]] = i; + } +}; diff --git a/Week_01/G20200343030435/LeetCode_21_435.js b/Week_01/G20200343030435/LeetCode_21_435.js new file mode 100644 index 00000000..06df7243 --- /dev/null +++ b/Week_01/G20200343030435/LeetCode_21_435.js @@ -0,0 +1,16 @@ +const mergeTwoLists = function(l1, l2) { + const prevHead = new ListNode(-1); + let prevNode = prevHead; + while (l1 !== null && l2 !== null) { + if (l1.val < l2.val) { + prevNode.next = l1; + l1 = l1.next; + } else { + prevNode.next = l2; + l2 = l2.next; + } + prevNode = prevNode.next; + } + prevNode.next = l1 || l2; + return prevHead.next; +}; diff --git a/Week_01/G20200343030435/LeetCode_26_435.js b/Week_01/G20200343030435/LeetCode_26_435.js new file mode 100644 index 00000000..2374a3ea --- /dev/null +++ b/Week_01/G20200343030435/LeetCode_26_435.js @@ -0,0 +1,10 @@ +let removeDuplicates = function(nums) { + let j = 0; + for (let i = 0; i < nums.length; i++) { + if (nums[i] !== nums[i + 1]) { + nums[j] = nums[i]; + j++; + } + } + return j; +}; diff --git a/Week_01/G20200343030435/LeetCode_283_435.js b/Week_01/G20200343030435/LeetCode_283_435.js new file mode 100644 index 00000000..1967e14e --- /dev/null +++ b/Week_01/G20200343030435/LeetCode_283_435.js @@ -0,0 +1,11 @@ +const moveZeroes = function(nums) { + let idx = 0; + for (let i = 0; i < nums.length; i++) { + if (nums[i] !== 0) { + nums[idx] = nums[i]; + nums[i] = idx === i ? nums[i] : 0; + idx++; + } + } + return nums; +}; diff --git a/Week_01/G20200343030435/LeetCode_88_435.js b/Week_01/G20200343030435/LeetCode_88_435.js new file mode 100644 index 00000000..6fd252bf --- /dev/null +++ b/Week_01/G20200343030435/LeetCode_88_435.js @@ -0,0 +1,7 @@ +let count = m + n; +while (m > 0 && n > 0) { + nums1[--count] = nums1[m - 1] < nums2[n - 1] ? nums2[--n] : nums1[--m]; +} +if (n > 0) { + nums1.splice(0, n, ...nums2.splice(0, n)); +} From d3cbc278a62be185227b9c37e6e4cc5b9b6b94a8 Mon Sep 17 00:00:00 2001 From: hejh Date: Sun, 16 Feb 2020 15:48:07 +0800 Subject: [PATCH 0158/1268] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../G20200343030389/MergeTwoSortedLists.java | 102 ++++++++++++++++++ Week_01/G20200343030389/NOTE.md | 57 +++++++++- .../RemoveDuplicatesFromSortedArray.java | 26 +++++ Week_01/G20200343030389/RotateArray.java | 29 +++++ 4 files changed, 213 insertions(+), 1 deletion(-) create mode 100644 Week_01/G20200343030389/MergeTwoSortedLists.java create mode 100644 Week_01/G20200343030389/RemoveDuplicatesFromSortedArray.java create mode 100644 Week_01/G20200343030389/RotateArray.java diff --git a/Week_01/G20200343030389/MergeTwoSortedLists.java b/Week_01/G20200343030389/MergeTwoSortedLists.java new file mode 100644 index 00000000..a718b143 --- /dev/null +++ b/Week_01/G20200343030389/MergeTwoSortedLists.java @@ -0,0 +1,102 @@ +package follow.phenix.ice.algorithm.weekone; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; + +class ListNode { + int val; + ListNode next; + + ListNode(int x) { + val = x; + } + + @Override + public String toString() { + StringBuilder result = new StringBuilder(String.valueOf(val)); + ListNode nextNode = next; + while (nextNode != null) { + result.append(", ").append(nextNode.val); + nextNode = nextNode.next; + } + return result.toString(); + } +} + + +/** + * @author iceiceice + */ +public class MergeTwoSortedLists { + + public static void main(String[] args) { + ListNode nodeOne = getListNode(new ListNode(1), Arrays.asList(2, 3)); + ListNode nodeTwo = getListNode(new ListNode(1), Arrays.asList(3, 4)); + System.out.println(nodeOne); + System.out.println(nodeTwo); +// ListNode newNodeOne = methodOne(nodeOne, nodeTwo); + ListNode newNodeTwo = methodTwo(nodeOne, nodeTwo); + System.out.println(newNodeTwo); + + } + + private static ListNode methodTwo(ListNode l1, ListNode l2) { + if (l1 == null) { + return l2; + } + if (l2 == null) { + return l1; + } + if (l1.val < l2.val) { + l1.next = methodTwo(l1.next, l2); + return l1; + } else { + l2.next = methodTwo(l2.next, l1); + return l2; + } + } + + /********************************************************************/ + + private static ListNode methodOne(ListNode l1, ListNode l2) { + List l1ValueList = getAllValues(l1); + List l2ValueList = getAllValues(l2); + List allValueList = new ArrayList<>(); + allValueList.addAll(l1ValueList); + allValueList.addAll(l2ValueList); + allValueList.sort(Comparator.comparingInt(o -> o)); + if (allValueList.size() == 0) { + return null; + } + ListNode head = new ListNode(allValueList.get(0)); + allValueList.remove(0); + return getListNode(head, allValueList); + } + + private static ListNode getListNode(ListNode head, List list) { + if (list == null || list.size() == 0) { + return head; + } + ListNode next = head; + for (int i : list) { + next.next = new ListNode(i); + next = next.next; + } + return head; + } + + private static List getAllValues(ListNode node) { + if (node == null) { + return new ArrayList<>(); + } + List result = new ArrayList<>(); + ListNode next = node; + while (next != null) { + result.add(next.val); + next = next.next; + } + return result; + } +} diff --git a/Week_01/G20200343030389/NOTE.md b/Week_01/G20200343030389/NOTE.md index 50de3041..3e103c33 100644 --- a/Week_01/G20200343030389/NOTE.md +++ b/Week_01/G20200343030389/NOTE.md @@ -1 +1,56 @@ -学习笔记 \ No newline at end of file +## 学习笔记 +### 数组 +- 数组是内存中用一组连续的内存单元保存相同类型元素的数据集合 +- 数据可以根据下标随机访问数据,原因在于内存中的内存管理器管理着每一个数组元素的内存地址 +- 数组的时间复杂度 + 1. 根据下表访问元素:O(1) + 2. 根据值访问元素:O(n) + 3. 插入:O(n) + 4. 删除:O(n) + 5. 使用二分法在有序数组中根据值访问元素:O(logn) + +### 链表 +- 链表是一种线性的数据结构,除了保存自身节点外,还保存了一个或两个指针指向它旁边的节点 +- 根据指针的数量和指针的方法可以分为 + 1. 单向链表 + 2. 双向链表 + 3. 单向循环链表 + 4. 双向循环链表 +- 单向链表的时间复杂度 + 1. 根据值查找:O(n) + 3. 删除:O(1) + 2. 插入:O(1) + +### 跳表 +- 跳表可以优化链表的查询效率,比如单向有序链表的查询是O(n)的,通过跳表优化后查询的时间复杂度位O(logn) +- 跳表=链表+索引 +- 将链表优化位跳表的前提是链表必须是有序的,因为索引的操作是通过比较索引元素的值来确定索引走向的 +- 时间复杂度 + 1. 查找:O(logn) + 2. 插入:O(logn) + 3. 删除:O(logn)。因为跳表插入数据和删除数据时都要同步更新索引,所以其插入和删除的复杂度比俩表要大,都是O(logn) +- 空间复杂度:O(n) + +### Stack(栈) +- 先进后出,后进先出 +- 时间复杂度 + 1. 进栈:O(1) + 3. 出栈:O(1) + +### Queue(队列) +- 先进先出,后进后出 +- 时间复杂度 + 1. 进栈:O(1) + 3. 出栈:O(1) + +### Deque(双端队列) +- 两端都可以入队、出队。可以将deque理解为了一个加强版的stack +- 时间复杂度 + 1. 进栈:O(1) + 3. 出栈:O(1) + +### PriorityQueue(优先队列) +- 优先队列是队列的一种,不同点在于其取出操作不是按顺序取出的,而是按照优先级取出的,优先级越高的元素优先出队 +- 时间复杂度 +1. 入队:O(1) +2. 出队:O(logn) diff --git a/Week_01/G20200343030389/RemoveDuplicatesFromSortedArray.java b/Week_01/G20200343030389/RemoveDuplicatesFromSortedArray.java new file mode 100644 index 00000000..25db783e --- /dev/null +++ b/Week_01/G20200343030389/RemoveDuplicatesFromSortedArray.java @@ -0,0 +1,26 @@ +package follow.phenix.ice.algorithm.weekone; + +/** + * @author iceiceice + */ +public class RemoveDuplicatesFromSortedArray { + + public static void main(String[] args) { + int[] nums = new int[]{0, 0, 1, 1, 1, 2, 2, 3, 3, 4}; + System.out.println("methodOne result: " + methodOne(nums)); + } + + private static int methodOne(int[] nums) { + if (nums == null || nums.length == 0) { + return 0; + } + int index = 0; + for (int i = 1; i < nums.length; i++) { + if (nums[i] != nums[index]) { + nums[index + 1] = nums[i]; + index = index + 1; + } + } + return index + 1; + } +} diff --git a/Week_01/G20200343030389/RotateArray.java b/Week_01/G20200343030389/RotateArray.java new file mode 100644 index 00000000..833beeac --- /dev/null +++ b/Week_01/G20200343030389/RotateArray.java @@ -0,0 +1,29 @@ +package follow.phenix.ice.algorithm.weekone; + +import java.util.Arrays; + +/** + * @author iceiceice + */ +public class RotateArray { + public static void main(String[] args) { + int[] nums = new int[]{1, 2, 3, 4, 5, 6, 7}; + int k = 3; + rotate(nums, k); + } + + private static void rotate(int[] nums, int k) { + int rotateCount = 0; + while (rotateCount < k) { + int temp; + int prev = nums[nums.length - 1]; + for (int i = 0; i < nums.length; i++) { + temp = nums[i]; + nums[i] = prev; + prev = temp; + } + rotateCount++; + } + System.out.println(Arrays.toString(nums)); + } +} From 556b793755f178a215d8822101f7ac578b8ca1f7 Mon Sep 17 00:00:00 2001 From: allen Date: Sun, 16 Feb 2020 15:55:13 +0800 Subject: [PATCH 0159/1268] 393-Week 01 --- Week_01/G20200343030393/LeetCode_21_393.py | 22 +++ Week_01/G20200343030393/LeetCode_641_393.py | 194 ++++++++++++++++++++ Week_01/G20200343030393/LeetCode_88_393.py | 24 +++ 3 files changed, 240 insertions(+) create mode 100644 Week_01/G20200343030393/LeetCode_21_393.py create mode 100644 Week_01/G20200343030393/LeetCode_641_393.py create mode 100644 Week_01/G20200343030393/LeetCode_88_393.py diff --git a/Week_01/G20200343030393/LeetCode_21_393.py b/Week_01/G20200343030393/LeetCode_21_393.py new file mode 100644 index 00000000..966aa336 --- /dev/null +++ b/Week_01/G20200343030393/LeetCode_21_393.py @@ -0,0 +1,22 @@ +class Solution: + def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: + """ + 第一种解法在交换l1.l2的时候比较费时,执行时间为56ms + 第二种执行时间为44ms + :param l1: + :param l2: + :return: + """ + # if l1 and l2: + # if l1.val > l2.val: l1, l2 = l2, l1 + # l1.next = self.mergeTwoLists(l1.next, l2) + # return l1 or l2 + + if l1 and l2: + if l1.val < l2.val: + l1.next = self.mergeTwoLists(l1.next, l2) + return l1 + else: + l2.next = self.mergeTwoLists(l2.next, l1) + return l2 + return l1 or l2 \ No newline at end of file diff --git a/Week_01/G20200343030393/LeetCode_641_393.py b/Week_01/G20200343030393/LeetCode_641_393.py new file mode 100644 index 00000000..e51ca4f8 --- /dev/null +++ b/Week_01/G20200343030393/LeetCode_641_393.py @@ -0,0 +1,194 @@ +""" +很好奇,我写的MyCircularDeque_my运行官方最终测试的时候,跟官方给的答案运行的结果完全相同,不知道为啥就是运行不通过 +""" +class MyCircularDeque_my: + + def __init__(self, k: int): + """ + Initialize your data structure here. Set the size of the deque to be k. + """ + self.front = 0 + self.capacity = k + self.rear = self.capacity + self.arr = [0 for _ in range(self.capacity + 1)] + + def insertFront(self, value: int) -> bool: + """ + Adds an item at the front of Deque. Return true if the operation is successful. + """ + if self.isFull(): + return False + + self.arr[self.front] = value + self.front += 1 + return True + + def insertLast(self, value: int) -> bool: + """ + Adds an item at the rear of Deque. Return true if the operation is successful. + """ + if self.isFull(): + return False + self.arr[self.rear] = value + self.rear -= 1 + return True + + def deleteFront(self) -> bool: + """ + Deletes an item from the front of Deque. Return true if the operation is successful. + """ + if self.isEmpty(): + return False + if self.front == 0: + self.rear += 1 + else: + self.front -= 1 + return True + + def deleteLast(self) -> bool: + """ + Deletes an item from the rear of Deque. Return true if the operation is successful. + """ + if self.isEmpty(): + return False + if self.rear == self.capacity: + self.front -= 1 + else: + self.rear += 1 + return True + + def getFront(self) -> int: + """ + Get the front item from the deque. + """ + if self.isEmpty(): + return -1 + if self.front == 0: + return self.arr[self.rear + 1] + else: + return self.arr[self.front - 1] + + def getRear(self) -> int: + """ + Get the last item from the deque. + """ + if self.isEmpty(): + return -1 + if self.rear == self.capacity: + return self.arr[0] + else: + return self.arr[self.rear + 1] + + def isEmpty(self) -> bool: + """ + Checks whether the circular deque is empty or not. + """ + return self.rear == self.capacity and self.front == 0 + + def isFull(self) -> bool: + """ + Checks whether the circular deque is full or not. + """ + return self.rear == self.front + + def isArr(self) -> list: + return self.arr + +class MyCircularDeque: + + def __init__(self, k: int): + """ + Initialize your data structure here. Set the size of the deque to be k. + """ + self.front = 0 + self.rear = 0 + self.capacity = k + 1 + self.arr = [0 for _ in range(self.capacity)] + + def insertFront(self, value: int) -> bool: + """ + Adds an item at the front of Deque. Return true if the operation is successful. + """ + if self.isFull(): + return False + self.front = (self.front - 1 + self.capacity) % self.capacity + self.arr[self.front] = value + return True + + def insertLast(self, value: int) -> bool: + """ + Adds an item at the rear of Deque. Return true if the operation is successful. + """ + if self.isFull(): + return False + self.arr[self.rear] = value + self.rear = (self.rear + 1) % self.capacity + return True + + def deleteFront(self) -> bool: + """ + Deletes an item from the front of Deque. Return true if the operation is successful. + """ + if self.isEmpty(): + return False + self.front = (self.front + 1) % self.capacity + return True + + def deleteLast(self) -> bool: + """ + Deletes an item from the rear of Deque. Return true if the operation is successful. + """ + if self.isEmpty(): + return False + self.rear = (self.rear - 1 + self.capacity) % self.capacity; + return True + + def getFront(self) -> int: + """ + Get the front item from the deque. + """ + if self.isEmpty(): + return -1 + return self.arr[self.front] + + def getRear(self) -> int: + """ + Get the last item from the deque. + """ + if self.isEmpty(): + return -1 + return self.arr[(self.rear - 1 + self.capacity) % self.capacity] + + def isEmpty(self) -> bool: + """ + Checks whether the circular deque is empty or not. + """ + return self.front == self.rear + + def isFull(self) -> bool: + """ + Checks whether the circular deque is full or not. + """ + return (self.rear + 1) % self.capacity == self.front + + def isArr(self) -> list: + return self.arr + +circularDeque = MyCircularDeque(77) +result1 = [circularDeque.insertFront(89), circularDeque.getRear(), circularDeque.deleteLast(), circularDeque.getRear(), + circularDeque.insertFront(19), circularDeque.insertFront(23), circularDeque.insertFront(23), + circularDeque.insertFront(82), circularDeque.isFull(), circularDeque.insertFront(45), circularDeque.isFull(), + circularDeque.getRear(), circularDeque.deleteFront(), circularDeque.getFront(), circularDeque.getFront(), + circularDeque.insertLast(74), circularDeque.deleteFront(), circularDeque.getFront(), circularDeque.insertLast(98)] + +circularDeque_my = MyCircularDeque_my(77) +result2 = [circularDeque_my.insertFront(89), circularDeque_my.getRear(), circularDeque_my.deleteLast(), circularDeque_my.getRear(), + circularDeque_my.insertFront(19), circularDeque_my.insertFront(23), circularDeque_my.insertFront(23), + circularDeque_my.insertFront(82), circularDeque_my.isFull(), circularDeque_my.insertFront(45), circularDeque_my.isFull(), + circularDeque_my.getRear(), circularDeque_my.deleteFront(), circularDeque_my.getFront(), circularDeque_my.getFront(), + circularDeque_my.insertLast(74), circularDeque_my.deleteFront(), circularDeque_my.getFront(), circularDeque_my.insertLast(98)] + +if result1 == result2: + print(True) +else: + print(False) \ No newline at end of file diff --git a/Week_01/G20200343030393/LeetCode_88_393.py b/Week_01/G20200343030393/LeetCode_88_393.py new file mode 100644 index 00000000..b734684c --- /dev/null +++ b/Week_01/G20200343030393/LeetCode_88_393.py @@ -0,0 +1,24 @@ +def merge(nums1, m, nums2, n): + """ + :type nums1: List[int] + :type m: int + :type nums2: List[int] + :type n: int + :rtype: None Do not return anything, modify nums1 in-place instead. + """ + i = 0 + x = 0 + nums1_copy = nums1[:m] + nums1[:] = [] + while i < m and x < n: + if nums1_copy[i] < nums2[x]: + nums1.append(nums1_copy[i]) + i += 1 + else: + nums1.append(nums2[x]) + x += 1 + + if i < m: + nums1 += nums1_copy[i:m] + if x < n: + nums1 += nums2[x:n] \ No newline at end of file From bd4c981d370e28f3175de3ff91519f9911a54b3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=B6=A6=E7=82=9C?= Date: Sun, 16 Feb 2020 16:20:20 +0800 Subject: [PATCH 0160/1268] feat: add more function to LeetCode_189_387.js --- Week_01/G20200343030387/LeetCode_189_387.js | 41 +++++++++++---------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/Week_01/G20200343030387/LeetCode_189_387.js b/Week_01/G20200343030387/LeetCode_189_387.js index 6b884d8a..485eb0b3 100644 --- a/Week_01/G20200343030387/LeetCode_189_387.js +++ b/Week_01/G20200343030387/LeetCode_189_387.js @@ -4,7 +4,7 @@ * @return {void} Do not return anything, modify nums in-place instead. */ var rotate = function(nums, k) { - // 暴力解法 + // 方法1:暴力解法 // 循环k次移动,每次遍历整个数组且每个元素旋转一位 // let temp, previous // for (let i = 0; i < k; i++) { @@ -16,7 +16,7 @@ var rotate = function(nums, k) { // } // } - // 额外数组 + // 方法2:额外数组 // 空间复杂度为:O(n) // let newArr = [] // let numsLen = nums.length @@ -27,22 +27,25 @@ var rotate = function(nums, k) { // nums[j] = newArr[j] // } - // 多次反转数组 - k %= nums.length - reverse(nums, 0, nums.length - 1) - reverse(nums, 0, k - 1) - reverse(nums, k, nums.length - 1) -} + // 方法3:多次反转数组 + // k %= nums.length // 取余数是因为数组旋转了本身长度后还是原样,所以只要余数部分就行 + // reverse(nums, 0, nums.length - 1) + // reverse(nums, 0, k -1) + // reverse(nums, k, nums.length - 1) -function reverse(arr, start, end) { - while (start < end) { - swap(arr, start, end) - start++ - end-- - } -} -function swap(arr, a, b) { - let temp = arr[a] - arr[a] = arr[b] - arr[b] = temp + // 方法4:切割数组末k位的元素,添加到数组头部 + nums.unshift(...nums.splice(nums.length - k)) } + +// function reverse(arr, start, end) { +// while (start < end) { +// swap(arr, start, end) +// start++ +// end-- +// } +// } +// function swap(arr, a, b) { +// let temp = arr[a] +// arr[a] = arr[b] +// arr[b] = temp +// } From ae7643ae03c6e7994f98f7189a5c1e98ea190561 Mon Sep 17 00:00:00 2001 From: jervis-lai <55199514+jervis-lai@users.noreply.github.com> Date: Sun, 16 Feb 2020 16:24:21 +0800 Subject: [PATCH 0161/1268] week01 homework G20200343030507 week01 homework --- .DS_Store | Bin 0 -> 10244 bytes Week_01/.DS_Store | Bin 0 -> 8196 bytes Week_01/G20200343030507/.Rhistory | 0 Week_01/G20200343030507/NOTE.md | 18 ++++- Week_01/G20200343030507/Week_01_homework.py | 81 ++++++++++++++++++++ Week_05/.DS_Store | Bin 0 -> 8196 bytes 6 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 .DS_Store create mode 100644 Week_01/.DS_Store create mode 100644 Week_01/G20200343030507/.Rhistory create mode 100644 Week_01/G20200343030507/Week_01_homework.py create mode 100644 Week_05/.DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f5d0333c9831638548d465d6265595afa664bd6d GIT binary patch literal 10244 zcmeHMTWl0n7(U;&lvz8_Dc9|?(1ij8EYPKeQjxN~fC2?7ZE3m4cDFmigy~M%*=>PR zQ=^GDctkE5<0W3v$OA$YFAv59i19&ch(viXMjyp^NsJHrpL1qQ*nU6;dXwFC>}?{jUa!0ZUpXx2oPuUqU1~I)@}sc2)Gd#iU6Mil)+bT{O9s-!(;3J7doG7Rxe+zDHx5481p^O{ljLsi=|Alfv1E>(pdhn~{iH zy>(VP5w}G@&C(zq6w!QreU;T^!B9n2e_60ERKB#TEV#I8aeu#8nLI1Be04|H-hF-h z`yV|jM+RqhUdWZS8>mOS-JnNuM-ATNVWR3K*s+BIn@Aat7<$rM=z+H-5$)22 zm#@e-MbS!>_H@kHoiCo zSBokwHocwfqD)=j)ogFeF8YY7ztw%;yDwnCtl|qzx z+dHkUE_!cUs>8lIMLVl(=g)48+NllQdgAI^tx}ZD+)^8l>v5$deDs8XK}mRyghNRN z6=Lk(l5n}BP}o$qh&8ZA*1?jjj~!%3*l~7}onoiiXY30$$S$!T*w5?=`<4C1{)7iP z7==6(z=tACK>%~H2oz51pYGklDPL3`KJV? zs>Q8@Onpywu4HmZ8_hAO4D!~~XA~D}9DMRNe|E7-+2Iwod9%spaV!fKk|l={LE0)R z)naWFVP5(ztyWbnmy$wSm)DRrkKiw@b@gOrJUzX)3cu&s1@=8*_b)I)Y(B;lW~ZYR z^HGHrs6_)-Vih*vAvB`}t%TSPL=nR-fm#cDun+suk4Nz&p2o9;+=GPNBZS=N@d94M z8+Z$E<2X*@6h6R*ID?PyIljb2e2ee0(7P@Ry+4jbZ%=bFVOohDWZ{^<7TY0tw)}tR zrqGSK$$$58lR9yTo365w%)H^;#K}qK=(s|yfHKcN#7o3c${^QHo#t1sNqmus+%jXD z-#>g7a2#fr`c*L@h_vJl?=4eRF)xTzX-9{NLH>|yhQb9<_(dfTzTIz)ju>F z$@zh+SA_lkthq@{7TnfAZ#9gW6w2+x2ShI13U0dWaMLdiH|1jt#tLqlMR`6)a8nKC zI_IYKXrfH#+|)ri-YK}rMjAbWo1VfmBEt{iMZAnx1UH?*$M{5W(^t4~lib9CeFJU^ zxZITCrVI;Zvyi#}o}&P@`#oSP1dbrt8P*YPH?ljNq;H_c6{f0B z?$QY4$oCHN^Z%9q{{R17Iy(2Y-3Yi5_%9JaZbNfJ9kt9HGGsgPv-Tie9dz-++YLx5 zT&UtrxLzE`(+xjY6sInv%bc=sd)R3=ASG$2-1a{Mbh*B9_y6wx|4uxcz8(Aje*iN+ BG}r(D literal 0 HcmV?d00001 diff --git a/Week_01/.DS_Store b/Week_01/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..404c5c15babd141b816e2f972a2b8957677c1322 GIT binary patch literal 8196 zcmeI1U2GIp6vyv>DKImDz2$odivtD1N5x%A(@Lmpw^dRFLAKCBfil|}=;(B&?#y<9 zQf%UjQPlY0M?hcvjHyo=eKSgYF@8reqJ{?_e9#vkjYbpCojWbIrNO6a!raZhXYRe{ z%$;-QH*<4l8Dq$ott?~98Dk1nA^ALNu2aOks8dQR9;qS;vS%zqzk0TfYG#UdGLS?d zi9iy8BmzkUk_h}CB0zh#D9SYZzMM_kBmzkUZpsLV_k%%I$XqN(q>Nr2)I=!&Ns$6X zg^no?h-{2l=3+S_Wn@a{l-UDfQ^Y9-q&dwSLY-tTmLpP1a|UV75U-3lLqW7U*%^^K zLr%)1O(Kv)U}^-!<5SIcv8|M`i+U}87ddh3GqgXCgoukV)oy`YEJ^qOvO*)>DE#dU>p&=uOJLUD9B@JnH9q}aoGIk5NJ zq~{FUZKO@63&olC4up>H1qba?K(aO$e_T;V=PyaGS-&~cuzhFScxO316 zoT6(VGJ{^*vmEc_fr?{=eTONKUg(@~?2@Y1q|o7+{r2Uh%a(I}g}!pkO6p#-Rd}t^ zRW3RYm7VakTthcjs|tVTh(%Yp$G5~8t!PHqjdhCBEyi0*HnnnC(>HD+1G6I_f8)#C za=WVXpyNTh+tO64-=?VCI^dc`+l_~s?x3N2I|rrP@nG|viduuZu3o>tpZp2ru%2&K z6#mgMvG#5=2=@-y9xWevXXv{W<&ct)b6WJJ>#Uh*_+{ z&a-FOv+N}{%HC%0u@Bkj>&deeh7hDV)X-9>IA$fhX}aF5qRnf>-f6-o^X)0GIFyKE*fq z9zV$IOpQUjXClM6`mZ34AKuil>p`5pdzY5~Pa*zpz96?|;iAP$R@H8}ZENF>mhqcA z>3;qbt%xRxON7xFCeclu$R<&suh3Se4-jqkscURY*2l=_a|Kt5U`D?+y*kYWP_nx= zy*|xT#JucoOmEisEFxNsl(%S^G@niI%Gr9YLE}|Kx14R#wx{_V;#kf$Ydba0#PcVo z^Xc^(hoVlVa#|+eU~jQY>@)Tiv3QmJ#C~DFff0usOR!oUQ@DI5`iQFGaCU^wH4a( zwB~egWsz$eRF6{?Md*!48JSQMrQ;-{be!b)ABJ>nkgBlB#d1VS8lf`d9|Ds7KiU5y I@^0?tZ&RG^4gdfE literal 0 HcmV?d00001 diff --git a/Week_01/G20200343030507/.Rhistory b/Week_01/G20200343030507/.Rhistory new file mode 100644 index 00000000..e69de29b diff --git a/Week_01/G20200343030507/NOTE.md b/Week_01/G20200343030507/NOTE.md index 50de3041..3b4d0769 100644 --- a/Week_01/G20200343030507/NOTE.md +++ b/Week_01/G20200343030507/NOTE.md @@ -1 +1,17 @@ -学习笔记 \ No newline at end of file +学习笔记 + +【week01】 +解题思想 +1.最大的误区:做题只做一遍 +2.重要思想:升维;空间换时间 +3.懵逼的时候怎么办:想能否暴力解决;基本情况是什么样的(也就是想最简单的情况是怎样的);如何泛化? +4.找最近重复子问题,也就是找重复性 + +动态规划 +将一个问题拆成几个子问题,分别求解这些子问题,即可推断出大问题的解。 + +双指针套路 +关于双指针套路的问题,一开始必须要做的事情就是排序,如果没排序的话是无法实现后面的夹逼的 + +数组和链表的区别 +链表适合插入、删除,时间复杂度 O(1);数组支持随机访问,根据下标随机访问的时间复杂度为 O(1)(对于排好序的数组,用二分查找,时间复杂度也是 O(logn))。 \ No newline at end of file diff --git a/Week_01/G20200343030507/Week_01_homework.py b/Week_01/G20200343030507/Week_01_homework.py new file mode 100644 index 00000000..434d2b91 --- /dev/null +++ b/Week_01/G20200343030507/Week_01_homework.py @@ -0,0 +1,81 @@ +#https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/ +class Solution: + def removeDuplicates(self, nums: List[int]) -> int: + if not nums: + return 0 + k = 1 + for i in range(1, len(nums)): + if nums[i] != nums[i - 1]: + nums[k] = nums[i] + k += 1 + return k + +#https://leetcode-cn.com/problems/rotate-array/ +class Solution: + def rotate(self, nums: List[int], k: int) -> None: + """ + Do not return anything, modify nums in-place instead. + """ + n = len(nums) + k %= n + nums[:] = nums[::-1] + nums[:k] = nums[:k][::-1] + nums[k:] = nums[k:][::-1] + +#https://leetcode-cn.com/problems/merge-two-sorted-lists/ +class Solution: + def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: + if not l1 or not l2: + return l1 or l2 + if l1.val < l2.val: + l1.next = self.mergeTwoLists(l1.next, l2) + return l1 + else: + l2.next = self.mergeTwoLists(l1, l2.next) + return l2 + +#https://leetcode-cn.com/problems/merge-sorted-array/ +class Solution: + def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None: + """ + Do not return anything, modify nums1 in-place instead. + """ + p1 = m - 1 + p2 = n - 1 + p = m + n - 1 + while p1 > 0 and p2 > 0: + if nums1[p1] < nums2[p2]: + nums1[p] = nums2[p2] + p2 -= 1 + else: + nums1[p] = nums1[p1] + p1 -= 1 + p -= 1 + + nums1[:p2 + 1] = nums2[:p2 + 1] + +#https://leetcode-cn.com/problems/two-sum/ +class Solution: + def twoSum(self, nums: List[int], target: int) -> List[int]: + d = dict() + for index, num in enumerate(nums): + if d.get(num) == None: + d[target - num] = index + else: + return [d.get(num), index] + +#https://leetcode-cn.com/problems/move-zeroes/ +class Solution: + def moveZeroes(self, nums: List[int]) -> None: + count = nums.count(0) + nums[:] = [i for i in nums if i != 0] + nums += [0]*count + return nums + +#https://leetcode-cn.com/problems/plus-one/ +class Solution: + def plusOne(self, digits: List[int]) -> List[int]: + num = 0 + for i in range(len(digits)): + num += digits[i] * pow(10, (len(digits) - i - 1)) + return [int(i) for i in str(num + 1)] diff --git a/Week_05/.DS_Store b/Week_05/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f54f836c23fe3cf5c769fdcdafe5205cdc013ab7 GIT binary patch literal 8196 zcmeI1O>7la6vyxXwUn6w>@A;tgogu#hL4J`v`q`4_Vu+&s$h{={ebUju8Tn!ZLmo`@q5 zM<9+s9Dz6jaRmMk5ukUrD9SAFeYqO9aRlNB+>{Xz&j+2VkeNtMNEtpls0mX5k|G5N z3-u`v2yOI8W+FKuWoSyrl-UC!Q$#5Sq&cnYLY-tLk`q!&a|UV75bca8LqWJZ+3BG= zLq^KDjUy08;Mxd?+ozK4WLqg?7xilXE^_!Ls?GV5KazL6JZXNMA8~9yNTDi-JCux)EVsWJIk-+v`f4^1mN!DbdZ!7ABh09WFYd5ExwzqX&T69Y#*R&-|dq-{G z&O6ot!ymL<({_*VE7@i+bdcic2KF)ADyV8z0zIxVY+YKuqM9dHCRa^bN!_cq3a?T6 zih29Nq8*%+dnENWs>0tnWYQV#_Dpd^Gh9g~_4SIvG*>+54uMzm$nbR(~~O48cVSCvXyDco^sK7#_!yIFFa{3SPzQco*;E16;%>_!QsZ zd;B2JGcgJA?&%EU%D;j*x_1*tt_N}IuAN%;KZW?ag@W9w#Y>hhTV1o^wyn)O+NUn= zjO+PNv_hIBE+Iyfn1mN~I-5j6a;3H^wU21CPF!VMvOY;ZpD(yl1T)E7Q)^OO040a( zQne|bAm-(8V`{U;%ZO+-RNkVcQ+yu5D_0w|CXJU9-Ey@>+n(YT#Iam$)!H=9#Qi6i zv#DB*Ls4f^IV+QIu(#Mn_8I$%SiHi1V!yE8z=%VRUUh z79H4yd(n;ih{}E(#t|Haf&1ZL7#>DKCQsuG9>ODd6laOdC-5w>`8;00i+BweX0X^b zgT*&*%;IRS;5wdroHQqio_>&cG`A5bliO8`{Qu6`zyHteNyWRx5r`u&rx8GTXRb3# zTh8`a7P+=g^(a+Qgx-Xdp$Ro%I!-c7$4O58!;tzqsS2A+BqyY#87g!BAz;Su;`sd^ LzyCuJZ?fiZCSC1@ literal 0 HcmV?d00001 From cd57b680c0306e67db2602a33890b58cb19bf209 Mon Sep 17 00:00:00 2001 From: pengji Date: Sun, 16 Feb 2020 16:24:29 +0800 Subject: [PATCH 0162/1268] Week01 homework --- Week_01/G20200343030497/LeetCode_189_497.cpp | 58 ++++++++++++++++++++ Week_01/G20200343030497/LeetCode_1_497.cpp | 48 ++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 Week_01/G20200343030497/LeetCode_189_497.cpp create mode 100644 Week_01/G20200343030497/LeetCode_1_497.cpp diff --git a/Week_01/G20200343030497/LeetCode_189_497.cpp b/Week_01/G20200343030497/LeetCode_189_497.cpp new file mode 100644 index 00000000..027b912d --- /dev/null +++ b/Week_01/G20200343030497/LeetCode_189_497.cpp @@ -0,0 +1,58 @@ +/* + * 189. 旋转数组 + * https://leetcode-cn.com/problems/rotate-array/ + */ + +class Solution { +public: + // 使用环状替换,直接将元素放到最终的位置上 + // 时间复杂度:O(n) + // 空间复杂度:O(1) + void rotate(vector& nums, int k) { + k = k % nums.size(); + int cntRotated = 0; + int length = nums.size(); + + for (int start = 0; cntRotated < length; start++) { + int current = start; + int numToBeRotated = nums[start]; //当前元素 + + do { + int next = (current + k) % length; //元素要放的位置 + int temp = nums[next]; + nums[next] = numToBeRotated; + numToBeRotated = temp; + current = next; + cntRotated++; //统计替换元素额个数 + } while (start != current); // 避免循环复制 + } + } + + // 采用反转法(三次反转) + // 时间复杂度:O(n) + // 空间复杂度:O(1) + void rotate2(vector& nums, int k) { + int length=nums.size(); + k = k % length; // k可能大于n,这里保证k小于n + + reverse(&nums[0],&nums[length]); // 反转所有元素 + reverse(&nums[0],&nums[k]); // 反转前k个元素 + reverse(&nums[k],&nums[length]); // 反转后n-k个元素 + } + + // 暴力法(超出运行时间),每次移动一步 + // 时间复杂度:O(n*k) + // 空间复杂度:O(1) + void rotate1(vector& nums, int k) { + int last, temp; + int length = nums.size(); + for(int i=0; i twoSum(vector& nums, int target) { + vector result; + unordered_map vmap; // 存储<值,建> + int length = nums.size(); + int another; // 存储在字典中,another = target - current + vmap[nums[0]] = 0; + + for(int i=1; i twoSum1(vector& nums, int target) { + vector v; + int length = nums.size(); + for(int i=0; i Date: Sun, 16 Feb 2020 16:32:55 +0800 Subject: [PATCH 0163/1268] =?UTF-8?q?refactor:=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=8E=92=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030387/LeetCode_189_387.js | 85 +++++++++++---------- 1 file changed, 45 insertions(+), 40 deletions(-) diff --git a/Week_01/G20200343030387/LeetCode_189_387.js b/Week_01/G20200343030387/LeetCode_189_387.js index 485eb0b3..771891a3 100644 --- a/Week_01/G20200343030387/LeetCode_189_387.js +++ b/Week_01/G20200343030387/LeetCode_189_387.js @@ -3,49 +3,54 @@ * @param {number} k * @return {void} Do not return anything, modify nums in-place instead. */ -var rotate = function(nums, k) { - // 方法1:暴力解法 +// 方法1:暴力解法 +var rotate1 = function(nums, k) { // 循环k次移动,每次遍历整个数组且每个元素旋转一位 - // let temp, previous - // for (let i = 0; i < k; i++) { - // previous = nums[nums.length - 1] // 当前要移到元素的上一个元素 - // for (let j = 0; j < nums.length; j++) { - // temp = nums[j] - // nums[j] = previous - // previous = temp - // } - // } + let temp, previous + for (let i = 0; i < k; i++) { + previous = nums[nums.length - 1] // 当前要移到元素的上一个元素 + for (let j = 0; j < nums.length; j++) { + temp = nums[j] + nums[j] = previous + previous = temp + } + } +} - // 方法2:额外数组 - // 空间复杂度为:O(n) - // let newArr = [] - // let numsLen = nums.length - // for (let i = 0; i < numsLen; i++) { - // newArr[(i+k)%numsLen] = nums[i] - // } - // for (let j = 0; j < newArr.length; j++) { - // nums[j] = newArr[j] - // } +// 方法2:多数组法 +// 空间复杂度:O(n) +var rotate2 = function(nums, k) { + let newArr = [] + for (let i = 0; i < nums.length; i++) { + newArr[(i + k) % nums.length] = nums[i] + } + for (let j = 0; j < newArr.length; j++) { + nums[j] = newArr[j] + } +} - // 方法3:多次反转数组 - // k %= nums.length // 取余数是因为数组旋转了本身长度后还是原样,所以只要余数部分就行 - // reverse(nums, 0, nums.length - 1) - // reverse(nums, 0, k -1) - // reverse(nums, k, nums.length - 1) +// 方法3:多次反转数组 +var rotate3 = function(nums, k) { + var reverse = function(arr, start, end) { + while (start < end) { + swap(arr, start, end) + start++ + end-- + } + } + var swap = function(arr, a, b) { + let temp = arr[a] + arr[a] = arr[b] + arr[b] = temp + } + k %= nums.length // 取余数是因为数组旋转了本身长度后还是原样,所以只要余数部分就行 + reverse(nums, 0, nums.length - 1) + reverse(nums, 0, k - 1) + reverse(nums, k, nums.length - 1) +} - // 方法4:切割数组末k位的元素,添加到数组头部 +// 方法4:切片替换 +// 切割数组末k位的元素,添加到数组头部 +var rotate = function(nums, k) { nums.unshift(...nums.splice(nums.length - k)) } - -// function reverse(arr, start, end) { -// while (start < end) { -// swap(arr, start, end) -// start++ -// end-- -// } -// } -// function swap(arr, a, b) { -// let temp = arr[a] -// arr[a] = arr[b] -// arr[b] = temp -// } From dbe807f3eefee751bd6e36a954f1f7df1365011f Mon Sep 17 00:00:00 2001 From: jervis-lai <55199514+jervis-lai@users.noreply.github.com> Date: Sun, 16 Feb 2020 16:36:35 +0800 Subject: [PATCH 0164/1268] ignore test ignore test --- .DS_Store | Bin 10244 -> 10244 bytes .gitignore | 2 ++ 2 files changed, 2 insertions(+) create mode 100644 .gitignore diff --git a/.DS_Store b/.DS_Store index f5d0333c9831638548d465d6265595afa664bd6d..d8214164f8004c2f882f47747547fca3f20939e6 100644 GIT binary patch delta 1071 zcmcJONlX+$6o%^`wr)$IW)KFN0Z{~8P-jFG7ZyQ`3&?<=xPdctD;hyc{`n~$Uzxv#L z?rZnb(;j;RK2H~)A z*Yq_?m(Jg!cqQ5Hn3z9p)|~m})u9w-wWZQDx?YtP%}}?fO4mA%-mYk}s%>rFp~^Mn(^a;&1DP@+vbAD4Mz8>bgh+O$p8WTuPJQm2bb%|4G;@iAG9HY%A* zrM1E6nb^u$aKS<<&1z})cXsl_=vEZP;uV#W)EaJG>(Pz+fTHoS9>)5c+cQ%w=O3CM zZI0f&N+*dt3`8K=#7U~i3erjfq=)pAqvSNXP6o*kxl5jqm*hPeA)m+>GD^OZZve(% zEXE-jc1%VA3NZyPl%X6IScW>(!;J>4M;kowq8&bT!9X{H=*3>_#{u+D!4aIo8JxvA zT)|D;!fg!W0iNMGULb_G7{OeV2I*>8RAWH#0BHi z((SqV(`FWzmQ|VVtY!o)#^N6k1XIJBab;AexiVo1nRgo;-O`!HYL1KPN8(^WHq(_ue-P(S_*q4^AsU zzgR0T)wSR!C~+3z|7gyF{^ucK8@MsmP{!G^bQm3VkI?HD;TSvB@eklvnwwGz2^R zY@WmnZBC_fq_*0H z^muzEUKDMrb9+di$Sa}i>uf(6ka%fyU7Z~yVUc%3?G+DmyAF~Fp+a?ulGqjId7re8 zCj#g}e=W}tA~=K*o@o>(5XTfwLFT#A$nab_T)-?Y;u0?7Y9rfC+{O~_;4bdr0UqKJ d9^)xq;x*n_6V3yreH|ZdCHvO0{l5 Date: Sun, 16 Feb 2020 16:40:36 +0800 Subject: [PATCH 0165/1268] modified test modified test --- Week_01/G20200343030507/Week_01_homework.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Week_01/G20200343030507/Week_01_homework.py b/Week_01/G20200343030507/Week_01_homework.py index 434d2b91..5b4a7cfe 100644 --- a/Week_01/G20200343030507/Week_01_homework.py +++ b/Week_01/G20200343030507/Week_01_homework.py @@ -38,7 +38,7 @@ def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: class Solution: def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None: """ - Do not return anything, modify nums1 in-place instead. + Do not return anything, modify nums1 in-place instead. """ p1 = m - 1 p2 = n - 1 From 3490bae99e8d31e5e9989f60464737060d47e0a4 Mon Sep 17 00:00:00 2001 From: MurphyArc Date: Sun, 16 Feb 2020 16:49:56 +0800 Subject: [PATCH 0166/1268] 527-Week 00 Mind Map --- ...60\346\215\256\347\273\223\346\236\204.png" | Bin 0 -> 207809 bytes .../\347\256\227\346\263\225.png" | Bin 0 -> 223426 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 "Week_00/G20200343030527/\346\225\260\346\215\256\347\273\223\346\236\204.png" create mode 100644 "Week_00/G20200343030527/\347\256\227\346\263\225.png" diff --git "a/Week_00/G20200343030527/\346\225\260\346\215\256\347\273\223\346\236\204.png" "b/Week_00/G20200343030527/\346\225\260\346\215\256\347\273\223\346\236\204.png" new file mode 100644 index 0000000000000000000000000000000000000000..f21e4ac45fdb14905f5fce8e176b860dfc14ced5 GIT binary patch literal 207809 zcmeFZWmuGJ_dcvBs30OBAdR%7fOHHhg0vtoG)hWKHzO7uf`CIRAbDe7~{qHNu;Nw!@o;r03U-q7q>Zwz>#-~o5 zeRduP_{|4eLfuoR=uXK>-BNSaUmkOL3$EW6oHWyldHV3yt<*t&0V~!)erNpj%X!zX zzDa)=diFK_UCGy%J?`GECt@m2@49NqF_5pnxr zXImW90|$Me+c~p*Twcld^_t|U@cp1(}@4<0m4e5icd)Qfvw|MU0Ih2fqz7CHY9 zzX5X!9}euZyai`_*p$l8Q_>Zpe$2Ie>TyAP3y6^H&Zw|cespJQ~e;}hDa%@tS zq~nv99J}y8oC^!u@jqNzl1~1#PaDT+Czk)=T!1pp{Hu(AB7uLE@xzvX{qV16{1bD+ zyyo99^-punzhUa1=H-9G)UTt{kA(VfnEE$N{R$}ki>Cf58vYmB{s=0+dHA=^_?5@~ zDaHL;^!>9EobKPE@1H`*%m0R{-$bV$Ciicc`ZrAdP6Gcwt22C@bRW*^IR|t^I|fkj z_XmpFQd6KkR)TMXN7EoMp}jB9ry`^EgZ05X*Hu!bgDLE4t?w9iCDq$ajO{k+*jDHn z(&GQ{pTB=VWImOgD=RDLzl%wBBpQ>UX@vpK5DQAQ_uPKT;(<=`VwHzXwNGWTX-*8! zyR{-@+k;MNgaAu@qNr2QfWDhJ4gnRB!+b~ZIofiN^Pt_K>(-W49KMCqm;!_B)+6AS2+9j?EZRJ{4%`B!M{C$ zlm5gOvRJ?DCv8pz?W8q+#>Sg|bxp9oBySq;EH7k#KYF37T&H&|#YXH929fDx&ut;F z?$@r?&>ew15!>%flRG-FzGEBW6}v{vFyYS9vGOHD@{mwjoJhyE+{xdF5x>Dxlv%sz z@q^4_gkf?)hYcBZCy0fVTl>xGKr%rnt6=N0ms6+EK}qsdU}u$I!q`FGp4~L0r_`xx z??`Afo6oSnO{)vG`_y&69_-z-zbEv&te~kON!R1{O$dm0H50ZpROhJeA9^0PFO)2< z!RsO`%RZ3s!YU8SgmUZi%uhMYjI1@7km)99G+GUOZ4-h&XnZSTVxjwFwVnxQEkt-V zePOs#-k6^F%z-XtCusNf&7ox3qZ^C9jzNrJT9C~H9;*cukKI(t?Uyc=`Id2mWhM$& z1>b+h;f=7I@EwQ9Ebo<5Pi=$IWMm00vZu4=4g~{?SCm8Jo%i*6bM-{+?d|C!n(N|* z91M^4E+D%h`XOnFp3MB*2$rGF)6Wm;O=AZ_g&pQ*z+g_qT6UXjFoj?MBDb2kc+4iY zunbWj&!q!h9VYsX+I{-i=)y|1-SCx8z?e6sPY!&D4PW7SexJ-}*=2fz-I&>@&Gc}E z68QX}gfaKVw_Ovd#8g6iOF~O;8K%p5jHU~eLEMhrvLz0KUk}F9|(H?{!ui z1Xb(zbB3?smoAnKmaI1L998*FtutH-bdT+07pQX?$A*NYh#23!WPH3Bx6_3@DlqzV zgw6ADq6j(4*Ev6u2>DvtRg5B6sdO(gBckzi=VWYVTlOPzwNvFNK4)uGYFF$Z=F8*a8`-oDshegr@_|LF(-mBi*PK=iU&=+{?1YrX_68H8UBwP|$x9mMC!hbW z>VJ3Rw2#94vlFb4eFw`;oh3^xLp4*K=~`GSUvB0|HIZ7K&$Bz#>9}@#%E|3MiujaFhu&3kGdOUsr zczdf*j?;*0yi@Ss2ib2otXU$x+@w49x#3$o#PU8}sfed9H9SJeayeAVxG@MM);l2i-ztLkp5N>*pJtM{Fru4Q#!>TstQXs~StT=*u)G`8*@C z!pOSkOB^DfB@p82V9c0oRqTcuH0m6iKD;o|$P|wb*MFXHmKR~G55gx_iWADX?=u#& zOulE|#Bp=FGFa0#xgmJ!K)<*(`i|I*KV&|6@;E0m|+N66s)soMJ+by0PtuMuI$7H7lSoi?%o(2KU_sGFat?dxq!DZ^`KwMxFIQlFq?ti6ZvIqK{r- zHTO-)PQskyMF^n^GiojVO!84FKFy!b_||!>RnbN}mkKF~S1PLIstPkJ#$D0lDy5e= z+}d>P=Tx>J)GN~?Eih~EAed$XN1%~!`c*PiQ?b}%L6BRccCGQ|t~cDmCFlA_Z1ghw zxM|Ohp=(f6+4LSmH&%IuXJIuBDd#qBC-dQVQL2u_@`^30a(#-6%345eGOt7GH zBTP#zwk481?OGpWn|AMJPhp~Alartn(fCo1@JjOZzL|_o>SzgMaJ}TKtzga<&I{4{ zjzicgMRI*d0%Nc;dZmMDf8=y8E#3?2h>kPo4C3{562xe|Zm=Efl!=VN!xPjm7&A{K z-Z(xSG=hz7R&HX2wZ0Mv#5LwxD>UkPzBXD@4A*39d zmjUm;eRSMZi;HhO7vC-yX+K>YyXN=k&KkRagU9csX zZo>^bMoV8}G5R!D#;lS|H--dia1PJFWivhXMU5q`3Xu)S;Z|5Z05Y;ks74@WixHv-rS71^jp(nZ5yTJD6tEQb{J+lv_(LQPqz>X! z=uJ1?Fo%^s`TF^0)BZ*vtZoH93e~1|-@9g~;p?2&Y9pGqwvoLtH}(f~OABcprlB~# zC+0d)yI941I5M{tk*tvuW4rTBt=7JyC2||fgekcc!t=&rBK>g`+E402e z-j6wSOXwsHXExJS3Z&ICbcHFbhe{-iK2==)iow-%R#13M%7N)&L1$268k$JFTrUz5 z@3bLt!MJ}UTVFepH-lbl&;f%T0Ne-$BCPD5-OjS`{-+v~Ll?vlzjnN*VOt^yl)C~F zN;sN_fup%8n-s7Z$=?3bC<89laENhz&LZjE{jc$tSe46%$zn%e1vlg%g$ zGlEkl+^1K}H%)4zS~Ze%owK_OuP+MC=;0-};JXtEDT=upjPVH!yC(1L7H~_!Tg&GO zB3x44h;%Ew*MpIvzBKX^vw8@LjU1P$(M$2TD60{m;JCn2#!|R5Tx&p zoGmHats!}q%ud{-kbACrI;wnXRdh}7(WO)%!VSb5j4pQHhN*RyM~Mp?xqTfaWuc;t zb~%(+gXxPOBfli`Jg%9%JunWrUoCVn$k2lu+j@>SdYhf?hHkfnyYlZu+M+EJ86M3C(UrOlNUdg%qb1a@(7_U29BXGq%Uyi_+l_ z(f2Bs>9goFypKjqWw0DaP6(EYh?S~(!kNn(EMXNiWG-b^FYO9|Py=>L94R%jDjyTb z8+S*fzOR@~1QH_&d6TEhj7JwTdsAbfz>2OQT|hQ1rF+5LT3He10@JV5es9wXC=`@k;0X?vIqHFmN3dJ(+Qsi2H`FP7)hz}?+ zn&1<`tz0D)lB^CUSkP9D16}X;fJ{lrSldOx%|&x=K5Z3=oNue?06?kvE@mNr!WJlq z?qz;tKCZ{+4Lm%y-Ba#L`^}ikJ1oE`HEI;$#+byR>4F`8S%=6_Az@T5GReH)Ltd9O zWrGZDP=IWNH|xiBXmy*P42?Sn{-rr}S6x_xyE#cC=sBsBtLp+n3meb(X-gV* ztXilLN=7ZJsk?qHMBa!!*_y2apy5nvIJG+D^2iD zb5;{{553vd_+Yof%=)}Bmkxiy$09QDHHXkj=TM+-y<2&(jf-!Yo1MDzYoX9dzT*JI z(t5k=>d6b=#hqs)p^IRzhYx4k#o0^8YL*$Bi``iM^j64D_4uO8kkh=-Vkk>pia+Q| zy0=^Z&`Q$u{=C#|OJuTYYTR3KOXrKrE-ScTIfEy%Y3VvH(|ZS5w$lh$6<1-tp(={! z0;|&7buY$94m^+WfEb;dgJKOK9FVcZ zQ4Z#r22s7tFg7C_o7s|;IZ;EP64u!BPCTxhA^_r0E4WF4!ugNX#Mnn0acWL@{`fk+ zUe)mudg}8g*Yz9yoG#;6oBNhqaa1=cs2oOBkjEahr00{kK(8wvT12v`Yn*3_nwK=q zFRsgwZl~axq76+Oh$7qBqV44lk=SY4Dm$2kaoF~ICNA)Obg`;HO5aV0u-{PbzWJN7 z=^fSuz%k#o7ptAv-c>Bw$Y#;iN`7y6Psj-u)oD|?NtU2{S7PP^q8k@LkK{m{K{=0` zq}|Kps@iEm*x9AEYFw~ZhjDb`DcIyMG9za|i6P_S2c&!6L;{u0O-~=^AKI9Iad5)s z&C#XL4I%b!3z zNdxPW$c71JZU}p8bj~volZ`hEBUuoimiNuO(bdJ?`;w-u5!zDGHqm!ea-Y}R}N%h+EEKMob=rC;$d%!S(2t3D-Hm~xnq_{-j}H!xCl~I4vzR@lB3O^+-}a&nAb=fuVJAGQO~Hj z{j%-9YQgANzT&@&9+Pl@4miqjso6bAO*Iym?|qI;i+7Wwu#wMo($60LM|kj^kE49rj8(-C zbfLLCLyfbE`(Oh74m2dwLuM@>mJmicR^ln_~!3|Un za^=O@p?p(}`lFnk_a%wAKh@a-34v7|iR6?C1Gujnkq6#x*$@jbLO)R`Tzg__RkW?K zSP?-tv$Y6n1l;KIgy*)RW9bHW-ciw%+v&!X7!%%52T@1uTg3p9S28OU7j_)g7e)=~BlwBxuC8iVy!2=?$NKV6mqt<_HSJEI=xoZ4qtuo<=M#bQ z^7yK4#f~Y)jb{-k)ZC}MT?vm=2uvf#eP&KW?u@fMpFAE(N6s6{zD%%umJ65W4G@qJ zDa{JatNYg)03<~)et1J9ZYZybe->MpczPytw<2s=JM=ydUQ>CLXV>SK*tw3?>)jn) z#bb*+Mh!s=P9}+1k@~HZ1+RWnT%N|t;sC147Dtg2`r2oMCF}(gfyh?PpgSU`JK(wO z`o`e};%T2pwLKpVRGpAVc*j)jySAjWw>V>+$afQkQ-!MbzJ=A<-EGCu6m^L5kL@RTkP8RaAzb8A&(sBOY2b~ zI;#QYYZdUOQl_u%?{_B%MUQQKT~U4L`j_*1sy6+3Wi0k}03`); z)@qanEA`=6Ny);IywOn!vMb##xn%Xg@+59xnmSyojzdccACSL6%}*sW02W1FG4>kMFN>@)# zDVZ~MQ@$E~qt9NI3(6UZdz0(7I_d_s<0RZ)jzGkpG;?RiJ6D7Q`Z zcJ5Vyt*U@~s#7r-Qim~83dkxdofvX+ktNZ;N*u;zC-&RcounI(<2eY*A71*FXKJ*s zhv^D?4@1-Hn$rp~9J}JcjeXx{QO=f9Om^mqW4pBaNYW8T9G!U{!K9<|jgoWJbXc7*-9 z;EA0vDQ7_3%RqYIafU;i3i=X{!EBiOHB^j~exHA_u}RiDktcRoo9m0?L}l_s&A3W| zM*Gz-yTh(?8D@ccU3Q!y!R+pi{=z_GYd5!YYV7q|B=n@0im3q!Mn%P5joT?hgDvTP zd1wt7;Ok4<{30jPV2uaVwis7Pe_shG21unmLBjUZ%6@w@BYxZsQb%G1aUK1IxWuf= zK5Zkf#;H73D`iF<20oT-H;hQKgdOUi6(vuJ0%@4W`JO@M*_%D3Lp{ z3`Rh^#Qg9(Q4wNkrx54lT%N9)D))YxL%Wa_Uw3Y9PI|12vXPy;k^)w-r9E8yQPMP! zI3)B#drU*QZ8fE`I1*-`ZZ7vrB>Q6!{+-zQ^TtuWdN(62mE!0Z3Z;*|Rl=qVYnGwlq)$8&z)i2Xaza(e$LDsd^wW z377JKG~#Ml7h%_8&LUIWfRCqE%fS&g^he*v)w3?5D@~?4{KHrAUrM>!2av1n)76NR zdpyJjx{1EeBnqa*fR1d@-ipcH)!X%>-wnd%G=isWY0wLC(u(X;bHimg;YZ@&a|G>_#IZiTr7n_$rWTs}J5AM;HAkM-i zv^xdVU!FclY+i7Hj?u5YXcj|B>e_}j|CsE^#>awMsMF88=*XDDR~TZJFX#1;Xn#q4x&lnA1E494rs`ztL(1z(V`a)OSsU$S57lclRr~?l zkP~DE0RY`y`uQyoi}JmGnJDgaVd$EAfwyPB%c@3%>7#eB!E>m`>Xkf$2tNyTd3XhO zApNQ<$5iU;R7;pT^g?#7Mzrk3YmglB(~TGZ6ab7yh>HCdDAQ69_m zv`S*inogpp>T(4_DQ~&+lEh4n(9}ZhG?GwRI*|s|Vl{^I%f{flWz69^y6^pTHjT^o zvdmV?b?QEO$lM%~pcjN2r=q>C+M&)621dUb)d=Jz)T9PS(E?;lSCL0_x?b82u0tE1 z1~3ni10O5vwFFW$f8?v5ANYTBKtCqrP_XRY`mRVHT=x5BD8J<0P$A?lVPEEz&h?c& zKg-pSw>$DLXSE~n45&$X(cYVrLJMJMfc|Lxejisf%u#snl_dcFaj>JxfaYOx2ac2B z)NX{~c!k?y`EZe?461!8BdnB};HB*kWB7|asVNI2uE?`JaX<2-WHA+XOgAZph!$9J@;|$fxyz7a; zq|YVMsV}aJAnrz>ePs^%B?@Ns1@hqRlLrd^-;e$7*?Fr8p{b1>LMK5E_fPUs(xY1s z>)5f+KuDw>7jg1&Uo91pxB(QFhQ~+yc9WmZ)s2>JCTSOCYMtW+H;M(HWP`s`nnp(Lrsp>tCi`OeX{MHTL+tR9%9{8hNa> zKBxg;;Auk-j9(s?MzW=%mVm*7DwL_CCorkRUI-O7GF=|2Ft_^n2?sMBv^SJ6OjW z2<7%L**{$K4%7FLnDxEhm3cSz=oldO8Y@fk2Byz3|6OuhbDUBxw6s?LSEc@T;(T|1YfIJ|QORPvz?H zeUD_4`y}ZGf>SLH^c219?jaA-WE`t`rWzAl*F^fCLHp8G7({@or%(vFckfutaxVMr z&UB$>#SEG)Y;H~?fRp0pJun~gaLuSWJawNvOS{Ozz0z&NV`Ec=HaOtxuJ{$8Pa_A+ zUbPiX(!Hhs{-u8*Hy>UiK*wjGa+MAaK>Q%gs*uu*axBd&sVl)1?730O(kfl*?gIWe4=j z>#>0mO?-hty4+Q9x^Y)jd!Z~*(DA8q6EUUdQZ85qd>=l5lCdZ^3>#= zOF;}F61p$jB1hTVe-*WWRE!0+tmT3-d{?IAOVTFC{RcBQCvr5Ow@ssi;|>#YzbLVn z@140c4C)Yu-2pn4l})*&rICh#IQZSW#MNkt%JGVHGfWVh@6P8b`aTPga|bBhD_>7A za)-Hf>eWsG)o>_gylh&Bh79e#0o|LK?wkss(MvLIk4a5%C!$#a#&a0KslO)tSPd{* zvjnxh`mVL7l3%ePHq>@or|S`(5+YMEWA87F71{O5RSGv%WP*_;_u1kW%^uYbOfoYB7GwyG6d@9x#fLX~T z|aUHAdk>` z@s-Y8{nov8;CbU*aSxLZKceqhZ<0Z`SU>hoe@&P>lAhL!+^+UHA*hq_ zcT`9gP{}*+pP@|np@U&-2HlWeAmDQ}hu8_rK5{gBq5 zAAHXHD5U+2zBR*a_j4@jQq8273*?*G_bjaHwh5$;Zsg1q|57J_mTKgH3N!a6^bb}9 zbHEm84f5RGLQ8TLVfdaur#=yK0?x46wE23PV$;6Z|HCiPHSl@Em@$&#wRihJ1IoR# z#nxB4R+jznEu$A+YZbEEAEQj`{Kyzg+t~6daem78FBNeg!%s9z|LG!{qGv7o{DcrM z{Azcuk9m@D1++P!16@(io5;oAJ9-uV5;p?>9mQ=R8BkyR89op(HC!Xox=*z0K2S!w zn?Rd;=*N#(r`lCMLsK<+e#E?=^8TSl-~r77?110=X*inauzCA3rQ)1*>i{V#rOL6x zKWFqXj8l*x8)OJ4f^D*sY=KaA$%C5)bHV=c{pikrws!6vn7$OY~Pq9V$h zj?zjt{%~{!*}m7bFL1#kB(Ux6h1UfSRr;qX{`%@aKFP8GK*hrq9&msGdPc0v~%n?GN$Z1%rKsA2NVN%o@U7n!%v_602U=eZAkay4SQ1NYV^VUjMv8I zmYKs`4%F=c_j}a;v+94`|E$I>z`;qrIQ~Jq;gUV>Em6_kgdbyu3rlu$A7RFy)9@q0 zj4_JiIOzX+bLB;o!dog~&{4@N=C6D|uk(LRsoxu@G>RYuIo~Yd z4W*A!h$vgx_A&)#li?dkn~@Zu$ACP|j3O^v;(#9rrFzMFw^tf0` zVrEZTpeAA~Mqzqcig#>60LEI(T5u{u#t>l*4|#1{Nj&eo@MgjVeP%Zh!>s}JT;s>` zwb1u2qYq3?#SfiBiFJw;U|<7*I&D*0&6hqJCQ9|&i+`~m0e+-WcEpU;mnnT@gYeTU z_HR=fk+K?Lwa?U$t&M`FJe!5_C@9}0+?x#agH%!=zebao)c*< zNH=x9&ClT`rDs}w>44EwW_3^m`#^*oq}7+dAigv61#JP!R2Bs`QM$Wro-Y$|^+vjZ z_Gzb%IN{uI?hDlwmC9I9*~<>|IcV-MtyFur*wp>(M?P%>Mhx>^XsL?bA&TSt&R-S2 ztP>b$;{j<4Iq}DAek{!D$JWw_IA$&l%b^2LT?xH7U$W5MvFJ3nd#RGUd28LH~!GQlvK-BCB&Q9Fd5Nila8kvB&{C>hU}%(jdY3CtqH&53F)PgI{E zazMU3$NuFB-FYZ5!SctlOhFkr+v;Aq6(v*;9vC-P96D&16@Yj+%YMCK!cD%l*gBPH0&F9D88Su!0Z+GE)uzp4Aj=EvT0 zPp2VfgGb8@9*AjF0vkx?FM)Z%{0ELzDG#g)yI$SB6t6Zs`X@J)b?Qh;SOhxLv9Cs{ z61@)Gyor6<46bW1>6Ws2$vH?zSu=!{<{L5?0ElHRA~6jV%g2q#xcX4oCo_`4 zVjv)0ox!knm{8P;1R7r)FqmsMqXyG(&z(OevuiX;wS_VLBAxg+-3O8h^{ATsx7=o_ zJ=x7g)|in7_qVO4rUn*E+N!ZCQrt#Gk8%gyqT{EJfv)Mgu^k}$rRdoHk;0Tm^4s1( z_Uo#>-D!hWjgki_#2C4VEOyM5k*Nn2JeEH81oe8+a#H&`re&J9KBp$v!Ncm4*1d z3Z{?-Do3EIWqSPrlnB{*i6P~|AFp#YX(metV>+HmLqIF+^Gm$x_vdK*5$7h}qE~<| zC+_te1!iJkHa-}bM&np5KRn(N+4-DcES{F&ZEsbuBB0_`x%7G~R@lMxXsu6h3fMhs zER7d!@CT^uN78q{lEOnO=u93>7XiZpg*FbV02cvb19vD^dIPIzu0XLrjaeyBmiCIF zz0A2Zl6!-@?=`wwdRrjmv6E{ZVLLeAh^L)JIdIQi*SG=XH;#UPv`>IXwE3E{u0`&!<%UH}w z*&s=dcd_d0@Zj20lwr$EbC+vt1GY5UwU=daA`1*lI6g+bSewqrE3e~eq$bfTcaeSm zwla5_xO}C`GS8>2TfxmqPfLGTa?W=Ra;1I8G71MT8WR5QYXSPeWvgN;6AKoA%gg+z zZ5$Zje_ss}BIVYn`aXHFqd1OF<>|ESBDvYru7}i-jU6g5ZParaC9Zun4xaSTD?>3U zS$W-7<4)Qb19t3AW>|qD*R$vx@8QJ~wh-~-1^R*YSu%tAyYmJo^1KLC)N=+hQdW89 zbkT_Cb8s{gy zL+_Lnj=WXdVgfQOMdE%nWj1O3Xa@ijsVmB4&$Go0>1<3ACcs0~Zh2ersj-a0*Ti5$Clo z_6+0WZhG4+<+(n7&Tc}SASFb$Iz?n2n8OXm!G~*JyAM^PTX8)WHowZ3v9J$pa@I2t z95Y~OsvXdi>XW@i*awdWU=qjZIsQ_1zvLW-dpm=(9q7J|s80`-z{DOR3PH}jc8b^L9-e?1)2DT}VDs>8&dGGV^(UNQ{?uw$eJtU0 zz@{VxFVdrn&^7l~LNu9I>Ey{b2PIq<29Htjc&rXr8E^iodHYcn2(|3>sXX88`+m42 zQOt89;^1e=dXH=ZRc8GP@=`m#li(&{cI8g^maAn1;9s;1~7Kc_Dqdohq zbkR~@cL1~*HnVTHRJhPnV6a?Z+at8>cSruf5g0PT@M3-~rKLQNKJNmA=KwN7B~hw6 z3nxV}zcgQL5%kBf9z}@m&Y~xB-+VAnE|LwoMT`yr_7LZ*xj4e0WF-m|oU{!mBMkuw zdPy2N=*IE*#v#pP2o+@F>hnC~;QTB8a)CKva+KHPS!I*%?J&K5v|JvuEZ?F;pMRyB zEk9K;>h_C#?jcjb)ro09{WhHt*}{(gDOVt2iKjF3%!6xVUD5A)ZI$kmE`vDID` zg!XR9nw%V^0v#XIdxV7G#YO*fsbGqGZVu%~`Q#3F56nY@wnt2kD|Don)uSg&-X)$_ zD_36XzKz=gb*w!kkpD!?SOxOlNPVYx_Oj%u(|`Lz{;4GM#F;<-d=Kn{I0LndXvAJu zq5+wo<0a!rNFI@!Agy+`_i4ikPApP}IyM$qw}vi#DJ~G-4nE5Z)AjEQzni!auk!wq z39}eJ?^pN!8sJ0lDf+-;W{8%SZtLSmfd@NFwu#x~yIc5+Ir9cqroNzw)jnlWmu34F zUdI_aEgQ)4{sV4)%hXrFiRx?Kw%1)&>AX<0@TIY7>$EkkM;$!x8CGtji2{ckXw~r< zt0thyA1k&Rj#(xJ=KJdtpH2zNkLicEMA@U55C_O@kQ}A=SK~VaeMc@cif$HMNLiVHUpd#3m***@kqE_T0GVEzWrKV-|})@yV97*!qBU2wL(o5^8UPc;n`2-fQoQybzzq% z{*)XY-%CAKEd^Y2Zjz3~ZfDuAuXzWo!tx9&uk2J4Yd-LPO?Y02Z~>XWrAab>Q{&!o z&i%zNDht2#h_jd1-A-dcC93Oh`kh$G(?jfRL|RT(T29&!o}wc#A!WJW9eLo@sHAnP z)&R1v*#EXfa<0bv4v`+%rqX2swYyYm8eHfxPs6FVVeZ-Gdx<8$)~zF<+r(xdjPUvL z_Oa-0B6CP=60B-Zn{Q6x0T2hw+vg1)KU{x!*w>&)xl}Y@ppGPh4_Bk-o2v7d29b!6 zy$n9SFmsYeF&}o;#$dDpHX5y9ZB~z+<$R^~x6us(=T(*O! zTk*)a9v_txuVm%sq-kw3FZCA$=ASbiNK4GV4;7WmQjL_`$%vTmNQmH{&n9=6dhTr( zVdhNdFfoq8_0FnRq5_dau*;p2X5$FvhX#UlLY>4tBjytel*{6Hw(qnbJPeT!(HP8| zsHtj+XMtB8Z|H2VB8z)=F_F6AMTlCSPCzND#oi2CGwtmqa^ZW*5~z|&&;^(eOW2|m z2c4wFgqk}Wls$P`|8Pg9xlAI4?t?tU^y(WqAF83$JX<-Y01>Y)-Gj)Wmst;luh)K) z#NUSDbuPf(#)}Np0>9Z?Bc3j8Q?>@`7PYAJZH+J7t1sGsj*qso7|JzC-+rzwLnm+| z32&ZzVQY~Ondo)c=i&}oI)|)=D@`pAm6y{%Hh8dcaE3uH&LlfuRGzD^4Vk^+x76@Z zu)oz-(hS&<+gzI#KBdrY%6{9z);y&ks+$~AF9WX>pNTnhh~K|s4H`)@ z5v^UDjFJ2ln}YO887-x1bZ{!Qd=+&27pV(yR0}|G`juW+Lca-a{sQAgW1O>R)4Lq- zm$T|%x}`+4O;*DnOYeNOyH;V~eV`5$IL>>cxL2zBtAf4qO?{qWUm+$=PK2YA4rxk& z)jvIrdlR>uAM&i`HTWvI%Mhq%StK%-ZuE5Cyyh5QoALGnSxcMbhl2I#STFbVyRCCA zF`QY{y~|yt(RwzYzsyvlsrqC#$%ar`%BWXPE0)u(QS4d7jmqihku%$f&g!AWBG=N= zvYmzOxKjIJ)BecSK#(>)`xkR;NdvcS6ZKqe*=R1kenr7q2gC(vzj=HozhySCjfyBB zNkqiLs)`Wlszv!_Tgxejv?ZMq`;K*!DhC#0g3hSqJ2L4?W5bwC(p}%W)efE*nmET^ zBWgZ+rSq_MvLir_Ec%tBJ&orf+DWnJ4YHoueB4ac_>E}RBb&2R*llty%^!2QU3QK< zZZC;YaQ-b``1S`+4S)mdwBZcCc9KKGgt34Mal(7(kuMViJ^c!zPW}yt&AHF1oymrWEJ0TI-VNjCWaoeA)>g#mz++OKjayV}+ajeEk!s%WB zBsxWY3k`4-ht^i-YsfM&c{GRi(v`*@ET~4hV@r^~`@3#bKu}P3PzLQF_>&F@{@Gu{ zz>ejq{zMqR_kK4Ch3LkZ6s?m-L7;ZUQIh>kiF4V)b|^_eq0+eL2YqWe4)5WXN9!ek zTavM|%BH?beN{}Ts!m#wVyS(6Y^CQGu>|Be4{WVdq%2?+D-59+Ewq>|PnCel4V?+s zuPKZ2T((-=^|E1mW=?od`kf`-qQ7t4r5hk!W~1$*h^KD9%P;(Z*;W-NZ#_RTTS;a- z4z0X_ud9O2O zddC03f!krHcDcJ=(!=yLY+g<(gjCa{kJlS+0|{zTcZKJ7Ueza_wa}9vPnSIt$*OgG zsK5;Ffrp1TkQ-ml4{Qus4;A(;!aw0=I4^YTyNqjT2;0wnoG5oiCVB69M^qa0oAozG z04R2ptxW{Kz^#=`ZT3@3O9Ts?nyb>DNrOc>?j!6$BA-LT9TYd*yZO=%DVy#+FigL% znV4m}xv@1aqf@R) zZ|A40fqe+Ik58^0QXtctSXV~i1~Qk>$?G3)P>Vfjk~rN{#x>%;%HiUhZ`_`ljHc<^ zYUWeRIe0GOx*kSN6y%XjOnkV7NX^OvJMAoMjcHeuCGdeyvd)15NLf<3lJ#Z3+`IQ7?kfAkHr$ zddT(nceD@pMZAjbos!l~N6*@&@oIRb=L3a9#^m_5{M^O4TQw2bZ4$8NbZ>(VrjA1e z?c-n;_$_O1=7&2FJ?Tgfs`6r`Mk_&0+|YGC!r{BW4)snLpQ)zZ#~5+tkL zI-jEYPVc=^bIrZy^w5HWpbKXCxmaQ z=53rAK5UeD>FZl=;>~=QuIKCqj%;n&J*Ge=z1wPqH#hD8F$Su^jK>g`EjbXK!b0On zMMQe7h?4QH^qFta^h6ea_2X&h`O8gP(3}*)vmZFrZhfBx_z{>A30dO|D8|*&{^Zkc2buM&t`6gqwHhUo+}+r?rZS`ti=c%nV2BKt8Bm74!O8 zSh;?v(MwI8ELKf;mx2(rlco^5D}qWi+mTd1&v^NUM{zjvv58CsA6j6e_ z2}~)%Qv90v=Q%uYztdM-ESgWr){3y1UrX+u%;>Jak@y(Od?fj9uf03vVOnsEk!kB- zSuMfk$ArIBR1NLf^Tr3YTs;gw&hgX?Pjf)n#rj%bW{hWi`EmHGO76RjuFfDe-2Z^OR3ca&l4H{o+h;Cbc{2{> ztk>V3GQB=#i%pYFhYfca_f8}1M)r8i-)?8UpyRFJ-&}+7x+Gl$_qiWmaSCgdloe9mCcq<9^XwK0-mS78hdo8|la<%0x zt@U#UL2+7FWQFHCzk+ zAxIToVr9sMmTsu%)TQZ^JPYWl0;TvRy9DyAFp{K7Sl9#d8JKb`XbUhC;|Kp|CE z{`7~@bV7>i+GrO6sIWs5tM+}< z_eZ?Av(e@+TX4z3zB200v1PgmD`+1SZPgR-CK>8_1>2o>&3QVMlp930B-9U?3hK2h z8Q8h|^-ov%D^lii(~RghuI4ESkArrtbF2p-AlNTcGvo}pat4u;CX^O^6u~0D{>0&y z`N63)_870m=0Oi3hO9@w1G3$UK&!t@g_rP~#PwMLPr?%n4zJX!5%bh-D5FimuO_P7 z+G$TYzKQpip}e^ytFZQPE+&{)LNjX4&F$A=<&;m`6~G>#2id_VrXXpG2dn}wQ$O?q z5#C@(GPXLpd*Gf`nAn3pG9EGKBR{>FVZkd>y&yDYU(#Dv?bugG@N4~?h7kk##Yso{ z(>D>OBm-aRSZB<3mgsz)ex%!^Ur_vED)k}YJ5h#)bhl6W2w@W3(QAzJFwae9@H#Ko z;{Jd94hRszYI>_#QoMXqCwBGl47EYiw@&$_U>_7m(v%H+b=XAY@P6=scd@w0&{q?bugphrNsBpfx)$E@}F|;|#yq?Ib{g^NK$tWn z7E^7`+qQ+vMv(3^ToC`6D*wvnUGo4Z=N=c6llhO}S)o;v?FqhoNgk}Bd^tR6;p$?~CP(sW)FMx+>iPe8$^X6W zb&R-V{W|}P(imk~*RWjt8gOYd*1$HBXVz#pr?u@jZk{_92m`A;7OOx$gztl9XF?|f>2XG~DyZ0#l~a1O^|@(Q`= z?jb)xyIC#x!NMt;7J=}JfcXN($)6B|?ErHHi^UW;x8>+NN#n!6yu z?{`0bj*gD!XpV#aZ^7b!aSis#+Z14XGy5ok{LItBMbLa4UNen;?yT5rir^5|nu@<} zADe-Eb%HF{biOZq?L_qRSjBd_M@%4Vd?4TB;afuM8g08&Jf0^{%N-WyI(rffQF;>| zdpu~1?mJ#wPia9M_z3SgYo=~@d^v-Uv+{tsg8j?p)H<$582=NV-PAadpTJcv@!fKZ4 zd3Me<#u>q`rlSmFn#b+C9k_=M5D!;$Pa_iEF!_0_GW8FlxVt}utx*cbK~z7tNec+U{IEOs2^ zrVF90b`|xqp6dNgVf}<;=COf$|6qo$JQGi~YqjgP%Ga4I+q=@FZ04ZOyfxQN+*EBH z+qkC^OJBUx;o)lC>U>mmWE#99e27e&B7gg|+ zhJzBEG1Ev$32#NZ>Oy!k39L$V z0>#E%-9!s`*w`x2CwmTugD;61v`}y<1&s&l|CVjUA#wq`?I%)a^{RnF6_nH+)_`%@eBa$5rOh!}*>`uJ+3h zPR7d}59dtdf(Dv6)a~_MAHX+va)Rbh2KScu}g0s)?i>H8I1|gx#Q}4>aA0Yk*Q!r2DnIos> zOQTJXYa^MvTRte+%j~n%%Ybb862C2Mo;N$~hUU9lZ`{psDu9##5yWCElbd|d`h`%- zW|Z=#!q)jIQ|t>DdeRMzmToo)VNTd>QS#va@i~xC1(iY4Zn}Iy^{h=iW`uo$&AbYI zV#~j29T>%Ev>CZFBWira!kX)q*JyCl5nw@~31U^XfM3rE)6cK^4nVZ@9S(r$7tdN-AC?G<|6 zBeZ+LJrI(KRxgj)msCvk+VE2O@mFcfcfl!A^JADsD%i)DEqb-La@_um>HTw_A` zB}!hY2g?j0X1c(Lj-%`S86fZlME-e1(tUPACbf}G+Wa_Niya>_2`X6--_Ygu$TBQ% zQh_eWmk2&SOcst5R#sG0Y>wjeUCy;B!6Icf*1t!Ek8dzg?lwSGY~7>y`SWLTu7}>_ zT)BCG#BqK8Da0hzirN3qN&{mASmk^kEB>3zf{7Z#riP2BH4ATH-#jlHwss)AiZ8(n zjjO6yNKs=6Wzqfud7yOR&a-=F-MfrhMFs`r+~(=LZcggs?kY|>wd=5`EA%M8Z2E5-vC0Q9AY78d^;=Zp4e#kok!z#8 z%=b@Ja-KXHP5xqI7;}V4dwk-ERgG*xfjSW-Wm2JOdoz~0UbX!YuFgz*$O!AsW=0P= zhe0XNqtWcdB=oHD!j6yns-D2@QHnU~OfNH;2GPOh7zJb~e?#3bUya{@&@`aXgzh(y zsiWD>2G6{LVb`s_swPaX@~Yq`oEp7hBmca@L3?gww9?NlRm6T3=D0E(^7ZTOd$>yA ztaDMB&B(~8*nW-U71eQ|kgy?550NbdN@AG9yNcdb_-iiyOEs$M4AZdn#?1 zv<-yIYI7F2h9d|Kqc_;I{Z&5W`ii#_Pc%nXG`IP4R%Ich_&)zumikJEa#?XIoJ~6; z5yeL!r)gh+-`OC3H>-7LaM`sOl*;XPsoh!^ z(WvK-{dO1^Z6k&CO7AFNm%B|2*1sx=RJeSVW0==rajBPY?p31jP$4hRv_G`ywF~`nwDCzcxD}K zfCEkogPIS+)k|qaEs~cSzk8u#*S=`u3F#IAMv~fdzbVqMUmF2gFDk0G{q3o^;oL~- z$Wf1tSl`qjuvP3f5a%qsppx6zD509Y>D?YHFsr2TG0J0f&ZJ*bo7Ureic8$)DEKdP z8BIDE&UxNL3E=?)r1>5T?p8pg)GMeC7ZRd*9$Il~4usTnz6E6G zLACy^WC70uU2#7mHHGETX8pO!h&?o=c1IAAeZl3eM7S$k=sac&r?UUHg198Q9qsL>>+jow#V#hMBuG4D38P z{zcV(ll7_^fWmmWUGHg_FHFnMZ~tt*Hz(&=+I_88vYuW~nAAKW7e8O*_d2e$V$sv# zkY#zZ^ZIzOP+gnnk?dMgE`mSLU}c{l^~0@7+*(Ib;*CX{WGS#sifP`KET6P38a8-moA(f%So4Vu&j(K6jlcOkFKAp&N*Z&MCE};>-xXkHGth< zQU=Y;~v*3zKFQDdrPV!}7aDv^%xx9d{WB*<%VwrNwHYR+# zNw+<2szHvS)aivqZ}tqBuWxLVANNQ_q=_#FKHEOwWDc45z;C-NarmykctLHo=x*D* zqj%4c-LzD8^})UX4lWtVgqIRjhM9<5aP^VqXR?LOcWa3uMKguP?qm26cm!H-+51t7 z?dkyiBiR)Pza+pd?3S9;rVZ)v5;)Pvx#w(MVq9m>>`nCDoey@Rh4wf5$i&Py@B(U=MB z9$p)fJ9ySi$4rv380$3nL4rAdcWhu`>6{Vp;hQQ;^u=}!a?dv@i9~{!)x(|Ux+K}E z4&UNZ-AYHCE6%H0F0Fo@lJD!zdZe9I>#@VIEtNgfp_~44MK&j?2Lm?qt?Cx>^_jTArcaRAUV6R<`LDLThH3>iKdp%Lqc)4uKDIj#oN9 z*~N^knLgv$V!4d>a_`<#sZU_y1u1;{_E@WAyG3Q7_4mB!CzLQ~CWV1ME*Cy9Iknd` zn$V~XlXRspzwOALv<`;Oay6aQyEv2!`1$#@FX^PhIwLG=-qpqQ7f+yJ&8UBPf);kw zRPI4bxT>L{;WlQp8ch$sVqs&Oc#->%6b>c3;HOv{I+%H^y^H0Vc9GYFKJJF5XcL0% z$^5az`ap6?f5|MUAlC@*p9E{Vr@HEZ_)yJ@QgGGj?M{wMj)92|oO8Jj5Kb}kLg)gb zzJzm}Lz*CTP7dCjVGi^VZ;;42kbd1&J-|u%AQI9sKDMQlMY27SHX!ntR&s%w_6?uM z-Frb)g&wTV3JN($;zNvwTNL`0Mfr+~`kDHiAM2L`<81Z)e3nN3ZW z$O;7!t0Tz`;kXnIr_h4D%{YGZaig(+#m>Boi7U8nl0zA`9 zqN%^wa9Mzv>aslh=ijXq)eVDK488~TcgA+$Rr|{^TbXK8w6TJoN>y&#ecw7?`@MM4 znfTPVH({;N5u*poSEtH?>0Th@$YT}u-Wt4@MJ4wci__e=B3p^MxxTMe?Bdo$*~#We zp1>xsncG{_10p~mIpqS59=9Fl`_w=Kd~DnmleQRk7#XPypW|la{wB7Zy`P4ZHW6v# zA#iN(Z+~jW8?1>Fe5_Q5{;C(Sla!;MfQmM}0ku`G?SY`~SR%7shbY+*{k}#?(bOws z5RZXGZ@BWYe{F4D$fM~vET@I-?vf!R9S?dY4khLYuhdupN0+OF+<&%FlZ7C)^Ki5@ zKRrSeR85c$l5?Hzi&$Ean{CshS=dpd;apac%(7Z=T}IgIG+ixvF&}JPwSTCK9qt*L zS-bt&k3DYh4;r>)5T?;v?0pJn`?fbDt2)1})EvDvOq{KDYhyL>YBWB-;zG?BzKC!N zB$c=xJ9aaWDpRd*u7h&l@stZ78H-8k2xhtNa;oppvBJp6$Wq|&MaQLnqvsqYkH&KK zblpaH1c40@L7veqX}L5s=2ACySNi15Dm6C$mIM^&hLg zc%ANtpXX3W0NT%GK71>TQTr|^zx4oT!t4y8_Jz!B(G^=A`0?9Y<@uAcG9<6i9PIZ3 z)?;Q|mD}KlHehbdzIlJ%H>|tvYn2^RlAWbtDXeu{+@H7@<<-3tp-jL!S);d1A!>AA z+TyX8$cP2Bn^aKUpPPE_Pbrsf@A$yQ^$pCN+gP`)dV8aIn|QhZ<=g&@L_6U(X}~EO zPc9b_A!9f{gZCaQ71Rc%WREelY0O-tQ+jrSl}x7-74CGX9@+lqv|;rj0DfE*AP9U1 zzA!^)p_3CLv_RjaOs-fiYXQSVKulz|`;E3ahAo~_3>%{{RV_!G$-26d-*fRzqWOxU!#4@K7oJp=lvKU~67v~0`z3q%YF@$XNv_i+}= zh#HHe-tbxbFsWvwgPmlO9~X4&t2sQ(qO@;~6)4H>;jP*KVtFvzrthlfFS7sfv(!rI z7J}C*FRYi@RX0)4(16Curc;`5@#(#}EQg6}N|KEEL;J;Qu1P%$%~8yzZy_eJ<;BE; z`9a_SC++*W10bJUpI>{wq+gt8G*R@}?$8u)5)sT!D@wQe9RjE63J0y({7C6S{)f-tT;rVuZFO78O9<2*@4VedtpbRR_IuqAa&)St zRsyL^uYT`~NUic(?ipC9?pmN6nFC7${3=qdk{M~>lUxg9DZ$d%|@)R}6Jv@(?kaIso1rc>4&=Q0we4ndU` z`0bew_dfOnF*7hU#xZ{eB-0h&K=N$Y4q>AKk8dk=TI{BY!n);R{Tb0)m-|%VoAPUTMh4$PX{}a8b(n zyxIS7P1UP3+T+olb^Ldeva-l9N4M3-8I7U9xSzE2L;*7JV7UeSnmRGDHF-LvzRUWv*j!i z%-dOJb<5pJ#kF{P;>IHMU+Sgyn-fV`%am_{m)QHj>q7#34GDvyO7!5sp4Sw*OnAWp zTLQjB2xPP=LN!xOE$ZC^M8CsyQ;0xQO-;6VZEY==#h^xxUa=2I9eZ6s>i8dO`On`b zE`so1z)h0=y8tJjBM+SC$f0Q@1fi*sykII8@v_>oVA)b`F6i8$t~lw88*}R|HNSdb z3feV_@+jE8CkyvWh>GR?-tf$M9B{RQnvzP}J!*t+4P(((`vjU#M$1kX2|06af*R+` zkMrE=S=*E&na(f2Y@3IJbh3vuYv5B*@slu*^P62p#Z(1(G9_~8{sAv~t33|5J=U=` z2g0@Ko%N_21GGQ#KPXfTL1$8Y_Y7pBR_CSbYHN$VRy^C{D-^M$e_qlcv@t6@LtaEy_^RkJT9o$@;YxlR1{Wo zuuJe4hc1dZ>o?NNMhw_vAU}R%NOqOL(J1|pelo~~1R3cUflE4TSEH!qkyNa{T44f->$BptN0A1vRz%kMtAB4c*z5pq9c zSKU3l*IPkXlw7lGV%YR5)4hTYvkl-IB65u{W_z2IvE~FMMoNxC zFSZn*|D|3~3JOF$XxDsxRE(AhY#bl#RS?z>rrCK^Enm*jt!g)%OU^wv@qYRqm>52! zo5H~cE;y-)U=FO{g<^fROK&;+OiGrxA(*9?xn>3p3U43Kb&8NzNg}Qe0D)Z-VcKHP zo05m)nIP;9BYq|`58}tJ5t+w-R`60?P>ddVsrkdeN@&3~X?j%icpm917S71pD<8)I zg)(wAH8wkBjLvQUa0@^m9)s43UTj?1KUnZQOFbp9E=75^vP{UL0|JHCiK!e!rP)biOS)JbkAJjACu-C15O^w$s*@|3o1tG4TSZz z>!r6SNJ|Nr9WF5ePFnS+C^F~*IC)(U`w>k2j}d^^fD7*L9QO#F+4jjXWKq5pJakDu zyIY%vo+lvzYZodjL^5}nK*XX~tV{H7}v~>dd!Scu5P;azVzOS96%EOfSDzfRXbTJ<Ge1jx~>RnC7R8Di9 z-+ui4>m-<0$KheZY>s+%iPlIPO}@tV=AVf^ys5rZU*2|%b7$wjFLC;`R-lGHr>1xP zEG-DXksYZHR=@RHir7wv3x!f5I>_1|%IRI3ig~oG5ytl$ z+J8gwA*i*c#(N=|QJ;C*RX(T~ucY$6^biV#_JyF(J+*YeG4RNJME6&1YW5nw!O zp=18c5<#5||2vCfmh;3-X?`o0h;qs&>@Nqmh^K+;BlK&by@&U^ekJP}?Cti})LkBD zwD}xNM8)`AT*9C+phng_mslPS{N$$3Ua zPxtrqDZOI={K_%I&A$r^ejah>$<)+bI?gLf^?7b7c_k7x$5G`GWS~|`#%d7GNINyA zCz*HfIjwshhfI(3!r8OD(+i&}`EDu*qb5ex%TLAU1USm}zL`7iF7t0%0ZYx&6ZV*~ z)$Jg`7S&ycW+y2JtQK`HXmU-CV01LJ3iLbQU(DRX5N2T>9z2$~!F^oc#n zPOWj*%FVT-)g4ro^^mJZB)F+;gky-)mw6TUcZ^+g>Ot1|yF5-G8}SdGOu%o+^TxgZ zE*lygpk6)RGa`AB0y|BS4pwx>3h8| zf4$uQ+-wqx@a#6q45x9HpbCJbuT{Wo=mWq=bheHw@+g@l5~stUv5`$Mqn)c72St?G zE3>Q;9|)6`XYo%X(?6&TjV$7M|Ea2oBpCKMCOTM|kyVRBpv+7FCJb?-81OJQN# zWIVF_Fv}6{vDB>r*h>&}ES0i*^Czy|7vlEh=LJOh-Gov6?=$}4R^NT7J|Ze)7LcU= zxmGJ;b`%uj-dtL4PcbGK+jMdDiDY!8L^(msy2f1^Z%936Zw_Ozb@-+$eTSX^<3^1? znK~i!-}ikN?7K|-;N9q-9;#6R3TWu0^Ae(bA-ese)!OxqcpODsBtS%@sN_Pd#pa=# zkcDTh7pWz@s2vPBeg-2yANAKyHh{2ued0&*3D(z5V=#jm+%>NmC9fJ{cuBIuAU2fG zQp39#XKkFMwZ#G&yML_fpv zQgVWhB&!wcky3pvca#E!^c8Q&JLH_pQm^7AsLbm+x|4%Im#o3xb&m#?4Fpw9^UK0U z)8TDsDNt*P5+X_0)SHFLIW-gCq$)vU;~dMXt8&Kp)us;D#Uidp1w{*an|iT(zgf-S zzW&z&-a>LIluow0$5LWRFJ5Hay2KpIAMsNB9TzgjEn>6%qSlD{=Eh(;mjuAM;ByKK z@Q;B0=JbDV>%X7iqKHZW)-TxWmZs5GGgon%3k+^I72M71JrJ6k@7vUR4SM2es!*vI z=(jvo-_`at3C^V0klCq8O;}0ig+-k|W9t9sHur!n+;6;4EZ5&v)~2DV)P zA*bxmtus!C6o_?KSo4XPcW|ZfPK4o7wsi(0dH{5Y8p)iOl3V?zl|5-en@|s{`54Ju zi3r_72QS{=?fL|0MB5z6NqhWLYJgg!A&O-+>;4ijsY@El99)2VhhD~K$Bts_3+u{$ z-x3l@-`==u>)&eqzNyrCXnN<;-}`?i1%QR|FlC$j8F0XRP+i{#Q{^mHX70>LUiMlm z^2-2XC%_7=(Y2V6DL+yh(7kVza&#|wVq21?3E?o8Y_D6Q03fIe|pT@CWdwzn$c{M3n*K6p6 z6Zi1y(N>W0QNaHJgjoa-M#H;*a`L?IVfL2l&mU#>1h>jphpu&z2Qfw52Vld5CcNR$ z?ga#|uFLfMJJ0M_)9ojzqkIFKUc3OK5guqEEv1{0_2(I0v^~pFL_%rNj zlbb(HQ{dt*LP5|9Pw;(qgu)WtWjB4F6St3^g zR4uHpEnn|zP$97qM;1x!JH|wi$PfK`IsnlWr_Rz z#iZzgwx%BDl2>nkI*-x`Gu2F8l6~Z)cA;xcJfySc&A}Ty4bZa=;~y8)~Hmtu1|Xu z-QE8xEpG{R{j*7sPy|E?zdP8!F8T#QPk`-DNw`A{>S;1;JR9x`YqPa!eMZ6QMn)FCqL2(PrZMTmV&yfydq+xOyLs0< zsCB90fllS(dIk0!csy#WpeTorV|cbrYDj~y?E3=^#v7yY8s8AyqhD6`(|^EQKy>c9 zhpr_21GL_xSX`cB7Gs?SHVb}V`j1iuv-Adu=&nv0f!5>ZF>NX6kgnz8pttEoxrz>iS!u?UP#;&22gh-Lf zmwmh1kU}O+#|&!%+-2VDou6GY+Uw+I+3~0&x{O+1wRMdA@rD@2Fof}aVnX(d>|#EGTA{pIZK`MomjsZ+zHJV zRZ4kZ5^bGtrK|k?XnFOUzjzxwgk$@B`Hsua2NPy8xCF>L9T6jmqIUZPWD7h8W>ZDa zy?rr_o32!;sGEeO8Ebg4hPVPZ%H|0p@t}P!?yNx=`V_Q(ayiSmF7eI2(kZ>R@hTBC z!?`CYYW*ja5TIIpfXJ6BD>i>HD33@m z(7%Ii)f~E}ET#%Z7)WmKey6|fb}Rrg_9T+W;zSTRk6M;`j^z4S>8eSt4xcVh0O04L z*^yYx1PtM>+|Vx8KyV@!@n$WClXrCELZIU;2JfvHlGX@uWh1>PLc6TrI`Q7y!f?)n zEcgV6h&ZiHA3G_Mb4m}pH7W}vu%f!FCzvwNbzM95D(L~e(jk}+_j9pg|G0{R;Z*Id=H5MmD!oR=6^iN!2f=fp^_CPbDCt3p50XptrOT0PBcsX$ zvR^?ez4^SJ1&p?zeDE)u^$s`=={zlo{9k83ohPR=&>@0+e|!qj}%xtq&Awk3c;&Z)_{kMbGjEclvZEY;Pf+ z!$)o>@vb=<>LD4nwhoi^ zi^IzhS@P?#;C{{R;-X2r&EGfvr_Ecv1t36GLPvB;{GMa9@t`RLr#ADKyBqZGZ>|>n zGp1zv3v$%w&lkxDonY^+_PVBRzqh6h(_0-cUkd>58AM~zD^lSlWvLCDX3g5~g1cNz z77QFHjGiKG+&!ijd6J-tI!e=d;*ilS)J}grU=H0T^$rasstHcm`m6*0YnPeIfPwRA zbysAde=G|@_CeYvqc3lATH3)QEER?gSsUncdwk|w8mZ6+!(tF*;J1F-B_86G{NU9m zSq0<*94gEry3heMg4 zm=rUgeV>yRZ#FiMr{2SySFH5hZADQ*f%Tv;Ki}qPyTv;C=F;sx_f5kC`}S|&zTL5_ zN0WK_ZkP5q|IEJ}w^|V!rdX2K}zXaUtms7;pEryI- z?=B3wE@^-p%`~;+;VFA(<98GMBL#~?bOvv1KlA&JA{t6G0(6dhxRgnl$`i_KUrH>F zN1sRUjvM=ieaWRP5snnFt4@`9Go!=}<~n*bh(E5fJm+;6LUiM$Vt#$PWPqYkfY4nd zzk+(b`)q>(YSH%47cbB*hYxBmj$L|nQ_-mR5~1|NK{vK^8ulH#dVxa?lW<*w55#eM z^ks`tcHJW&y!3Q5IyxxLtj zQ(qgmvpin6;H*T!Pa1ioHqM>DgGH3X`3O~eZVxMsI zu5t(D|gZd#=6@qiH1D~&}ZB4ChGd*DhS+;?x9tV74SMf1TT+6b6hzj zzA(d5yJkeMP+jZ$t-tWXyvG*b{kR4i_2tnQFI}vax5wNcR_|ahPknTlf_R=7qnVFaU@;K)9_IC8u+8#IKvU1*waO_n~ zC9&5{Y!`1m>ZvX!2&CYwMLD4o3eSb4l8d#4(Bpw2ndsI|`fbr)Ft#Q;Aw-N?s9EZ{ z;xMll(-VSu26u<5NR#J@i&)YQte{KnH#DuulT2_jN z%RwK~O!iRkmS(TL@)W__or-^W?gNX`e*x-WA;A}}z#%gW>&Y7Qr`R(mkf3TL3P~3s z)V+RSzY>3`lxU2UG*8Eyz&Zlr?oJUW;uZL~`omy>M_N~LpLbeLEDH&nhF{4zllQ9y zo~h0cbaS0&wYfeu5uPL(#ju*YdTETwZdoFs3|qF8yO4e(HE@`IM}wu21L+cja~Pua^Aa>+(p7Vtbr`#LEB|t*)0knKVzjKJze@KN`BQqxCQE^#-iwZAH+^|vk?QS z3St6Yt;cTv(cs#(Mhu*2Z=3}lM(M22l4KmYI^|Dnr&~TZOlRQ}T*}nen&U{p7c`_8 zXFH%eK3-s;67dY^nD1BP7nj3~_hGqQa)p5lALp{yQ$Rp41l&2P9T__T2QZKZFe$;WFgHm)a+akshfe35Y2YTVvL<>)gtX^*}y(>ugaWR*&IpUVl^l02g0 zq6WKM$rTp^{AA0L>Pjb0<}*?fBgJE$IZm9}0mwrdlSjeuo!ok) z`+DalUNzT4M*06D35}R@pyg%zjt1W8k4T6+FBn(ru0N8A<--IVzfaxbE%;RYnwmXz zBRDxD#UJ<5HwL#htn8iU{OnAVCc9IDtW2d&4D`9IhVkX&1V!^toJXtdNSDWrXr4sl zQ44>pb@A`2Hqs^nP0$H-#ug}GXvvHWHa~gYoJc8n3G=+q;NYM-Nn?Q9MPKm?;Rekg zU)Vb|$~>ak`10KUTaS@9!Lv532th;CWDYtm?bow8Pp<{C&Wa;pB{R?rWMP?`nI7FV zWkpV^W0XL`s+2=!7K6TVtY@a;y?o35&|&zZWy+r|F!aU^IK+g+vvidFbp0m+afk3@ zk*Fg9TZ0WLftEi5RP-w-XL(=5$G&zmegKi_krA!Bm!xN*@G`VP>2mb12 zx5RDoEw-36itjtzCzZWezj=A~={m8oK>B1g5Co|Lx zU6i))>8mHA>+w;s45jK=$$Id9^vG!(qQ<9;o4aj_I8!!R4iJ!n-~ zP3=8g29P9_BdXr*m$IL(^uH8?CIjHXUF1|(U@2&u{KovZZW(-DcVXDDiuwpi9X4Da z>M_N@qzKB1DKTmeu<6}9%7Q{rLo`VtIUO zYHR#KqQMz-4rcYeOCJ)Uz|RDD1s?k!vp%&KaPT{7)g^j~*BmAex?x0pWgJ)(d%(2W zNq)0uGcNR$AzZL1`=b-NIF4aPl@*+1*ZKx}gP9_U8-T9ODMM*wYHEt#s1l@4IwpKI zt>Z)G&_>~=8`s{<*LQTZ&%aT0Fx46Z&;599sQGD33LqGKRnxyc->tGk;?i|j!qPF- zgg+3VBwI9Li5JpPU(f79gk!%^RFVpR230JszVT@J^w-ayPys07Rg?Z(AM`thlFAfP}vWG=|-`zR?-NeE` z?q&OV6?*cWDiLxXb8iYh+e`M1Tuw)>`u*ZVc+K~_4(VP(yR2AsyQ~eUzcxRxHpt9n zCME`dQqPro~T=na+xbdDe@KEEsC{t$aVqKI2^he00a*=@gF+C_Cv^sLK! zd@}BVx{o#$5${AFEfY=RQ@%C-tvdBQ{S%)Lg!P|~-mQFIOKONDpn|G0_g}&${?M^a zISdz$5bDnxd*KyCrL3o4Wr!vfdIL&5a|0fbQ5YKUvF0G;yjPk8*G8iei>g^3PI`7* zd_eBv`^EnamO5#bTN9T>4=XTI+oNyZ8%jzqUhy7pKElL&M-V47OsgCqPtNM`Gwzbo zsqtudzxyT2Rm#laC>jR?#18Yh8W~Tz#|kyp?&I&g+%l1k&p}oG6t};<@*E_u%v7ik zmmY%m#D4MoZdrMFcuH;en8I1Le6}oknCy7X`!OC37uUKym{1OUxZ9n8*Z6#Uw9*sh{PC?9z@UjP zv6@?2X7Oq1z+YH}AB$Eq=zP?iW9MsULv`~SNwd6;92h6OjDOF=e>tX}UyB@N;DWJV z0SMvlO+c$&i+FjCXR+N1LGGI*#hREWQH|79N%0M|xFe zOXR5g?i*@t>>nKx2(bDp?v!%R>kx?{i#`4}`S~NQq=3`)8hMK8>Xn@%hJz0WQW8Ao zzA`t}?BUp$mwn|$vQnOLY~{{&809%QUBy=d@91Z4~m=zsMS7eoYoK`yRFYYEA1ZE~` zF2SScPwh%MBH%yL!49e*8l$b){FeOeEPhYq(}dU2 zt41=rRn4*CZ(Uh2Ry4|0UU1m)?(S3&jM<4b<@UFvdqJzS$4?{qSO}7Y?!LX7GhYss z**az&<4<(Wv1p87qrN67rlTWhHC_sRr0rQ-*|=Bk$fCu28@#navGUI2!QtU+=P3C z$t7$yvmY!AiAkiOG8b)@kb869*7U9_Odj^hFh2DM_$0g5S%TBKS{O=CO@OUa9VLop zqxB;ZIJLaL$lKcm=Xefg?T*i_LgU85tR zFx*f_M@Q%NT})sZyfJA%H?P)D@F?+1@RK^K1v5lUHm8!m2$RyUlda_b%tOA^ghV6=}=fwBHQjVNURX`5MAxiz?`E$V$JDSvW$@$NtbnqjR&Y|64q4840>4wQM$}x9nqL^<`Nwc->orb0V znLTEJw2@O)heGCiS_xmcok5}wV*dSYVarjVBB}A-3@ueQ%FvdzIQJ`x^;jhu8!vT=o3RBeI)`%7mTN#*h3AEg zY4zy)(;|Ul`^UZmMugeH$Wb&jJLV`EujOVdOPviMG&TpG*Hu2y0cF4@W|%>}5Xq7CQZ3Q~?Pq5|R9d;_ILOXtJ0DM4sWS%2*&ea9+PgK6Us+c`+c$eIvHQ z;SLxVd(*s@XgURWv*#cSsdT>ROLnm^|G|`6VdWiIq4~!3mqyd5Wa_y(pZrpo3#_)# z3uh$wUjUkEh~^Q_`n{Fg>z5O9He9efnS$^X-bX1C+*Ir z=Bz|z1;8>6hJT@fcYXMFf4y)P#$WzG>86g)|DR#B;LfZCsnOdFV~Yy8=nGeoPSvd19Th6GqgfYOHz$7T-4P@`p?cs^n6DLoI-m`~X_+kqz zpbysOLrnJrmuBf3L)h8FuM;2G*#1owAyPmU*N;ShEqyQ(!?ZmyGb}k}9oFakVfD|n z&HHZngTs!_BG$=nDX)S=T6oIkC>4wdP!Qn|pKO_jPX;owZFQK#O%{-67OsdJ zdi;JvX;NPz9wqJA8z`|t-f11#MYiGMP#OHlWlSQ*WK9WSTY}(|Y#9b`X@omuT9s3z zakp=luCG2f9Ms(VuJqEWp+1%BX=sd)>2J|8;!kitw6D)aVe9;6Orf`DZx8R35UaO$ zGr%4r+mn2!X28=Q{?^6$_;y)3--aHC+6!+nmNuP;7jl z_$Uf|01c;G3JeGxP0&2p4} zpWoanIdpyV8o8epHbSMrj+(NlyYaXn+0);z+`R~P z85lx~LuBL_PCQYSF4g245cvJ=mhdl#D&3n6FGdU zy$`Ik%{t4A-fEdvG*C}-4>`i2PVEq+ll=y z&0lSxHzNS6EasZSuRqd&djDHJCn zFq2vMm&S?HH(t&ul?S0w3G)aAUj3_BNr-@0pG3a-5i?)FjC@R#@?7l;7f~nH$B$yw zCm5wW_|BJb=004V{9pt*R6abMXPF#cl8FfU?qD6hXY+GgHlkR@@4XkhE+`da4NpMF z&eO{31rJTz2!T{y6|>0loV}T`>sG=L{KHgg!(-H++VMM{ff;&&5I=s1@@e8_K#Ndg z)FyKdDTwFlrS2M2n)nyU$No?3KWp7(*{X42uEN{J?abY{g8S_j`V0S#UGh?7G`%qI zTd6t}>a2k*@}7Hg=L6$BRl^?Z0?Sv3CVX`1Qs3BSW|q@Af8Ln?!*n5C0G`KOR7MWe zZT>-~_j5!A4*yzO6BqPemlV6Quroz>hnI2dyZ1cs?iC~f?Y6^rE7%hEpkVu=J$J;I>I9oEu!ml7M~oL_NS0%YHjQHBjx0GDk z>aB{S-KEn+C36V;<>|HqY<$m z39RZsEK{fbE0gUvcZq{zp8wMxA%Z`p;5WWM?GcS7#@8aW^=YK_TjyLhAngn181qnI z4Hwr1#A(CWP$~f>(=E(;6sf)qYCnB9bA`L~v+uddSC!FxU(H)+j@)TH>^7{hG?E~2 znuOYl;hn?bSQv>_QN5ogAsPeh1F~(N8Z5e(yQ+CU9{MTfPe@tCLTgsv#TQLPl0p+< z)qnNrLbyfdTwfkNc!`=njwKJx{dMe+K7Kv{!=eU^H+&8xg{d7pe8NH~*JUr<9&>fD z*=!WKG-!$uC+v|a5F0bVP-H$quAZm!d?DfW3w|eIp_X+$1VYuA;gHlmVRA(2`o~t} zAltqcg9+cj3H2hyN0PM*lqHUFp+b?-I7cD;dM2j{rRM3TgY43gTTtbj7~qY9y)o{x zQJj|uHc?-HfeCw?Yn(D>%LZUxhWu*bT$OeVmB%L0q~$&vgN*#g{|qf?rcj5S9{MKM zofq{9XfjkTupMH0`iX*q0-uMQ2)qfT4$SIdrxQfZQp=VsNT97dpD0}-=e)fbW#T@v zqLn1RFq2p`xlds*nD@)XkOI#(^f5kWwM=ht2y#n6 zz-TC#IP#Wf@Q|e)4bT(lfUGxoMeNecf`6p)-61XzGN_Z=`rd^xRhz!!(F~`}8O6OZ zVPcy-ey(i00e07Mpql6i``bLywMO&k2wp`5F87ORaLn>pmbN_-@Pe32>P_pT8NgIG z>IgLV{TMx|!;*r+ia$AKy+nwD84WqlF*+%mPA!g8rq{QA}Mt{cOB3!g=JIv2~8$QkA@llwSspK<|sh0m>ox}IMc$i63G zkS;zWyK>EQscPkoM?FNn8&U2NrH>qMSW2_PvHfziueHt+|2Z%{Q zy<OzJNQcAc!z?d;rM_Q;-1W+KH6L2) zbs}7Qo8D+ASBOz9hKt>0zn82uXj3H+lT?Ha)Lt45jf}Rf;zis7kK9fq1Os(iKhI4C zHmeHPPfM%YfIfMZjBQLRVdoc!I&UN|$mG&DTpm@v@JMVmG_rhZ(U~G`mObr$gYTUAZ&EeGDk|K|{xx9kx=H_-M_LbOz z3BUd^uQr?mg;_N>*&d5Usfhh;Qqn~VcB&ZOhXt))-#iE5205^WIWvm+_&;897U@Phq>)bP?k?%>&fj9I``J&t z-^@32|KZ>aab0Vj>o|`%SAZ~=6H`2l-4#~HDzrr}&zO|wg~8ru%h1*x9RL|i<1HP29uocXwPhRy@4J)LnoyeeCi1oyM z(kizQdS}%B_)I@g#^PqhNC!(I5Fpu&#-(rnM6wc!DT-E&8Q74a3Yj}jc$A_l>xKJPY^I8$?8FKWMB0?3hLP2ue#l zlUaHnLMK`7|A}=9Mf7)@B|MeNnQyrqVS%Pd#@K=?*C%IIAiCFK!=UH#fj&~XIZKd$ zH)+lS$P}Jx6>Ri+)t?Ro4T8k8#tV+9cxu}hW+o{sL-tjw%|50Li&84V3W?WLzi^(w zO6~b<{lji?Lh{@l?)fc`nUy)ou!f5?`r{q$6!!Y_>LmN?>h%$-=G6AEL`I9?LTZSa znjL`%P@u*DqNpDW3v2zyYu2a}xM22)M}o9Bx#lzwK~vDNdC=HzEJB*aHpBK-U}n5b zPqhgope(Q`{g$IzD3=E#lzcoj>u#d1GTwlV7K6+Xw zt9!(fE*jsH?EIDl!XM`Bxg6FwR=3*!<10F~wk09m`7#aPs%z^SxB>#8SiKS!wrP#wrhQIWc89W*6>_nuADv&9rjppN3 z$UWvhf3sFNQDvz9(Xbnw-2U1RzY6%W57&zU*wI^UHV!yS-iB z^AO|~;Knd}|1bdltHF{@#L|+tc74}EwyTqE=@VI|F2m;p1onm}UF8UesJ?ix*t1e~ zGoH5ljj1hFH8qZ+@u%Mwv@01ct*n3)7WVLrcwr$qu-I{s`P$<+Mv!oE{iuMqCPk?A z(ALpWVNSZZxLE3J2r&Kks!fhN#XZ-jA?D*N)6HT3VS0ra!pIDdai{c>nl>iTWk_-l6pWXF@TsS-^A51aXKLh-$>+16%(lPygVO`(^cBz+Y^>an|GI;aYzoZFHINDrLn_Q!wkr9`@|_ zftg0$tH=B>l3Kkv;0On^{bP#B=%(u9-N~}IEY7>ZMq7tuF25RD2nPM^IG#r>4Pxf4lZ<{x|@UhITY5PM@ssjA6eYsp^^RK7s+k?|#h5CsY15JR*CdM_ov_xZlT>jfo3O5InLoXzFWk^YR4VJea~>`j(qJEL)bw0=Bgr= z(AyhSvgWLNiwK&IYC0N5N@K}Yxq=1U^tnMFbWaRdcY=5m6M!OrI>Ud~8y`(*xI>sF9p8$%0phpYw2W-c z$101IYviPWIoO$4;A~8O->w#u1bIfOPY%ubTwjrqq`HfuX4$Tkl#t7sJfP(9y&nE3 z!WKTWGG4v8IiztaaW!Ox@?UTLUxzVh7QWILB||YZn7S`rB4>2JK1BHdm%FltqiZnj=o=Z=>r9QUwtMOy7OaMQsH4`X&L&rq~XFB;#UPk>Pg*mL|{&MQ$!HM-LCjv$00>8-Vd*B)8(GnVIvC)%Y95ojbx%daH5B3d#R`w1d#W>OJBYA6E|6?p)IHbxY$YARDW!kE|Lj(qP%Z z;fwE>p|XX9i2u;;_yP<8XR4fMoPF>H2t+3nj_CW+Q=&}Zm{0b;;8dg4^!?DuqO=TT zcTn5abDpuPrwYL-W@up(@VRodKI@k4rRruDNpT!I=9G$-KasK_xgU38dxVGlP+Z*K zuzR#G8bEwCt}h=MjYG6XS=*!XQhTQ>tbYS}C8=R>ulTnU&k?wH@PP(*bNr4K1Q*sH#8!`wlWI_TBx6zKz|1qN>Q0>);Q zrLHj`&nM6Ar|j^T|A~jNB$68;Km7;5eHos_FQIn0%T${^JGnJ-Q@K5^wC@Ezq;My1 z8Fzxy({KDuR`0T`6{*1KH{OE2>{Wdxznwzq_ip~Xsox9vB$5elo|fyj0(Cc|s&%x< zlmm9tsanK2&m&|Yf+1i6j1N?7sj3ZRqmP^;av73;t<=>HQUm)5mF3Pa553@zn~&D| zG5y09FMj(vT5TF`LrHIRFcD9Hsx1ms?G-Q35BQ&-yUtX*;d>KaB5kSJD1FOhdHSSZ6UF&%fj5!83;t1|?x+;L%=h4SdGpHWK@*8`%kw8$GQV!(HS; za64RW^1bn<=z9|+khztex;~Ks1KOYm#PZ&t-y{Zurha#&pYK9E&-rK(0umB1xXp5B zS$7;JEvhx}fOL+Gf;)sN8_z2ClPrK#GQ7kDy$>sO5|I@1U~kY+0(hx_WhVxg3la43 zoeM5(SwM7C0n7A4_n(-nF%P4t6fUz8DgbFyjYPcQec4GxMBWkp1JC1n=bqeTU-Ed} z(Y{K0xFHIKTwF%Gh*Mon_-c1(`J_xM-8s-N8c9M;mb0W+tM*RC^KifpMdJUTbwCrE z%Bkph-&uIena*zIP__5-vbnf=)U>T z(li}9i1@83pNAZYfmuq$rcD?=*i;`fnc3_G6=}bbk*S$0uktvV9%l6fa>} zro&E32_ohEbcraSAZP^p%;Yeov(3k-%dLCr&(Hs#2bLuC{Z>vZwz6LyaBNCwFhZdQ zT`s{3>+MSW;(+C&U~pTWvali;t46-g>AfoyL8biYV$RjgToLH1iYblpT@5(YDhh}& zd~VmU%FWOAmkvkquvsA&*KUs&mzI<=jKBPV|LVV->`hRnL2@+K`)c3*NKq&$3IQy= zULD*Z`CPU4>&sQ*U)CJH|OJ9yc~_f8D>hK>#!AK$`UEtomJyl#X4I-kPVWw-Jh z)4>kM%h4gyVUzkvgFeG*JG~!hd%CUj-nR9HK;Wv=eS)xY;8~ zdEjj4ub(_suK4bRLjF@D(3(S{;yvG@FIx=Pt1jA2Q0*v3y=iG}ZR+bo0rzCzoA*Q# zxovEv=b`Ej-rO)0S+p}$+TN0hRaPyIg~YGV)YlB=;1tH7W;ORs6gj62K^-n1d_g!y z9{a>zA)M*X<63`xVGBl+mRTGe9+5e~#D4A0o`_!;$Z?2Nn~38be8}d~ zy>)D3NE}h}W1eRKYGgs0TwmWrwHeLkTSalZcmg(Tn&@xLF=`AD&0-}uPn8_9C|d1I zDnZ__+B+XEmP%A(YABTuJ^9`qYan)S5{l1#bz-?U>;|tgbmmvEi~~e=s|T8pdhCCy zBKx^;!0G)|SD-0+o@-Rw`il>iUu21mw?t%@`5tC_qPTfO@nvpB_X$bV(HYIYq*sYxs^0@D#y^y=k z>hUJs6nf23yyNnXsl^G+a%Y>7;qYNk5~n&M7oc^`-T_ek$S&b~41;}}cAB5pWesH_ z2TqU9J8<#G(@!4f3#4!7OVux8a|ANMokwe@renEJ?@z{-_I4UVT48A6$SYYmX5r>G zL4sZ)aK-gZg+n`o>0~vh^?bd5&d*_tEewOsy&rxG*$SlOK2%)F1-eyF1aC><%k%m- z!ML%mm?OotLEu&oN|kjg(j`&m`2w2uh0F4-iArls=iP~ncY1khd47TgFbW$>Vf*_( zg+Co3w}tL-M=E@CrFT180T#-aY&H|Qunw)fWJS}tR!A$!C7%Ekl(aFU7lwNDK%eA` z4a~oeHc)8%1y<~RT=Z_FM9{2E5zvxT?k;ggeMt$+3whlhIUd1c7+Fk^TBHbcLCbDI z(|;>7w4Q%>d9HY`Ci}JKY?jK6FT;*zfryCMMPT8 zsP(5!^r_5H8e)!gelABdRB>@}0={z`950J0UuiL`s|rD@n_DH0ZSdXL$ik2m0w<$Ihb?Ao&mQ@%KNO1shdJSlkd-?NApN*=6FDOM(~$YER{eqsg}Yn3;|5ForJ@tjtWdm^S8(H zvb3bVXW#&>aaeiiSU2p(0yjht9C1@Su74*L?w=_w&A!-NbYlIsgZY{l0rK%F%*MX>h6#Ifo zW9@8Z=tFv3BL6pYA^!)ZEksd)9Bma)HnflM*eON3lq{Wze(FlZr!?;c+Lhk~R*@D|m9DCUFt^1P zrl8Tm?aDoO-x%{t30uARz(DzdfqMUc9&T!6ke3iDDf7u{w`yuk@wa!ihB(!y>wbjO z-f}#P)sC@B>-?3(d^h@UuR{f4^Eot}p( zS8?mKl%aI}iPBe75gCmP-o{?syZa~DxWky)7oRiVx?S-}u&CG9U%g%dtYjO~U$o0? zt&`f`gC{m@Hnjg6x67bO?0jBXjd&i~XMJrYOq)=FE1ztB$0z96-*YE++mZt)xdVd> z)P;rh>{vchJ|fUMxB5RsC4r6=zrDn-u$}|l;cr(lmBse_)x#$}uigO@F^eV{Oe{sv zJq_#H3uI-_USg8&KV~-Y#STBfxItTU&C<83vG2mKejA=G<4NI7zbt=Q*qKEyU>_d= zms*)YO9~lA(I9v{F=;+ubIU?Xc)=iT`6V9g0%kFR-2nup8hB$_`a3(Up)>v%)+qmf zp1gk=6aixdl{`gkKz^f%hY<5Sld(jVP2iQAkBfkEyFXpnum#T_LiZdxH8eCd=%-vT zc1zIxx6ud!bxiG$L<9bxiuGeyzd&f>h@r17tuQy&zBQ=jg^_e{?;ei^5?u1yZg733 z(szPBG>Ie)S9vOVb^HNcEe)V1<521lAmHaT^c27}j=Z@nl*L1ipv`rYox9{t?@)cJ%Z8I8U=Fve zI7{kvS$xV{b48NgDXqj!*bW%?N!f*^5+8Z*BbQnGmF>I%4xP3*k8g{Itm}f&8)LXcukq^0WH>%7^$VjSnWbP5IPgC#cl`d~YR%6M{m-!uwDhoOqM3z-%)8xU38Kufmz@5uN{^aW)9lJ+ys5o%K(Hl8@*; zy`Jd-{hcjtW0^lp@KI8lju`Cp6F4a6?^ENMg%6y!DwG<4Qr== z-U}aru;5kZHq+Cg&ZF4sfN`&4sYsfi03}sA9gS_(V{hf^IojzEJpN$V{YB^S?1<#1 z3B`Hrq)`JIE?-0c+IFF?qL;>YJh^csExfJ{3uY#e*E-XE(iYeb6Y$BlT=%FBM9%SJw_xmmqDueQ^p; zi}KupjnkA?!uF3&6LDFZpY_sIhT?sEAJWjYtJ6Tn;iDsk-NBXo;75(QY;x;^Ssq^; zJG0Z(5Kt)DFmXp=&db6zJ zockh3Tg?@o6a2 znX`Kxa4m2VLEiir-yDaA$3>(^MTVlE?GW=Zn>W8}@)}H2XXo*{#A>=-8pax<2eeM} zGl~>2Lb)rMj?8CwWh?Y!Bz2sQ#t=VJZ+&Oi!!Dva64ktv9Hlugw4r5kHC^6rVBF4^ z6xf|3Phq1o7QNcj@~|8sTwZj&q!E(AnnUQL^e&_wr&BrCD(wdSYFvF-ZOYqK9|F=vB&&cNz+9A7 zb6)TNfy-tqvdF<+sAxJ|&k9YIhUh|-b7vI0J;J8`z>ZWKL^%Dn4MbypaA!y@-qu}JdR>LCKEaPCpj4}^JUogW zCM(w874m1orco8JHBA}%X%86q7;s@rt#yvTDj?&&CU*AOU(_sc5e2L294PD^Sv z`d5(}!FVN~-eMpFvpfKEl&YW1E6su5!Itp2fkbUcGIuolV;{3#RH^7^;ooL!1Fz!MeF9+s36FO75Uv@Y>_pD8DDPH~|#OoTx-_xa-D zlHJ7+_R3fwDiJln1@ws>+P1n)jB~LnJ*wzLK$C&O@JLC z9XIYZ$(IJv4Q$Akn(y+IsCV4Tv=8?5W4-P-s69t8_G?3Pr6=qp_D=57i#HUoEy>7w z?B|ab`@cffJ){xrnY+<00tp`}O3(Bw+m-(6bZ@mB<;#Z`l!?Cmi6PA$sfLeld)#+^ z`UgHBju^8Po~uV4>WM78Ijsa>fW!fA*+p95(deDfCu?#RwFmq={WD}$eI zEOQd{6183aI#fvGVPbo(h-#(TRYp@HZDdYDdf8<_9UM8AI3?~6IHtY z#F#2yPtnYdmsUT&NvBheKpa664DvXB?UW4uT0l8c2}5phxI$_BwBOhu z9=74f0*SpmBi$Q7k70zSR2I7OTMwP&N2|Q+SYWME#+0zyv}kW{h4H%a^+4@>Ou|dZ z!XTm}uy#7j8VZz{5a8cJ1I+tx$5V;iy|E2YP{7S2vbLM(2oq~QP@|A4q*11im?`tA zgR8$Y=K*8)D;NHfb|Z-w{U(WZ_AkKEvx>0XkJN+8=t1Xp!vI+=WcT2C_)kCZe<89S zY+wu2rV0h+^&X%aJ@W;r>i0Ga8q1yW50BPpRYHN6F0MTH2Y(AHr^A#%f(@hn)bzdn zm65jsm^K1_=Vk$^9VsfV+8p2BWkTjJ!yl_!a0khU6Y@-pze1j;<91k%q(jZriqQ-Q zz=pPiYblU3)nH=flllBB;!$rW?y@+gX$)8CKi!ARXlA!=2N4bV0Cfar^!qs&ydcuF z{!aZ651aA|1&vwe?9Ij5Gf1;8QBb1miUTZ}*MqBs-_;Tw-v@6|4iB0g&Ja+ir&Zf_ zw=-^K)?;(}t{^+k$j5^Vh9$HwUPz-cxxtV4WYTv3jw=cvXA|?-B6ztU%P0K!6}cYS zS+~fgxA4~4oxoL^wkdlvSBrGa!msdV=gP11}hdc9eEFPfs4Gy-)DREEV|ln4LKP>1Z_BzS~u7aP|C$m+@87Ikz7O_bzQl z=GhXy#86!8xnka3#6J3|GV$~mz-P+fsj##6gY~5d5TV zWZ!I};Vew0upK{NfyA4rBLE3n6bWbzLexqKhp#S3S9%a9`<{f?&31cFO$zpzAxS1k zv;yq>Kx^}k5Zes2!*`&S>~#4%lUof9TmT1F!4#EVTPU@>o}|q}i{|sigzr&^-%VHS z>Dx9K1d$5AdiCnJdE;phyVt482kZD6mmS|Nk|lA;kA3mPs<|n!cp+Z4hTDqBcx(@B zYCjW$u$|1dTx_jyCZ08y*XCpG>f^!uROdq(i4X1PDUA7grA_%R@9~a%qWO~t5AIvU zYX6TkK$i@4BS3CW%VWNEk8xH7$8@ui;i~ z`4cDF&q<=XYEm|~F?~5FjGt4b@-8neuaOgwaNd9WhAe`+J(wnb?rG!E=bg=yePVpmF(Y%AnQj~g5UE`H zA-sRWu1D=Xrd{JsSmm%L26O@g6O&+Y?LpJ@th%N!vJp_Gd5eD(tcN}&z(X)GS<4?M zRJL?4AXXr07<0W~({E)f-Tn(``iSXQzfeerxG|2~z`(S{vPY%;M-yuV@wwEjdHnRt zkIdIAC93c=LH(vbGT(m{>oo`2Jjq2IPi1P8-#l*;uSe!nhI-nWuTBmh`VV{Sc4uqC zKJ1&ti9O!L3B$y|U}SPE8SEea^0u$svh$G)fz567M$1}%pJ)PWvPWx);O`x5{oGeD_BO#5|b^=Y@=fX(T; z-h=^<)hZjm1FL_)CIPie{TeOYlr-02w%!Ty-CUD~tgIc4m=^hA;MyH|g~6Y32O}y48M|9s;CwFaNWK zBcH48`QB~MoW1FLxK`Ndx6-D~m#czKH~lhDmt@#!L?OdN5DX`IZKy{A+6rLXdWR4Y zoYple_kh%3X&_~g{Xc`;0Tv3zPwdib8(dt+}ld z>@mQmYQ+AgU3&^Y5);JRw0{1#gI(Y~0&D<0wO)DyIH=#F;1(n_MqDe&8&DltKPA_| zUBG--*RaE)B|n6gbxupQ;d;Vi%gxPQdX{$P7LiTG^BTHk?T$)k(P3$=KRM01j!TR` zS#59pD!i;1j7*?xoRI}C)FIDUtvdBoGbyIAS)AAXl7;D4vbU2-Rjjt! zt4JL-tNtqAc$V!mNP|c+fk%_Uk4A|k@6o2>J6{t-qgBp zy9s&n%!s@F?D*L*SgXpiLKz8W)d<2OTa4r;QOKSAh)nnG0gYE9e~0?UDixP23V!y^ z$OdSX)T~}n6F&}Gl5eRnkkug*SpgG?7KQ2ScB4AOEDF`qawiFyN2`DrAPk2=SO2U} zuULPMY$d*9kuu&I_}%8zlb?Yu!hWSMBqnAJejZEivMGK&>0+yZ_kOm}%3C{2+3vC4 z!Fpxx+KW|u4u?xxF%-ft=f27ABcF=U1eMVt$%N}F7I8+ z-%*-zvJU>1_2Wec_rb)2+nXz?VHi6+RjKIW2dU?7lc;mzKvONPIJ^cIeY#qosL(J4 zW`%K6gHamM3_49gOD_~Nre3%Laq5=atxI3`U{Woy-(pF08|e)S{wsWyJY8&@KE0M! zqo2e6-UKc0o#G$w%2Pq8LQ!x+unTnSj2#)MykfaFWN!ueOh?MlEiLW!hcA2Ysg0PU zt0IySoAYw}O_id%^T(Wgv)d1weW{QnFqXsSVDLQQbKKoXu=kvX0J8hTBE{(d%A}`2 zKI!VWU>ie~@^-=&kO#mP77Fe@ZEhMwPZh+(;3q*(To94i>)BvgpU9M6?Ac`cxt7+K zw&lW$9J;SjW&QLcHba~%&v_&1&0uc^63UI62It|@>{*v7wWG7M&l?j$73}?Fh!BD=GOog{}vw; zbLd#}HQ7N{oBuKI=|gBJ8&J3nd#)a@BM;&ZPu!SG$apelIw%D6nYXwq@rh8eH*DmxFOJSNp6wmb?r+-T9Qy>$+tT7P>-2z zQ*EOBSW2EsyL6~TD|+hzgB>0)XUIJ+$tw(Y${Wvz*Nlox%M$u6Ua4Nfeo}27_-*9U zonL~0l*|!~BR@jqvnatSHxlmJ(Moa9%lN}ChlY@r-?Uv%3a>&vyk+v{5&sX!U6gWv zALpQn0K*E>**~o2*dprEcF@7+k0tjo1cl0d{akgdz5`m^=fr}&+1paTI!_+24NLD3 zC#w-mvl1~YBe|`zyD^4!4O1RNN5*|0hWDtQC-k?$P!VXfz-bi%ZG+8-oA-nQ54~3T zGO>m0>exjPUO~06?n+uLW3#vFctAc9SN>d-;L>5}(@}8yDNy z*0Ji^30VS$dp$H--O|6z^VJg(_wrZ2r^Tea>(zM}GIC8HY;ze+sVTIfLi08nsOJXz zYZ+5?f{qRvOTY{+Whk(5RK+k{JeZ#AOUM>JbuPqsaPuAhFi`E#rEUZY(!C^+X zR2tmL`tg(#UqIj)ZUQ%cMgk8x@ap#$c)_#_{W9ynrJ&#|CE8#kcoCZTu29{l$>h!E zJbJoH{Det{6!tK7hs@6BHLB4xmvj#;OE-BuI08Z+Ha!>+kmB4K;y|#!U1n^rRS1>ThukHP|}7h(s<+I2n|=MN+al)u(zI&*yr2^!ov&vYK0 zsWQwuBn?53{&)pOLO^|HSzRBao7fgu}43uZ( zp%QM3lvYsXZ(b^=nHY!{U!`|2{~J{JnZFvJsov81Am2 zIPm;}X#%91N?}?!#P)E%#KZ`D<*U?iyj+!85pk6R!B~XCO`S!}pp*g!1CwB2O4M@6 zogdNMfJg7ZYLZEm{-vkfd5D(DAQJ)+y``>J4~C(K0~_nqHW$c4+oMtLu=mlwj!fvo7b_$oI~J$AD?3*tz1n7{ zt|k?aX;+m^yWM9pnNhlKaP03%hn{hj&Dy9)e>p_wdFQOa(D1>9l(_fn~^jh z!sHpbPUq^bJ|H9;A3Gc$pYQ8pLicV8TE8MzB5HrB-089lQ?V;pee_^)K7;#=biVfC z#-sxY8;X4ok_1Q)PiS-$Gmr!^L>>K>SYt>*xbLY1!EafsV;6dHI{zm+W`v;=F~9q# zJ%5Vl@OLWs<%WxOHD?Q)ZTQ044}UJnQ&Y|FJ8evf3sZ*bKjrd7lS}3b*-dm8BrwoT zmoR|62qXy%3BizXbd;IBgUDS%g#veoV;tts7lS)2W?5C~;(2?QZtT@Hj;i&&7Wt*= z-bD;}>{cIs8#;IAs*qgvn9ztNcsvPhT`1vEMNfs89+q2zO=Br+pQzB)%fzB=T(fUHUcA8T?K})#xlcp(Z4VkO%+vX~FXCWT6nsmD_Nvro>Lm z^-{#vEHP5Vj?OO+)tSnx%TAnjF}(UtsAl*kIX6oj)u;o)Hzhq$Z1uvpKfz+Xuu4-Z zAPZb|%Kg$BbOs6qLYxHL_K$VAPZ_5xtlHVo(hzb?-&l%}G?fG<(20MS$mr=sK76~O zWIB-!B_ka*EyXrS0Qp`%@b1$6RK{nUWi_OF&)iD#a^H5He%9x<@TgI54fud1gXkwE zd|>ZCBy0!@kf-=6oD{$Rkmo|saS9Byv@(&ar%(B)hp5X-s)04N4LC;?vn5DtAGrl| zVrIUcok~ta8|+Hp_a=I0_ZE|J#^l4tgF}K$SQ)YoEOkzF$*K&gfH1yqpR(kW#4eA( zjJVNGWe0qYRoGbO+pjA}3e}coKg6P=T;@F8A{I8X%K7sS8O?^$o60&_itHyhDXY3C zR%oJrOpWrt-d;c0bV4`0{B$4|q|_Q2oNbvoTjll8{}Qz+=Zkk9t~gvQ(@%)oX%ACn_JH**02b2)N37FD?Tl;a3&Z0M@h88oKFg7}*U{m!fEIERncxlt+|=J%`X<)zni z#S+-qtuBe*`df>>8#aG!GqswV7GJVjX}U*fsP6A$hDnkf#BM#KvRmT~cA|G*VmmOT zkD^UoE&TL<*!B6lX))P4NP}r>YmcmjdC~_-D2vShfcIGHNKHdL4PO^OdsiTmnte81 z)ji-wKEu3?czLMmNQG2FBnb7n2=Fcv&o+c3;X))LWT+iWV7%jUBW* zA30rKE~+CJG;TZ&f*h_23JMy-#lk(pF1li#HssUi!G();P7Aqej3b88iJ#&x+z#2} zMh76Y2nC+=&3)4v*aUL zmdEHCM70vl%p7`GdI_L=zcD+Rv(svp5hPZZwV!OUN4P4`OcJ_sD^$JIx;&cqPE^BZ zTV=EDL1b>-aOlj1qtwVwF-Vi%x*|IdNG-b@(S!oSc;zD|N~LS8A@&Px-y}=L?&&kn z_hF&OaS?>4`0S5Xs68K`7vLeWWi-_J$t>9~*f&?cYEM$Mha4F39!2*F7N30-n~aI$ zbit$c)|L#?Xb&X{1oYLE(+hL*0b$+u`j-*08udmQlW*gm@Ju;ukL?ik!UM;oN zj32GQLi6-yv6>+kow?RZ$0CAt@LT~puMMj6%Ve_WkNVSg=J4Nd;`hDI$8?M&?&Nv86_#DyprHma)QZ$qW3FJJ?wgvCTz(pt`3x zU8zaLGQ+Xi%)Bmj?*Z_GEOKS+)Mp+(XrsP_O)Y1L{9smu->Cny&W?w)D0NO*xkWn> zwoqVCMQW13RW%39&D4WP>1ka74P4tr;&m5dIFw{R`sMN+zE31j822AvTnYg}~?Ugbzn)5wmm(MGsDQX2bF)OTOBE7UHnGe(vtLK`2Q{S^ULBMhM)DyALk< zRrPZLc9mBm%=G%SLc+p!pkplC8Gr|QIY06KTPErb9`9Wq-N5(Fqodf?);SSZnGt76 zEDl7@I}_ieii0^E_jdUQYT^UC%GDC%aCt0Alrp7)$dRHAE{(3bG~Zrth<9x$<0js% z>4BVpxoz_oyB%yJseFn@$cTtdC8FI-US0W=1Rkdw@6~p+ghW1Pz6fA#N{@rjmU9t7P-oP ztr-}R(HZ%g$(7g=Zra1d`n1u<75RSf@Yas383|ckzO_oZI`+@r;C~D6cnshC19NjI zh8+X~XgOje6=0T~V>knv0BlB8J_HY@Rc*4z)}1y7}@f5Onv zm=+kuIMq(f?LGfSLU|g(d=^(#jvI`X45FnuP{YN*A}Ens5<8mjhPm>x`Zg;B9zETX zWTh`29{{noe6v#3WOF^0Rz@2JqmCFTvaV*hr-gsK05f%lVHklQElh&KTL-@jTd3U3 zo1neu#-dUtd%pZ89hq{;;>A)>w#9*8Mi-T`#)yT&Lp@e&pM)y=Y>X}t?fEg=SYvL@ z=|!uZ9z$J<#O0Dmvvjm!@Zxox=*x4&6K@lzCCc}y>;XqoYS6lL)twq$T zu*kUN=H$$gWi?cso?h;)VD{;G>O%zsl{UQlxl%?Ge%oF7RBL_-f4x52h-fy+P@r*0 zBxE#>WLT^7xdVA@kClD*&2_`(=)PoRm}0&w6FGv5ot+x=rY!#V?6ct`lm4H)Bjfv= zX4jfz$?Er^wKIieiN#%5C&iLC(8iCU5)!_qf781}a@?W~KE)j2ilqf>_L_w8`qhH} z*>?X*4P0YW!*-a-^M6BQ0G!pr`M${msmB})4$u7$cp0xV9x1}cP8qnMTcRBAGkfT} zZnrQ&cqahnN>d-NH-?KC1OI*dZCmH*o@5x&mVZCr-Q&FILN*ID{aQyWZy9PHNutoQ zo>-Pt?ErfY=VcAB1xf<>-mE@1>Wq8JpjWF>ko4m2TDrK}d#^qho_txl3waY&N zlcSVT7FSUErF7~C4r%swZ#Pk5`RS!oHnVCBze(ydTwIHXP+mcP1IXJCDr+>u<|^^; zLCLNrgfNZy-Jf$f`TiX4k74-@JO%v7Q#cvBpg-y0W#l_%gz>4o=CuP5o*a{h=SoO> zN#qk47i#{}R70Lql+SY?O&P{m|E3xl9)(PfTKUwAd=6`^S0BPT&L-L!LXXedNq4nkF|M14C=l=zv=N~=@{aHWBD9;Z}x89iJ4<^;fNZ22Lw z*0aquO(bU#{&W6@fYOj>Q*A34ZX5KI9NqHr+>M5`fTDnP_r=PDi}n0Bk;=ocsv+k3 z+h>Y3yU|j%W>ZF((wE+slkHLiX0#m<6YHyq`tzntiLR~TKI$SDTa>Z{4DAfCD0hSh z;So-WoLC+Dw?xAX^RTm1R!oTowNLxwNR;1&gMlUN@p&~hHJ6q}s}N4RO%9bDEm1_q zjLs`DxkHdM#yQ=-6b||l9PP>w&Ruv=cXxSW0h~{HwJ0ZIq2{`=NkpLHo!t0UrWSGuEPxGngM`XM2( z7|c+1ZzFhz_pT{YG>pUa324Ani+BYoPmA2?g zHwa=U}-L^WH87qAOyf{dw6X^JHC~7tF9*~Im_U>dOoGPap}b@|g*G)VVq2$lqpOh_ z_H#q27Gd~Tg@40`Bj)qD=Zmw-cR5^Rd$ zF`yp%cBAQKY~JjQP8VD>J=rRXSh~U@0sA#Cs;~(RM#kvViKn4qbYk33wkWY%yeywi zc~wvKGe00U93a)l(6YHObXyb2TYC?EpXU909d5yZvI-M@AN}YV=!x=RS_iFy1R*&$ zysvO2G7w)i=dG8#=EwLT4Q-FBPM!Usaw1M&iRP8HoNW#w+m|YeQjLO{8QsY5a^Ea3 z^B`z4c>LtypZ&JU`!!!mtD17%^*3~V5}fX5UNI{0`&36;-cLFFh&4`9=<@Lfqsc1I zNRE24v8378h=*H`LgL)x;@v`?96XU6k zMH`J5G(jk;j?z)_evsZ{K&W&bxXhyR8yrh`2j`0{&rGLfVF3B##O3iOKP(KqM~dK& z%T1F*^5LO?ZYGaaZPxdmL@w(iPj<~_N7vS?O7HZw8Xpr(xG>J?q2BD%4|pl?m?x1I z`trdElKdVaRQ?GJppdBTlRU6I{*y&;7=1}h8@;s)!fkE#A*B2B50 zEb@t5tTG{ZpZr+`R}-gwH}@N!(Y@)4=!m5W#7M&5o0Y$M`-tzhj2TSO%}d~pF3>Xl z{<7-8B$M|@x7xPTTF^MKZ)YIGL*#^XQfM?V&~R$`Y1cbHIuwM;>IX2>Fe}m;Nwl;) zUl&_16YU^qS$~?Mb@UVx7WbKn;NL|MgB42lohxw4m1gOONFRJev%C79DD{cz#kp*} z(8HDPDV@G)0QTu2VEk}5Jwwp{}#(v>8!6#<M8m) zuBBe1CC=B)HzWl%QjeII;wt@*B%j*by>OH^t6D0NZ4A4Md>+lbrnEbw?LqYTIR3$m z$GSeo0ryM-$#BxA`0{f+ugepWE|t%dA7S<*f`*HXSF}ohM9`_j8`d9*o)S#n_iyJ{ zZv&IOYG?v=(BC|qLu?uGc{)*RC!Kzaz8mWW;g+}VSc8=J+Ik#@eTiWfh1#<=&KfG5 zN1Xk7Viykof)olv;x()kHk4=0bi=y1yf2DkgHM_F12Is4{y?D~v=4iJJ(qf;q5)Fa zuZ@avZtF}bn`lSP(l5Kf9Qfj;Go8<;PpCRRq0bOJC&DbcFO&&u5GY$``;Uu$IjYGe zY6aR+R$TR!dU6SDx{)_eQnOS9s5Kb*XNEIWBbeXxy?gw0DDN(c_w4xT5RJbdK=cPc za*5L*fMZf3q@kr9Asyyt<#<3u6m!2rj_{IikVD{^DG#0*%-;baV}#~39_)!|V> zmBZ`1IT(aTDBn3M^3wp4taM(<)$x;&EuvmoXstT}nXGK36Xlc1mtE7SSEsu!riqW8 zAp&^pjWsk1j1?=Pf(#FG)*UzX9zHbT`27G{=)lHUiefi;_PYg#6&83G`~nOu`u;p9 zVgMU`(Ekec-tT&Sy#yb>6^=YMVm9-5H++mM<`FYpt9f&eN{-T^^#X5C9N#O>zNa=E zPm!442)BA)oALmXkBRU0N%yyy_(Ij`C+5mhT}aZyQY8&<33FFju@yACG~XpS;nz}S z-GNn-1v^kdW>!0jWbthlI39OQ)o?5|Sd_AR#T?p`?T$-5}lF`JbcS>wUj(Ef))y zmvecZnc1`VFZMoK<01FF!{K<1WWVO^ToK}Wlf~Q}b12*P#Dmf}H!P4>*y|9V#QPF) zejvg4RqCSK#R*?{nf;s*n8l$K%U*h>p-(F6As*7+k2-DI%A#Gt@YJj)hLNM)iC^;i zft~K5No!xGZ?M1ObZC5Q%}1b8vSWXUN9~88L?LbVqEjV^AoH#huRdxV^Td$jpPdAQ zDjDxfy8ofApFSczxRU+;JYr(fK2!bHqh0exO+NFVEZy^EIU)PK1FkG!zE8oef|!}Y z;40BUqA#ylu6jz+>5a+q_YY_-wzn7(LP7aCGEz+GoYWMHJ&Yf63x!SP`<-9o2+FMx z2;f^6%ErbG4ytJIZh|odoI1~#R-6H3sM?tqb@JQ zC9Ai!cM7UaLzxX~#3`(vwALU;(FUw!B)h_@Vm%PICJF$+#d z$R4S-$Uiub$+w;h_LXf{RK28ml!PKAHDe(QxliKMna2qZm9l1=92=seRPEckoO062 zH6jixj3_Pvj?5N!%GBdH+~GNHzg|AP?!_gar1DAToF2U4wcut??)3uAM_2~!EmUx3 z(2eUiK|$faudzf*GHFa|zY=HcMWpyoEf0bFLGyxzD~7A3nfgiLJ9gQpQTeFf50}I3 z#T$SOKKrm2-{i>=opB9PvbYfW0aTR4YneYb+5ohUw$r#ZwzJhbC3;4R zU8Sc|8XDhvMn@6Bq_D1=D=c-Xg1pG|g+7orUNgs+5S?Bpdk+&e3446)7zLxVSlVay z)|g?dw(F9sp*WgN*O+CaK*g$VBNE68)pL~$ZmF^?T)z- zAQ!b$znV9<^j_NJp)$IUX)!a*@U%d^QNUwa%fD^_S2AlcnDKkUVw6SxjT5bS*aa1h z7)yxkKhX^_u@U)S;17J0B?YqQmxi8vsgCCGPtFi#)O6GC#+rg1*_D)9`LS9@J6>=1 zV!!CqTi8R}Gh`dL0oyTDl%6qZ=u)W8Uf19HS- zh0@T_ipy`N)bC?iRj9t}G&!=C=r@_6@D`tEHD$z-jgg*hGwQ!S-sgn!E>)W&>Wdr# z*$j$r@@EClxcX$pa*LTe#_=A*>iR1o{+t(agVT_$3I(O?n=rxGnKl4Pumg<6B3z+ zFV&i*vY4aMd}u=My5`PeIVDe_#8+{uOx9dub3~`Y86i8+VpT zlTR?z+?E1xF zM{k12D*~6>=B?u3M5k`&p^ZV{6vt=NA!-3Q0q8~OQpc0VK}W__vC?feW-;v6d?p_+ z-bROEf3tbQV5Dp~T4Co3uqJ8F=z-6G<@q{r)*xe~VAEJlHk~1nS8cDng~_<#4H{_{ zY1ciwX(LdC)98V1(uMo36o-7iCB$L*h~nyp^`Gq)e^9w#EvEXi8PsEuts?&d2-Sxr4dNOnaG>ce>~Y`$ksHam8$ zhy5WYWqL>eENZ0VC_+;yshwrqtl16Pz2bH0;*R>0hCvUMe1_`EyM3}Pc!$y$m*v5y z&KC2EH?HFMO(IhHkpKy!V&#T&4W~w@*tL28R9Lq^MG#{VhGFO12YMpzA@b?!W&s8X zF*D~qo>O@SP{}5iii@k%h>;cMTSZhZE)wD5W=Z;WD)xknzCK4uSHB?oQ(0QimSadX zAya!sY@?u|snK?Tj-q5adbL#{Iiz*EmVDP&11)kzHZ$$|<;r)@&olJ25$5VbaU`DT z+;`G-Y^>yI;SK5oh2w-*emLU3s$-K>q1mV53`{PwJ{X5{FQ5b?_^ulU#!_jKsfkn| zp&vqS{Vy~`>yXNKC6FA_cTqXYN=vw4`P2Jd`dNEH0^^+)WX52wm9{BljCxL zyaI2(!+7)Gm;n7|fy1wF!|z9vFUx}>R}74R+kM7$5f(&#=@@?Q>5{p346nSen%nX} zOHffQ%wjO8ja>WNBEWey!?)9Z_{Az2CHgjRjSr4qckgN+=Y5ypGs>MkK&Sb4-Tl^a zIbPNBunAa40;DGL2HBHBqafyy8V4)w?dB+RqqmJg{>UYl$COAWc%XS$V8#SUxn zSINO;?$_()k<^v{3s}wapC~03!+x?&0@E+BVfMepF@>)1&-2EN&1~z%{Ez zuc*1iYjwce6XRuoinr3lw0D;e%l+AV7OAkUE1QDbd^ZIs-C_Lw16aQ^!ks(b@A)|u zTi8SC)cOL8$94*ZQ8ib^YuU*h*e!Y{HD~;GERrhBQa!3-baN}smD3H!jwiM1tgD12 zXm*HP`C1F{R9ISGVYb}D_T^r^9BS6C^?+W{G7|vsR+t!%ocu%0{Z5E|mk@?(VbgYe zRo~j2j*5C=rdq4k*K0+@s;-6d!6e)GY#2F-Bhj$HsooVR%P&+Mt{!2c!CxxFl*}n< zZ5dUAB}R>h3==~_r%u;=&M5bbOK%Rs{T}FtF3OhpM!iq()R8=P@9Xd+VTQy zPF$iF`#VpwDQ61|iMrZa;M_BkSy?48J>UP#k#e^N2d43%-I0KAV%DE_|Mp|2;V@F~eeKEt@nVy@IL|bpI)~$K2bQ!J z1nEf9io}{a7>6lq0NoULKSyk_o(M}+Yl$4=mn~4s6l#r9f?T3d7S_?hy`GH@ZygYf z#wTX`jdW2QKx@7OeYKL{ztIK+9BaI&^2gz~$ofY*V`Lmv@4tS9jlb)Omo5oDHe+La zC1QcPzg)L-@!D^*j%?jLZ6QI%i%fr}(~BbtU{+z46J_L05s~mXadKE|@V*JuHyu|_ z6?*%F`o?DU3(T*S*pHtAT;zil0xG!)C*PhoB6Rj4Dj9?YWb-5bQ;CUyh-sY8Y5u3~ z|8t4CDMHej5S>{qVGX?R1#e~QE0#)vE z4{}3vzW027^D&S5(bHdo4T=)fW3=DStsR=T>~(;N3e|C?N6YEfP*51JJ*X*{w}lB8qA5x zt}>DTtTrq%3eQV*awx)9D?*aU~^9{JHne_qm?hmN(MuIIo}jBc;mFbC((Mdv^1q9gB_NnQ;&ZB3-s!Cvs<7 z8`EVX{~mOs@YV&xw3nBPcz~0jL5YICy;B(C{D8d{&+~$J>QColg4F= zv#b*#(g!{z54iyd19o(vJBIi}dX^#mk(qY|#LgDOlAf|gX%7q& z8NVmmHFBTC+d^vY5RUJj!?WoHu$`M$uD$32`-w_n_DU-A?lZnhevH>y>+Z)^fN0mR z|4IkRT z!lL3SQP3jwXvJ2Q;#d+l3sAYBqvvh|E+6#7re7b?OjT{0JYv7cMOLqe4vjB^mr9_Vv`KQG?5Dt|x?g6?@-6j-v1;ZTR%bqmWYsh9|yv*&%-%QCj6#)>X z8DM~cy+a7Yd_B;)xE*hk=evsInk2hM^Qz3u!{18=Tjkqf;U*#9w6VO5$s z0>G`ECmoPqk0uEB_6UwVHn7>zq6>3x-U~%R7xvnVa@TQ1;m@Oh9jy{|f%((P^3PHP zJ3x;Tzbd8-9L;_lg7aNIQ|u{MmUkVKehK{XPpU8Y9V^MIt9Ak;4PBHDtm9n&XaQhv znnnE*3$<-UFcY1az^4hK^4!9`)ENK15X|94NWQ+_zKzX|^zU;{&_yw6F!dQcM(&tn zF7THS7l*PVU~DRb>e?HcZc;8I4q~5KY$YWn6d=ODDjb7q?%t27RqH)Ck0cKVOjbeq ze7!pwyl|uas(N%RP4T|F z+dX}=p1OH|-`j247bm5IsX})IA3rlgPg6UU-#`z%m#)C0FToF5^L@y++Ft&7tzd_L z7K0!p3SYTMHzB=>daP(U1AJ?L^n%ix7K%|1(ka$}msrhANxb>mT|)&p5S;jIaY%Y6Mt#;r273x}l+V4Dw`__9>#TRc z*LLW*(9^$uV*W3m*$TZCS_vcb|11IoAFTCZE;N8z!6nt1)(YhHqPX@28!bD33EPs# z`*_skfpK%dJ$T~+bAF^3hS~oGYTaz#_P9^ z>wKTscai3#<{!TAjqP=IVC>$W$PoseDp55x39E*HA|U1U;=PCmdTaSxB zxp&Oq!={EzfMP*|W2w#TA&Gy0L5ATHQW=DAGpf{}r4tNo=CqpH=1+|L0EO8h;xrk` zyZ7*Mf0#a8e(p=6#POKr}0=;r(*>%H8*{6f3Hi+R+Ai3b$R8azmb;FZJTx*;Q! zn;|rl?+&(KzG{)EIVKFc75L6qKx}nG&0HnVn-z*jEh^MmAKU|+>|Sx+_V03I zj3Ta*rhq54yYl+7H(u4-s{~ghsk#iWE5odqc(aQtLQlwtk<0A6jM%EKfiUK;z~h1& z4Nuv+QL?8$B|n6XVy7xNk%8 zRUHP>g@e-fwA4ST`}z0PG<%Rjx7{~vdwEnZE=`bZt>0epMK?5GB-ZNEDI;}TeT#-= z{J`ug--N=!ofpKWcF8YBYnxCndi&-!QZ&=^Qb=ianTAstlE&w_+T-UlU=V!qMF50h zfS)~uRslcI22B5rOwe8BJBv^d7u5WdaB$_DS#u}@PtIkZ?lanP(bwoRUI;VI$g>~T z21VU5Q-cx7h2P%(P+Pa1hkyQdD)rHy$P&%rcOimfOX2e9rekXmBjKevPaE{`{Qg5> zhDwCS#Tw3H+5!ZGmt%O+(oq(h5f3gOUeXC(6px+KDWe=EdD9q3YN3$P(ek-5*L8d>YthKaO`mC! zk9)q+b&??BZdSyqpN28z@-m#;CtWINEOjR>PkkdAbXP}Hy7NNf&hxf&6=k(Q3=3f} zC?oaOZuz#I`2h~`=p!JTwVD=@XD}MAoUZ?n3km#>U=C+~r`vnc;Mnd(i>&=Esi3*f zxg6wCj+HtRv3dp5%lG}Q>oL_o(p%tW-w(G|3ATm{wibIH#3CF~{mK}@Ivg(vWiY3V z-}VLg`#qERUxh#;tsj&YKWQl_lzg`_lv8!-YUPj!2AJS=UMRZtYWuCDa9v?+hpw_F zf9V*N>h}SCg0H+ zv}xdN7}s_1(I?9|naw2%$EangyS64K|NVg4pa_R_MB)z{&bS-iWASrP2+K zAf!gH+_sCh`r)-^w!jJiEz1_dvcMPfJ`|8m6F?E;5!qp~G^Ys}_82C8Cb^a%EOJAS zR&?5I{2#`x$Ee+L!X#ri`xTcrw)r6pPytn7e9#rTSiqB$gX;^Y^Q#CaErg4k>jyx! zBSp)9LMHNfs8YM!%r7#XPozj4cDz)-i@zmgqQLXrmZy=Ne5PjX7iB zq6vG>)cZ7Y!Ij5Bk4ae4b~VgZO1QCPOvk( zAA3Rj^Zzn3nAi*knWW8@dgSEZ$CLnee4+6Mpvv;sPP^pR=Np6wh=?EWUSMU*#SZyR z_60o_6rgqoTC+NXCJ#i1be{3{GE2aD@1Kx_SWi|IV29}Q+i`wR6G6ioXzu>NSCd&t zI)#pb@wTwgDqD-u##Y&CuHb>k$&OzP!Po`WIhb9W<`>)hY?_+@fUdYg`Uxh~4Lrk&p|z=4&W++%ZgaYCcpGlay>hp+~s zb}N_<+~~3YBng5-iF9r}I}BOvh5=2nwL{}RG?wExL-ws-r)a>je*%<5=#9jG*6uC{pTh?(4t4aptbzQ3F+lyM@g5T9fh3^6_xHa@0GTPKx7NwWj)NTsQa=5F z<8KBWqRVy6dhDjHR7oGcqXIOrbtN?Z2bkNVe*PJBKs^!bRCs`ci;MeH=gMF>tr$uv zheXa&SR+_&arF!5b}B0@0oCt)V3Y5fZS~wgA|sK7C`5#8$kB&Y0Ti911h3*RUI#t2 z6Z9$^e8>94&?0=a?zS+-SX1OOo^sG;3T>NTl2D-`nDaMCML~zMKJA03e^U^F!E2AZ zzsK8k$?+e2$r>A5ItNIbJA-0HCC99_t)C^jT`uQ4zSAjlj?EOxL*W7}#hc`0-IT*P zA=~-Ja7_Iv>bL4cFfqx`fb0yLl(a~%Dlm*F467%ew}H+0OHgq;Zx9=fE1+p4^u%U| z>kDnEJfeJ3Qc~Zi1w?4T(rfuc^~+K0J^!tX)Wc;cxq7huq6&p4!)$YrX&(zoJz*qP4v z#r*t}OsVEo7E_?RC#6^5F@NnHcD?JascT6!u(w2!njH{x$_P6(zJB2U)``&Ydy%`@ zT5yC!?(w%IVdiV;@U~oxWQ--tf#-fT@YJYWv=F=s%P&b+wfycRXwOz&=~6v)Z$|Za z_@?DfBmm%?i>=K8Psif$-@ZwLd6uGT!@Ki2YG$c$oK+Lfa4Fs5<^z?q?)JIIHZI7n zT`nA*|E9svZ1WCbMisVr3u4gZ*jIG!H-*oNhH9=7in1%gZN=aCLeM*O(C zL{^?kFXbO^5Hw04p~}<^K2apm!8alf#W2-zqUv;I?2f_BO7e{3S69MFc=#=qNuxj= zG3i_yrWxIB_%zybJhe8y)ccTz8ppLU?dOpko6BoK_^Yw1~z^ZgGsI zBO|{QwrAoZ`pNA{%ongZ3)qD6;dXe`p+FU3Yi#iJ0}?))jkp%&O~QUS9|JQ%YHBAM zm55V0-;(R!2TkBQ<44Q9XP=M?yv7HDK~?cy>Y#|suR$yO=Rb^rikmwIsr0u($~SmX z(pn&6fZ{}Ovhsvvg0NrrQClb>JBP!}FS1^{LW_&C0*mAq@2$ zX}~{8%dgZ0m&xz!5FTC-W@D(m``&S>MCR2E#b*!Z{blX2uy102;(4nfTkTlJ*2>@hJp<23#Q!be5ZzDn~h5I=Fm5qaRo%8`qg3f=`o&%ne)Dk-$3wx0VM^BEZw)>EGmF^EUiI902iD$v0?cN%vQ zhnprf&rIAQ_3fF6j<({(kU>(Dfn%s(96w*8Q)je;Lf8ERv-I5?>o|gOxzu<2l1a~S zy@o0e-XkO~bt*uP#^y67Jf$>dE_`k^{NIA?W?F~KK)DEEC>Kd*47NZs;`Sai@qR*K zFN|G}9O=9EWl$6?Q0Ycc=7t0qz)QtHiXwYPL!41+bKZy~GDitLaK5`C`KCXA&Eno} z6*V4B3$IESAkrkbkVafzX#wNz)7?VL_Gr3|zP0qqcOG-!-W%OvjPzrvK?7!F8vMv! zUHMASi#K~5KuX!xUIsf+zrxo5Ivkoj=l2m4judjg#&4=W)iCx}DM4>0;TF5Gm++6y`Due6=5h&3w7C>vI-_dmKWd{Dw0wo6?R02 zazJj1P8dE1i?jrN+QE6s^9kbJnIBBPMN@L@vx!Sk``8L@I0Jn!D^OL31Kq6gX7+}q zf-Y?bFJ+E!MEGi2e&vCU0J~D^eP3nKD@pxOV1@(%38^iKv0I2V2fwjDxmN+C&_6Oe zMeHO%F<6t?)%9j_74ygTAkLGJ8hma7dXvqbtce8P^k^1*! zyiNu_1qI~TPY&JDwA}U1d*}`%_Z~&LmT%?_8T;4f!E)c_w?kBK)|K*!~aHo>N1?`cPsin_q#A}6g`Ow z4SN);T3@l%H0(mxyk9FaC!ZNENxplb+4^V=a>`$q4pl}7?8;g5wa84RVTHa4AlVn4 zCqers>-lOjAZ-gDG0+pR8qE*sA=iZJe=~5Z6~(gQ zblaaw>K?UJ5B}iRiQDOMVv?t2D>`otinp-P)k4KUA(3N@`>n7KEO&07>TW@2zZQ(u z-cQPnQiqW=vhaE4ResBZxH*+vaUE^xAhw--(;ea-n`fkJrcIzHUdK;(>6nReEeOk! z8an-n zkeBjPLE)_?CI>bHH~A0jDe-K25tH0&Q?YW^C|rtNm0c@p&4XzSYzeVUpV;pd5#zuW zrZO|g^d;n>Iy_0;7H(|@`16(kI;w|u9W)4Y{ zXPFgmBKhS8f2Sd5wD1OigOK|n{^;#lqM=tQ5E{&XgEl-Ay()0<0>n9iuJ@!Rc3jd| zpk6JybiWV8KT>Ipb)$P%iX=4*t||^=anUPr2#J%9CT-;%%u#ImI@yj+0S%tSLa+Bx zBFRNN^U}S-^ru~=A9oJ{<<9*EU_yKU#+k~I1rR37J*jG_`@1uk?S1+4g|zDVm#CYM zJ_U4vL$Z;z0w8a8F!;#->Wo|xH(0I+_-*?skG|X>??2oO_3}I;u?PCYu@X%*pqHbt zsxBhfs{*zv#&N|ZPTE@FUSA)~XPp_YPu^i3zXlUZz)#`HhFP(6UmFj2$FQm0vzY1k zu?_xMm%ir;PQIWBgTWZZDQ}ued$JmQt}%Eqf#hA%V!4gdUcY@qX5*CKLZehXFx^w3#k4#?s7^34de?2b_(Oiq41kI zJQvjgt-}=SNzZDC^QJ$eX*ECKV7$YTnEZEFx(UK@2f_((2|jxA|B~&%hfD3Rpr$FC zI5$H$88`IKLM)e``2xV^zW?6Z{0d?Db%WdKlx)_jExlWh{1y5GP<3c`#nt zUiZ;|gs4`Jbdd~aFwY^t_JwDL$s4@FQJ1}^Z`9_~KDLHp>;8D1iXhXP;7hv99z*|C ztU~4CI@+o~5Gj+rEbl6st|z}VZ5a$1Q?i{`JeB}9L=~zQ&|`+lA$?3zeIird6I9>0 zzom(*{W#epXB#a8M3)wri2(j;Uo%iwi+D}-y5ZH)BVY!SSY=6!?LPe4LI~AM1M^Gi z(-i!bGuzqAD$0oY#k7sZ#Vozg`g;0=a^cHjLfEc$g>5=Y@b)ReVdAX7ztqRG? z4xtn}11GT39o7pSp`V zJ`k|K{Y{M)GnQ-rwE9b%(2wI}x`~P{EWpUvtv`D48JU=;D01*KN7z|9k*u$|P&E*? z6&(Pz?C4SWhYugL&+O#E$$Lb$%PkqgDOFkT+4Yb`yH;Tqo~qSmIP*U6e{0wA%b}hF zyC(72T(&m#@#%X0n;6xk=UVTW^FF`Vn|fs(pt={YE`M<}fvU0k91n#AjjLltwd96< zi_h@OOvmQ!MZG)TD>s>4b^&{*)x8SPNca=6`EJog59{;8t(ju#9*uK|zTmeyU|D}E z*-aG|t{9}SqhoQFl{0kMIZ#q=W;_=Cv5_#T>Y8|CI8Uu49sUyi-Jt>r03!!C?D;sb zx4h3Ekc``vuj^Uv-F&M(R|Gl3xtCW0*{@*wi$8?2ALy_+*iRy5_8R+ZCco-~Op5jG|gWgR+gR2#ks0NVbO&IL7~q1|aCz_L5PI z!w-C5OBKo8=m)bFzVLS>5SUo{qv7DlRIEfW8oay$hCEGHMIl2rSMZJ#KhC!{znm*i z#0`+a6WavSRl&gUO`=+2QmW^;Q8z3ta}bv;DjK6BC>EzmacGC8y zrlyRLF4{60m1XVSf4Vquc)ypCUS3mEvv9wvObT*-?XE&YnJCn?{5@GPnqv4ICZv|e z1A~ZI3dI84v#1sW7@+EG{VYbk|2*Uj-M_DHen8Xc2Qt<}D*p4gj<2OQ2nPx!Q#I{LR-xPhn1-O6>IRD@4aW66%0)qqS{KTvTU_#hiHs>fA4eG z;&6RWJa?XW`dc!-62-tzx2GI&zXn=F>dvM7)3o7teYlwB8_aog1+$CebHO_e3Xsk| zSVvRDC(ej0v5YZ+$e~{VH z{S)Gm5PL@F5dP(b>|w_7_RoVHLRj~>mhJx(^cCYBDHLjOynaay4T4av8tH@_H@`*L zUtt)PmopCY zAvuL-gf$pB5QpngUzgMQO;maDbVrb2Zy+k39rQo1(Trlm%z$FL+lfb6wKhq3Chrnd za|{<4oOC8vKdH$I!&cg%MhJx1F??nkA)y{hna1CaVAMv`c%dV zkQr~K8{$&4j^oX%Osxp00bn85DmZ87KY1nXMB#O?hzKwywJgv{9>pwt?+O4Xj5Ts< zhDBi(#m5b-zj}du0=Ywq;1$;6>RnvfZL7v}0W|ac8P}Z&V|(?{&N%bu#+hc(7g6$G z(SXqk)!;Q7xPX4MDNs-d6}vkbet!oR*p&5(yvK3Yb6Fy>jU)DuwV1^4j^T(z$gmIS z{*ivQyTU12!LV8i#;r8IYRwgnI5GS;_5g!6Efn52l~a>uz2LeV{6f7x-#ffW*uhEL zjlaf>1BcI|KKR*VxO}NoYdQ1+AU+E~g-MdanG=>1(@px5m+PLGmA?XN9D9S;%@Zo! z)1tuU#i2^aNu~hM1%Mr`p$i#qV>Xj~6t6x-o5lQS-9oY>-lw!PC@c{km4*z?2u`Jm zOXW(9BJq{06nsp&D@%vXnUUExpvs6dRN)jm2}l;jby=KB;n+%SQb>SoQhRT)-A4A4q+fI zm_Pqc0-DqhLV#24lNRwtLQn4G zDrxNhy|I9tv0%kdq?okVb;TY`buI7oV6Ru+}J2X5}faYXD6wX3b%%FwIxvCH*Uv;9> zaSw-Ll(A&Cnk+e(I!xZ9cMnJ&$9`_DDvrEUl!{N{-?2eVRGpgw(wY@5hQ)ez%hwSg zhW|`=TGI%zvk-7v1uoIzSZs&yMHlZ&AZ}U-@0y%B9Zy)mCU!SNNf3eEi+3j%ExviM zbWKOpSqXXvSlLZy@-r{or|JYXX!cYDfp>@0Ht}jktB<}^7te%FK8__i>c@<3=Lj#C^4yGE z6l2c!e$?0DU4tb*Kx>IXHxfY;9XyjM$J7}2Z5)%N!_TK>*t(dB5%;*l_2v6H723&d z^pbD@8RaerWqtqs12LkBdc@1o&n*7ZBHv~Xt?vfM-XVg);yFX)MfXB{YX(eQjBMB$ z>bN8nF$+oXZI%>Uf1>Lu!lB=M+ikJFjHdrz07L=~V6AfRk}^KN$b{qnyode7Ju-yq z5yx{m1r#o?8|f^US@s>r`k2FrhiP7v2DeuI59yUX0dAjGH?+fb3(x{ifbh~rypZ=r zNO5irE&*v%+=uyktjju4aYBML7{cxtSqdCnz>kkyp?}gvw68G2rjYj`y9We6+rnum zViPsl4zR|t6snRAi=^%shZ?jzF$BQWqBz0m6kJ;Z4Cm(=ueGmm<9bgotF#Z&!9|JA zmQy;bn)7ZE{beLYg?4D^k30iq4H5kr#83kE+{5NqOS#&}1BTR1gBgZiq{1FES;n=s zFCvncgU;j{k#Ts4MbiPeE)yc^qjf?Z@lb%^ZFsPV6u)kbn9Xv3ymAO%crpra&h}|A zrO0O2={+u5myW3%w^BDwqK2o$k%lY^3MiO~Ay5A{(K-u5P>tHaE|I(s%xziqDSGJt zSuq$?7<)&!YY$kdBi+u-5KdYnP_;N(9F>*l?+C;5d%b`8r)H-R!x=PJ!kQ(u>vC-N zMqU>l`yaWcUk%OvBalvBE-8zOgGNn8w<&KQaX%31!&7XrfTN!jgjopQifT`elZ{VL z<@d%Fu0M`gyf<2|h~~U8h67y1815ljhXcm+9GzXF@7m%V4#A`4C?7rRA1q$0>A{e< z0=_Oa+9v=EGx~rEzewpf$Lec&pOr56?kC^+GwX<;5N=u!vhv5W_eN0a2YRO8WX{)< z*Sl}|4yq)Vg|I@rU9lcM!uEN1r519=$L$tJ zx5nSAVm9IhZ+tMPQl1lfIo60eGu-5`68Cj|V<=AoG*Nob>iG=Xs;#vZqCueNG#VB` zF+35j8qK)|nvpypTqq?K4xc4bbPx4)z8wEPa>2QX;`F>zcI+;ZBNUJ&nhTwNEt=JfHK@U=3fV4c5#)b9~lXLb1@{W4>9>hNa z$X`dC<`vv!^-1Q{rc*DG_Z%$C9QJ|7Ne|@AEY5f(`!J$SmW*-yw;n7?1@)R|@}Q68 z^i?C4=idO)s*CNW3+^Aa-uOfARRyU;tU1yi0O4Z^d7Rc*1@AUBWW8#5Ci9-Ej`I1N zdmkHbVroGfIl_y8Ky=7KbcaU1qi06~R|KfiL+l1Wi2%DiBrxm&h3RzHg(6S#2Yoct zK|$IKyJOLHo$-p4fCI`U*Ca-IApZR<2O+hU(o6jr?%QvDokP-^P}kZ2mA_@5vh3I_+mh#?Y@%10vz-WiW+C zPo8;C3M#1bP{BQx+;ls2)C$_B8QR}vg6NO4*v#tF?EI4pRH7ey0zvm%MBqwMSyW=A zoExaXIvzCcjM47dQSHPDQeo8HUAtPPC^I@vVY^nw!2M0%;cLkbiMze2^2#m)nCz8;`%%!jzlXTR%;G0*Ccb za4hJ@zkm+SJ^_M}T-0Q>G0AfGdkk}>bTxyt(4`MC+XUteI3he&Kk#EkORO168R2BD zs8E(@6Y-37E^+5;(__@hH+OO*GlHI4kU)hWOVt+F zoqGsT?He+_P(g;!HyfKxl~4n%@&SWkE@(CNBGz|Xu%;NxD?BoWW8TQ~kd%m*q}EON z8(cWJMPq2NP~G2-+y$Fob=+s})=)?1;5W_chT>5k%T@@x3b|3kF2_{GJaKdFBR z!dB2;@QcKFvS^`~#k58oAScYVg{Ma14oQ zBNm-OA`!)_`>ezHEJ9eT+&&Q(uZR0-=-B+ihXIkm!oot_ zpP(GKw5PWlD#8KBPknb0h|aoJ4ZJ%x?^}&*jW&OJ_sm8o!+G*7_G5iM3@7J3uBt0F z{&zC&Kpe8^jZ1k{>H7fNZ?oNE>A*1O-X<<|$SD|LqM?-Nh_S`{DWH^?5At14AO@nf z%emtokC`ZYYD@-#(X7=#?0>apG>_mChvC(bbn&%}t|(tz_V5)F{LDq+@2>(T3njXL zmD}QU90l|$kn_l@Jqloxx94$IH&n)N2wzT<*OSuBO#Lk7rpZB zDkM)BI3Uq+Oy3232xc`=^3-ugNIVVeO>k47PXB)0G$~D53=9>EN9}$=>D_#Kf7TwDyLV z*{9X*F2t-f{h8%VN5|xTJt^sAr9*|3E3|h4)C&Suwj<&Ft=#z-7({Zy!s*iI=Datm zfw~}Blqev-D&wzUgUiUP4`xTx^5b*rgXTQcsE{SOD2o9_R-?WfA5s;ijLrdh07G+` z?EpWUL~Sq^E3f?bpN>&^z!KUMJFNF1K=5~)FYI6ly7B9U7xC9iT}_hVd5L zrbqWt(EyQM48#4O*S00HvPXy@`hec-f$@ypm211oDV$(+zi;(u{LfXx3s?T0vspBX zJ?J8~cVkfu7NX_WzLoBcU508_GV6(Oe26UmoR;^U9{X=CE+pqN>vjPPqb*Re_x{0Kas3aLC~HiDH;B2wPBAal5Oiv#CUd~!A7*j)6=A`wH0 zKOkSUHNkTHXkZqfqZE zaC;oI5T_^KH?hp==@1q)xP1*3pN(otMh?wYQK+SLLAxfAjN2~6VcM(k-LMc;@woZ|Y8BO?FI;w>m%GP$LzwhhjOA zi$h9ct9O$Pc>E;2XOT1vAROcz4J6fcDm6ODzzU))u zr)LN{p(BY13a{I!GVQ z%_JT13aMDNEB-a@#%cyigPTs}X^bQfNcXvVnmLy3-tXDfN5vDxq9OnKYu24kDT}RixJoob1 zQs&9sxDL;cv-uMBJzFm_O3?RM4M@a*hT@FT*bR4ln7$11TCZ^_=F2OqajS(v?;dbc znzfE|m~`_*&3X$om^BN%3L`wWze#JXbgWe_HjtC%h0wXIR921n`Cxt0%}Z0FC)6p` zCdeUw4Y@kIE3B=pElkwT3t#K^3@X}cw$dmrd?VbQLK}*CeO1avJ0nTQC?quF@anP? zBl%^w!ft=t779WX3`QbsVmVj&1ln@jeCr|eHdwovXoFFNCIn|DnvJ~;Wx z^5e!>q_GEMf~wYy+kCUX_p+QI< zZ1*|je_jlD+vnvFRn5o6Q!L?WPF}B;>gC*>1Tj~q=fqw&;ERwA?(Jb4foLP@yK~Fxp83`&U2!6wq{HNK0dA0>n-ip*7TUh zYKZXIc;QtGbE?Ri=ZQPRQgARz*T#o0U%pg}WW3;&ngh?fbAD7RnM@=cLp2NyZzwYq z5D7Xv)PLhAEW&H`Ru)awC-IUcOm}M;CaJskeKss#t$r{yt@P+Hty-n;HSIIl{D_+! z{%b2iaN*FpCe|!wirIqD`>1DcV)PVC(`eJ%7g<~%-&eo}$|{S!)XtIKIzj8xjc8F#i}BC1@s?+2+8Zn8`nu?e zbT^g#?5Pa*ey`<;r&@W5SjAD;9putGAQh#P>Yuv?`iz2bD|;Uv^C`YIDMcNs*5B=G zCqls9r}tw?Tt44ByRO44-5jE|7?K8)#4prVM*N`<15PrJ$>q;n)n5no*W>x7qiN+C zDeW@8MGz#c--{agNw!gb(K5~@EvI%RGsc+6Co)F=t|51UNmG^wEaush_v8$F@^8!rH)}Rxk=p(f*SN23dJ)`fuPKecxH3@rLNe}|pns@uVT)ym zscbFh<;r7?a@cUpkbBApT?gNIw85y26%t90|7?sIh8HfDEFZt#lo&n^k8#;)xvk3O z%_byw5WX$`IW&(9`ThTG^+7Dc%Q5hpd+sG_`#x}>oUrZX|FQMeVNpL{xQd_xq9Wze zjevkG-6+!C9ZG|AHyEf$r!+`Occ&s8G@OG=?7(|R<$UR9W|8Z+e?46A($@E5gwsX{m$I|SMt=1*4z`hb zx|dh&l8k?LU$M|Cw-0i6K_L1+F{^77>oXX7##46z0^zA|`}ipiGw!MQ)%DT1;!%-M`+PuciuV*!O&YxI<{`6fovwnPc^K z7y}D)sN1}BXZ2gQbCwIwl$JyLyT=SV>7lbbjn2y|m6aZ5eXETEP@xD{wI|HWS5!Z3OtZgRS|rfQw_ql}A8 z$Cl`W-#_a{O}YLYt#!iY3I69ReYI5MF(ffwDwZmO;PBYP{7WTl^!HpF z^ujOuvE!ytuwmK75?*@fyG2xwUd$N?>?}u&9gHx?$cA}c--ea;3FQ|yY85mHD1TS6 z6@g-7V-xatS9L}+rv3hH*3#C-=m75?EAmd`tyrAf=OAUdce9gRc8PwzeJKGzJaxI+ zz(&VOOOqjSFw?92r<=x$I}PlyuKl~=7|3}QCdBmQ*1^Cmu9OJbfRWX%v^@H6KuC~u zN~dtBmwkj#^1oG}+MvZGJAbXY&iJk{ImGXUW;$t4M(rlGJRT8U{)y^ zDeZ|c-(e+*BFpf}qYUP>4CxpO5%A~}_Z|_cM<}kaR<`n9UlDk~q)laYD#GjCdBQDr z;c~%M^@LDmbP4W178RvJ&0+xZwG_#jQ!Ys9I7h+&0q zS^K)thl|CqK&`2#6;Sy)d<*{4#<=?crgrPq9~6w74q>G!9azz>lB?JVaoZVafuK(m zyg>k-%Rqi+3MG8U$wr+^l7=9@if}`*kOLITi`}|6}N{a+oi>D0ng}&6Y%WM z&JfnR$$$3C0o=wKRI<>%`cbfWfC-22UI;PoCoNS(CU?|72~dqIs~B1LiNdUyY?ZZO zE`2FD%BVA(=0h;C;3vB@I*UaD{R~%GdDQFfBAEv;HmIIkFHOd%OG#ipUxFUn+lrWH ziBD~t4Xvk`4Gnxb%G`g+wiBO^Ly*bf2p3BdUZZbZ$JU&MpmqDlH^Fq9YLu#`;|qi| zUeGu!A02Ba|R-0ehqf)vWzi-btp`Sywri3Pjya5T&m@*m;r%-j(J>$V|h>IVP%A(`4ga(GW+Al z`}zB;H-bn7cQbXLk$%UDjioF|2#)Pa_~4os5H46*3a`- zyrKqYJ%r@qfs~S&goP;;G77F+`4O&o@%adKCHcz;jVpA5^ymB;r?Ky|=QSqfZwBTu zwvH5>D((=~=lJZANeo5J7ZfnE=ocr9IhtjB+QYS*S)Q((?$@c_JW`c>9`!&|C$Yv^ zW#cHIDgW4suufwxLQ*Qtenj^Wkj> zHJ=Xr8`=Dta36RT4rXNI-dnCYt#ZvCdCjPfwuPLtB-|pojyxSHcxjZ;T-SU@Y%C^n z(nzj01TU(3h>B#YTixh5N6)|klcVE4aE)2w@DxpE(a3wtsIC$*LbSLbtG(T7nV)c9 z$=CG&iU3-H>>eD)$XO7h?SItUtfr^zMb{JEb<5O44mj zC#{f%#_vVgEenm?p^!hIVy5B6Lwn}ctU8X=%SPWE8l#5U0M`FVh=A` zvm`VS#VsS{X?iz0B$KZ2VWnLA@>pqU zh4q0dPOD7KYTO2H`tO^?gj8!x&LOnHiFwayR_omptA;d28%LU`vt-TgmJ>d@u?<1n6Cgz*_^z=+$Tz;)~QUxu|LG`!B zcc8T1ziXm91Tu7bWh>z$LY=OAhSS-}G8chqy~vlRI_nmJj~H!r_n>@w;jlY5P9`!k zUvhO#cTnw3YVAdR6AGL!?d^k+mFn%$HcSq1q<+k7XOxe`$=h9J6_v=TL~hm6%s%Hp%yt|o2ucAH zi_5qKEcH|3ybeGp^1t5IejlD26%G0Y&Kx^lXGBbAGpcbl1nm!5vF0M2Bl$ z;D9AOxE@+F)|fez-}C&^jR;a2H0Vi-MM>?JoVeAplV6d8S7d$to3i-{`^uE3l=!8gtYJ%-we!2|CIpl4CFOiOojfb# ztyuA#Bu3wQ`}%dd*(wncbz$P%ygN&_+@w~gkGeP7iBEIZP{KjqlouhNeS(^IyYXy+v4vUq8j?Q7BAZ6JYD!zUPq*iI0n<5;89q`Nh-{~A@g^t$9QL92~t zYfp^Yapb3Zx|vS(5)RFxg~nJ)12daF~Zl?~g=bva84 z)<;Zxq*S~(ZE@yA$BJcTE#`HdNy*=zaI*(TR&UqfFzU)0=t}G5o2UxtRKJ|Huy20k zI5T~1X*fFz92J!XF0p3h=hsR0+|TyEO>E8hR@kDQJy(z+P0}ew5FROS^iUfyR`5hJ zTN!6zBoE$mI7yAjaR6ELxueod85B@j!{0@#T5W59{6p=WQW)Hal6fh#cJ)c}l+fxA zu=q$(nMf|MPzy!>^Rk=!*}z=AYlE@yBeSQF zeXQr>VMA{MPyF2e2Lfh`$+4Y);NS*c=2QxYGod5ZTnk-o?qsG@3Ae2U*$RrSF-blb zpK&{jO!@)r%F{M1La1j75@ZQgu6?(}iqntLw?{{l5rH!)!fNZ&ixf=5McUGbUuAS< zS~4R791uBMM5GS$Vi3ax8u4z##V+1&6z+YYewt8zR7OI%BJ`XqVB_K+=Yep)Kv?DV zwvk(`d`wIjqGAqFitF`YjmAYQ=gE)dDMUA}py9tB<2e^qaG#hL~j zMyLt`P?=qGW-f(!e<%bSJGG{8xLIIVKd z42%73jJXp1lmIVHIXTqC_37TxCp2}opls${gblG7#cdC8juaZ-ih|z?d-*Csj|*^s zhF!@G--HV;Mva@+bIO?#trGr>|2i^#5>Mjv(P}7gSm;IKnMFiK7c#d}Ntw~LI8w6|-!gvjBH_~YscTQ&C^RUYtkRJE`h-znim)`nu28^!j|4OIz?-mJ8c=#wTrv8F<;l@0h zoO-@cT=0NQP&uH%j4q(~UwbJ>T7G>!?%PYtZ+M{4@SLZ7@w=4h8vUnI)83_sJ3>Pr zhV*SCHz&Cmx1X0Y1a#vrRvnI8$dnb($*)R&z=0Cg4=c#(+oX4ELTh!V*k!FW8Wl;# z9c$djjLYLxhblxE#SJrZ+X6;QJwlN8-OCbj>2n#uJZ4o3o@he+?RG};2RO6j;xZv? zJu<;fwfdC}`vR%8M!Fg9vp57k^EsPobU686mZzn}-anBmjF(pH_*l_YYe~mt!kRO2)H9bl}|(SJ)h!sJ+Jd709=SGP_*jQAB)Ffhv-e|#~7E_ioH zZtl*%`)g-6uYhFxnn46T_NC={ip+e0X6#74stJyu77-C4!HP-q4+;zW^1UhbgjiHV zJxrU5EiNac3Zs|;Lx zeE9vXtxTpkUbi^!@wj%?sfOYm=q0slV%e+DK$WdrZQb**=l5C-3~&vNryJO4u&3v{ ziJSy=sh)hu8#esp|E-V!D{u`GZhf@4S_eB3HHxkg7xUv&N*e1JfVJsM>z{qxG_gM0o%7$x;>&^m3y9LOUe(|zEN2sU0_Z2qUzE8WkPxD0;7@(qXtaSV_DfW{=mPM zo<_IahJC?|UHJK0l(3)SJLR8>LeI`vRZPs@-9n5&{q?G~__I?W4+!YmZn1|5<7BCh*j^*14|CU)G$PdT>6gmF7%=n~~q%CWZZa zqfhHT@2Z3qJ7S_=>g*)2GojoW%l5W4B=$4jbV1#ry_T+~_ty5Yp>gR>7c}X?LdpHh z(5Cy@X?}2mLP_EJf?cARWbN+34P4cWv~GstYFqZ>E&s8k9^yx${yRNpmofjY1exFZ zqwF7(>T-u&Zt>j-qec_=Xb^q&#uzbSGz?yw26(8zD;zdeJd=Q8A$&@_83s0lAW-AZ zs?D@#C$95$b>NcH;XeMYk8eY|G^!;JpQSl|yhGzA7Nz+I@PHIZ5}-WcF)Itv%Q%#b zTU0>DqQ4NwkVI1P>Sz_4Ot*~BwiSX~9Rgr3ZUHp8Ml#x=Q>w+J7xA=#;!#Su%CWUawbt~*7 zu+^4FppZ0yUnDmr!>zQ{X&x8;{Fl+{6rJJGG%VRiI^NsGL-60o?JEoep?mZ8AC3nM zm|Or2_^_ZQY8rcJ%)!AP)PzY+FzuE&bPQIH`6Pd`XgY&B(UMebbV)ug_Y^{h$;Hg%V#_f zj}4R{dn;VVb^8l0_8WYiDBV(mgGLVG#Me>OEmtKSe?6JZ0Ii|N{;PEtZB?yz?^pMbrC9hSwnJD|GxGL$|(z&oU=7nyuXt(@xsruQd%Hhdelai zKjIl%`c7j_^5VBuCF_L<&K_(wQv_``AiS+Yf5JAQU1nl zA*oOi5hD$uzWYo23%O@^u)=nZI@@DaJHuoxxf zhbpgJ6~a%U7zp8tf&Ja~b;2pIYr!_W^wiw_M%@R}MxL8NM;-8X2HC|G{!^H7_A{6F z1DF$)Mxd?@s5JwOZW2n(>Gg^&8Ertu7}LG{gRsauy1jD)A6rG7hJM1N-`e+qnND|T zR9qJadsn>a@F;(WBkeNu)ate-y1h7?a;P3GIDv5qbsj&92>i(HQu6Fi_Kft1R~Z4f z(qt|0=0D-j&Gc+xiFbo_(c4DV=`ot+nuG#vdJHUrlpOg#aScx!q{aHscj3=3i(OYA z7~HmIoJ~ThVBl&zRcxxMGPE?@zl%@RuYcCazZC{e*`A@<}=**YH|cA)4Lzi+5t zn~m_RM8x`0l!{THAMiu5Nu!~KYzs!-bvoC{RHS0b6#qiXs}x{}!Y|kWQFQ6kZl=fh zLLwix;uvRW$?Nh&k!PE>O)G_LggcdF1hp-XD~WYb%3;HoTcG&fHioqR7jL|qf?_im zmXvLl>*{bs3Ylyh{X0^oP?nf(KP%&>)jmNb)mvl`L%7t95Hxm@7OGGYu6tBa~5`-0aZJD!5956y>+Y$6c9es&zAmDJs_sckT1TsSL&e)xA|5EJv_K$ zzW;FXd0_oTQuO9Kg z2xZ+6pwSao2l~Gj3*cMc^^UC0j=Y2Pz;SC??=R9Z#@0zi@40IEDJ#05;t%+HG3z!eA?ap2zbaDk$sAxO!q-LvCWtIL$qj-9yxD;#gYTF~^ zaMj59Wpa*Fy0f~v9@xJ1u=J|ci>vUR?pifxy%aSdJxmA^zRmVzuwTpzGA`l*#fFqx zgjnWHdWM0hWWG}#C5BLO20e*RVsnq@4huq1|9X~0iOFm&_-kwE=A5I}G%>4k>zMwF z1<^|*_hT@SLoias2bo|?!Y5diJv*IJc$Lq!1;W1Qx6FYt4y=6Y!6eA26l>@9oH$Qg zg?TX}85m0KoFE7GG>t_&9&U3F%|}lEtKMF?DIq-Iq2#%uOD;VW$Yt<@C7U~9$JS7T zlOhEVwGO>SmZZC)MdOD1+(-u^ms}z~v1EEAdQ)K`Ag8e`B` z(pM&w$m#cMy8C(WrOJ_{N4b`IP6gySi+}%xVWIl^YBr+ z!J)zH#VH*60OzU@&I47IrSHN40Wvj3iw35Gf-3XcqgNC?L=2jA*c1DXB#bNje2)^c!LC6X)gAPYE_30m z4Y?J?>fy;jJ@IppbfXT(`D=1}cyhcfh*w<>F|O*X zMz8)v2&6&)1Jv>Tt7QI&pS&5sDkfX!^_27`#GD>$k2Q$HcLkuZD%R$Q?lFNBD+v*G z_o?b(Ehd|{{(#)K!cwPtTst_6x#d@CC=3#vH9tL(!()umZRwm-$<%%_`R@5mu)d*n zP1VZ9hhDSTR@yEy$@9Z8p;AGVo6>IF&lJrWflk1LNdrW0Ma$ z>>*n*?p9dT_#aV>I|V=ci5$_3_Y!OEk5cZeaXflN@%fLafu9)+zD+Xryg&Sr0EACCBIrsv%Ug>9My8`lH3ZA;>qgSq=$yyjWGmO(F2Eta*q*fug!iGCe7uE zW37y(t)=1IQc6I{TL_l%owk0Xq@>)2F_!P>M438@H}K(-k}@|x!X+Zg#c7i_JE=)# zcY*V-jCyTZpMV5-w377NAJ_H>&8D6oNWG$!_ z;Uo8{uMoP%G`siiGY`C#F*+wgW0uxFannAWRB?-m42-@7)e0SKZ#|}Y0In-BiAR0p zEMt}jLZo*WfB2c%$d6QRl@>4*Z2RUDb_<+!{^tIAj?J6IQArt?>nAlZ(47;D%mHC6 zC1kx5_7cV{3nZR;@#db#G@xMj=5Uud<@fKi6CSh5FR;~pONY;TxjAv1mY?`G;dboL zXm=C%JmkoFk2G-FWaaplsZBB|wla%KA6z(?{|`*sFB8`Iy#3`-OxCTBR{rh#T#53C zZF8CM3+tZoL4ili8hP7NPD&f`TE$bGPXRPVeV z_C5&lK7^JkO!f&gP$mck)HhyYb_X4^4u9iWU^00tT;taN|KC{*`%{UIPiY{I6 zA{lch#H8rP#>UdFb4a|s6AzF$9}X%_q-wo~pb{veb}}Z&Xr%P(3;RL>qt% ztvFTpNwNwT)`m-X`0%_qnb)uIs}yTylmw1gjwM@d>zEJG9@#wwyJ!s^2uZPgqyqvR z6ORrsl@=6XUkn@6<8MIaa{Xl(%L@efvXMpXjbEbmY_6f1tR;W60O|Nl8q4iJ&TRl$ z&E$0`K^CV8KCze`e|&#vuqrNTp~)Ki3A*?@ENvvn1E|M$V2n;Gb^G<_Eb{IIuhrI% z{u3eC4#-FFYNqS(}#0b}36E}JOiqBmY~k~+!;H=7(gJ8_u^ z!ivQdI?*YtG|LIkSXG91$C4oQ>TDH#PRf;M#bpOGgW`3El>wE_@nTH4MH*Mx$mlf{ zGbg9o(ca3)Cp3MtUYQ1Ogx@r$%tearD~|*T%HyIXe}S#v0|U8bie_HjnO4&YPxBUe zKZz$j7yovZY4Xf^75L;}rDt!5(0nOt_qnH|W9vHuaU6Il7T8h@gW|d5R=`we-2Jvp z4R?m}5)a|clQs8A?u3x|$zX$m&%MTA?y%}^Wm99@=2s-bt{=4hjkUW4G>sEIx3(e#oPUB6VqzFzPRllGt4|@71 za__$e*k7<%mij;a9r@iNl+hB2fkSYzh@Jf6cC~Lts_n&|<){2!S26dCdWm{rs$74G z9Y)pVu|*w~J3k_A^?`9|_-VuY)t-(BWbJ0gzbQ6?U}vLhy4-z3$U4yE9gV@Tho0C< z){3ELmCT`8>{Pi~mQ-2P7n?SjDBM9H0aV zE1<0>Rd~P2<3(+FULjDTTStsF$4#x7Ch~f-I^i6+l>tg-w!T4017UVlIQtl_LWu!Yg9QH}^N-B`qAZ%S7ckwF+BNR|)IAJMZiJD>LB+5x(p z7YA>NM?&_N$Hal+vV>x@F;(rFai&aIuzx#I@< zyJz@XR5D~1tsAiPMh+s~dmpC8$VVUUO|JaY=gBey+s7#0kJ3idYXWmZ#tOdal!~^t zYhF}6!F9!!g7j%$Fbgn2rKsf8+A8r08M(X`hmlqmba!b)7aTSC7$dQ%%#3`oQ;romlBCAt{#8QY(A5|mYVgF%ecPo*jla0OAaPBs(9-ap+!?>m zX`TNqS8-{4mLcUn{!~)0T6)9Qz&Kv>IFmZAfqCeVg_`QZDhVC|LDplhx4+{H8>J-| zzx~OnLXhs#kVvfNA9qP(&%9(}%uT7G5s_HC<91{yM1LK}3V z)F2s0bv#>QOXY$Ys&jthFfS{7WUZl2(%>l5FmBkiG?*-4H?z#zof)1VYb>*BeAXw; zxTS}aZdGgTjztaf94^fiWy5SB&5z)=ld|BG323m5h>%I1U*Ti{c=f9tM*2>jkX1Bo zNV2`|r1Tabb6s15gnWItt>C-1DJ-C)^ zK2v8rGVZGfaOCqScccT=EmWyMxT5bi?(C_l=KuKIb78+YbM?tZg zNa$t7W_noHrGa)CtgSPFd*o71F8{ae^rY$GNA=d51o}7260#m}5f#s=z zux0lC( zK*efNN}1FDi&Rr+;rv7QlYO164!(Abm%APY`!;@^u;Yc-)>G%kcCK!nF2H_8Ij7wR zRhCnRPz0yB3LQOvx6>Pk7>Q)B*}@_He8zl2=-x@GzM)v~K!8o+S$+Hur|I|4=n^o@ zPu#e@I*&l9RV(~x6C^c51%^bTPoJ9Y+_4<2FupN%O)Y?NfN*AUFts zVHL0Za}L*Eue&2Tjr3|9NA2z{0zJ0Xi1dGfvk*y|)mExpsQ;0F1`QS_XKGL>ZXe1C zo%Q@c9{odCr}T@`kS_sxWTX7j#Gv<+o3)|CMF;T7MT&{hGJKBbu8$(`|GtM_n0 zuU!>^bpv{&j`qYIYcMA&HzIGq;#&ehfq965`~mVdQ2e_C_crRH{W-Svt$>t8{gh&d zY)pQ%bUM>gzByrg$~CG`Lk`@4u8>T6QtrGHVx1o!hXXAXuw&1_`fN?paYwU>t>;<##Btp0=BTh9BnfYbl+o#Zbd_Bzc z*oa2$BN+^SHU_aPenx2BVyec}&QI!xzD;_6bUf54+1g*a0ftQ?`t`tDSIfDBO6g^vFhB0J#C-@q(r~0aMCPP5Tmts`_zs z^u+b*)l@}AMa{uUf7TG_rEm=OSOjq5XFtSq{+7Gf*{+tVC_?I|Z3`Hf_1w!p;F2|E zmF|z~Dc?o{5MP&@AK7lSx8E~ngg7h`Le{)27~v*&dcD*mYvgnDK5OGt({7s3wI3p1 z8-tO+kRV$8m6N^egr)I)=I?8R;{||LVR9pFD9~;B zhaDE=QTIIF@AprbbsZ?X%@1%c8O38XYRvL&hM}`20lWrd{#_B zO>p`5lwwwaO}2G?46$;dRo*1Q~T4m3S~&0XTM? zTkmLP#43)*tAc6`r~|l%b3uA+zfi3k&vlxYqbU|ipu5|w4!+`&nyILyg1W_e( zlIoq<%nCeRb2o(9?C#S|+~rS5C)D>Sn18GgTVbz1J*4 z){SOrQL=({zkkQKbTqS>VKT|)5Mt!mpT$E9;5#;`D7drnHDMnU;m9vD36yRrD?wM+@^(`~+xGK=;yxqt+2r-W6X6r=DFGwoSD_lyd?&%1S- z6LxQ*CUy4i4Nh9~K4&LcLqd7|k?+@dx|9lstfJd$)U?RBtFDkEeZ zZ=6)i=;9~0yq%j0t^+bV+1z45>V*z(|IR>hA+QDCwprH7Wi_SICwNu{REZftmLz_R zY%ZPv&}|6=<6)IW(*!SXgwww=6C-pB9@ z8fN|WRfkgr$j{w^ElvV&I>TLpDMjB84?zQ2!J4Yl?nIbgJk@(-S-s(b?Q)YFmR0eX zO+2&*W3TJ?Ah)qL4iO#4Z`zjDtcOX+CFl3kV@kiVYNxvwhNJY>B^{I1Z{bPH1>i#h zYC(Er5@$^$`Onx&eMd9i2inslO0hR;vlxDTd#b}*eo@G`RYvP3?J?rl=vKQ8*Y_}X zgcvf?)?YUbyrtGy9YU{u`gvO`+zC90pYJ{Hvc0@R4xLoYh2x?PTNS#+0)F~2d50ld zNZLZ?gJ=+6Zz}kKE>ax=`f;WLa4QD=P9n7~=QZ4Sm;4lRUw8r?jEw#mll>nZ3~($y zen5y}^Er~WJ6p}+n+(L#XT#?j!-Zl9bX9yDB8}*;iaQxXxWx2&jFgxAQ#cXpE7CB` zmFeHXK7Vv;%;TEfBC+xl#Y~}{n^6o5JKoJ!*RuSsWl6=KNx1Qc0m;Hg6qki4|B9HG zFLg%FdU!!cv7fof&_6Tx|E9nDwZ58pDS>`g30-9kwd#%WxL*C!=$|k85d7k44e+}e z4WEjSBjTG)JNNr*1=$s|tXS*6SG`-&x)7Wev8>N`lN=gNtnFT_=lFVP1AC699GU30 zS{Ha-KnYhGnI)#Qk%f=d#c_Y5>&iHg_WMU_*p!PbFfOf7@LcQ(%wt_^I^# z#QOq@+w}XkUxy}Q^20Jcm+&$|k(qd=@94THgd<6U-Ob_j9wgawHohf{0~w&t;ij-K z&~iiWj>~{4z4!|-TuOuB6-uh<6}iPYGEbV>*+Q?3Tbmc_*JO&;%`9sa$!N}U7Lk=P za`@weWLp0lDHGL^>?l0qaEc%`gNtr6b(CTP7IWc3 z5u2`*NGB?tBF?t><@tNz7PEGM}b6vLg+=iFpTB^hO>rO#G8HAu9WP_fFvL zul+`I$}ZMnC19>5`lUN-ZxS)J67?&gdp6669TES_6$K2;FBb)G!v+Y>_gft=SVr0u050fjEx5Q3OxVrgT8}&qTHYEZaScP<% z4X0qZZ8)G``KAt?t#l-NU7F)K)BEO!+En#t)wo1={?#Vw0iHZ_f5WOY72f}KcW+%>orS(-B=47($4}ml*C5a=x!2HtaL+Fqd!>Y&U!Un(m zh~wI7^Aiu#ZemDnm8L(}-}V833jsesawLrZ*W&z`4Rl-BUEYCCwuh`pF?fYA!KeSm zm|`WcSPb1A$(@$v_4(qh!$9@&B^K7fGW~paJbe@!cJO(IgzndT)SKBwG_$G9t2y|4}r~WP*yL zoAQAs@nx=#+^CEwCe`848g@JQyALsW@ZcZZpD#^z4L*&E3cGSJGwf8jy#J?V4A0zaO2O>1M>@!ov|Ne9pwSeH!_)x^g z=PgMcID7?qUCs~L^@p@rm@+vq90%VOyq+i`>~WK?2Gl%cEOeNha5z_K5(VRHc-|ouVd3}MiRqneXz{AqH0ib`+#uj^ zfreAXF(2yDja%n?qdgzneH7Yo1O7HzC z^k!qhuE%rr@{+Jw zMn@JlTEz@nKIxo&k6geB+()mV60(+^uBXqqsHj(dFf!@WIjrbW?{5}YX|y)f7GqnGRSx?kx;_6ZgK*I1opv!g0$FT0 z@whV>-P2fw*G7JZ>*{j&G>YjgRPC%t%u3sNy^r#wjG@%%8N_SaQCAma*7S0aje-2E zhv(~Hga7&Lr3ymw2;z+Nf`&rOXxML7`!bW*NF^UrQ=C8KBF*>GRhO~GEk}1IQxB3- zDPu_CNEwNXZc{CpKF^zAWPM+P#jmYPs>f3DS*mrRnO@Zc!y%K!LNAyf6?Bg*8i?{% zT>sTi&J+MXVO5It_JuWYq2{P~=}o#j4Tp({tANH7F3N&i*&5j|53!c=*WcL&k?`n| z`K)InA6OGBR-ksbADqK85nvd4h8}s@$@;L;s2^NG$v#^jd#avJrf$TUOEY^QC5IQs zx7+!fw>5+@>rzBhr;(!I4YoU(J!?!s*hZ3vPqMt#&g4{X-lq&3=@s^G=fEaCwaG?^ zbokw{-bCKVu>n@5+QZ3=t$y>*?Z|U0!0J3ygc7NQZ9J`x+)ChQ+GoYXa9b@(^V8%S-AuM)tb3MKf_aWGA()L@@lblyiDq5ZVKiOH$~;x~SC`KF z(d`6%aXa(M`+5yN>E|1AW*Wt$bPSs0^TRm|?n@8#p0eial@ktGj8d(_%`zNgHGBw$ zYg>wXI^n4UXoDKfu3Ej38n}xT3%#_;(k9_{QrY6(V9(?8EEV1F#)pmVr3;4mIc!YfBk(<-8@?Fu) z>U(km%3s%1S>Xr{W0maX$cTf!$B>ojjT{}x>*p4NM2{B|!F^bfC+xTpEd>k6+7ZKdMI24I_IbQC`X0NYEAolJ9>!bu-^omqwp>uS4=i) zGdl0IKTuZ+xV0BhCV}F|jtve8k=2OBy|74mWb8&4gu_sKZ=$DzZrr3Wen# z+VHPHQz>jf$6I0?bD@B_!`Z3N&WuQgZb8_W_LRV%5T}DpVVtN?UzGyXPw?2ubCZ)jyvSyyl**)kEO4 z|NYrnRnp1HRTxt*UHHeXn9lugd-7Ly0=TdwFQ88-##M)11BfDah3O-rok%-)!V0$w z%2?3DtQ(|VE4>P>Eq0tGU=DG*b*YhV*TBi>@BKuQW6LYC#>4}eO8Z$Xt@EAN;m8pyN&>@kaAh(v%%#B-t2eJv`7Y<=`TF^s*l6rUOu6Q(YGo{QY|$=z+1eIeHlOXrO)S$s zkA6U%=0oW*Y@gz|Uo}Y&`O`s=gzs8fu&v^DRN9M#+s}lUW8dZRG;{p=V2X>I@MYHF z#@E-Z1i$bcHef?auU_5~efp;TQJ_kU4=b;n(8Gz`6ax{L39k?K@DD13OsN>R(WQ1K zBxP-XdM2oOHK;H2ebXgTJFTv(Iq6l=6S3?FRr;d^NXXRmFxm9-Nre4&MmUbtSN>j9 z$6Q-pJ*A=C0%*_M)D7aREU9J1ce}Gf<5_A!}+BAC<6* z`6P0|XCHg*N?}=%C)q2ZYtMf%>Az)E@I}FO#Yf&Ur`mZH@5Hy$*pFd8xkcCQ4#r&K zm20tXrd?6=!dEfC>+mrig_={4XDNfXr1-92@aGC=-qc^Jz4eAs_3HP8RD~g}9DKy5 z@T{9l`C1LvMf|azyb{BjSz4kzd1GjA4}EgR_XeEnKMRhbferpl6Z(qK)q7==tyEOX z7|`AQ@SQV)h|BW>xcK4s3ssdI&supF$HiUV&clN*9gBV!?ThQy&_D=hE3--vwh^Zh5$4^ntSHd9p@F5XRLlCFqEy}L});NapQksEh% z_cBSGaZ`Jyyr#uk0`SrUK79%|d-4S3Hpwx;mMK#xaakd)EK%BCt&Q}MxTe6=Ofq^X;eEljZMW+t+xN9_Cf^R1 z9oD=t{^H|2`PIKkVaHCp0shu+fapvA=qAR8V#SV|;E{i-lV*?j%qMpKW^2$(dX1{e zCHYRe8CLwI%8psiYnmQ0_DRgpCf+;mSD%wdW6evFT$Y?ZdX%nLf|jqxdc5-8cf05e zAK9!^1aSy`?7z8Eqh7Y;wat`yGNt8igZ)dFPXIOb#+vliUpZKH-z&7y*gb~s?A~@G zBKM{>IM}DHZK!*lsITYVz?Y|juL14&CGbF`SA^B2z6D`>Znu4^O^w8nQJqhIBCx9X zL>8A&s(2s&{B5rIqfkp}Si`8e!;0K)So$i^>!4 z^Y??lVZ;yj+o0`@8oZ{-xq|z?^Mb9u-*ucFjC>@0k*4e*Ys$N+31F^@pruMVfDqOhR->TNsd(Z zZKh^azV^o8kCK4!_Zq9irBW}ZcolywW1h}Vy)^fUf8n;M;8QdR`VvN{h5+f!O86F zq)u?h#G(rRa`8g)Vm2%{i4`$O?G|f6n`=vwN+{L7c5GSUcck4%%Kd)&6++%8a5z1c z&D6?SzrMsrllAZN1kRqiw%-RX1)V);i|}#&68#c%f)06>E0r3O1fgDSj~#zvfO5X? z(fIwqFkfx)b4Qz*u0BkBhD7EQ-rJjQLH9b>WDG0xXk_tFLLZ4}S_w>Y;DT*miD(+K zYbDNRjS4M1TA={pK-8G7Ac+*Gz1iq?Td-Nevb|h#nO`h6%8kbp{@YR*>_P1)i}|eu zY~J~83b<>lxu@N6ODm8iQQJo#5(Pz__xAR}lT}-jwYun@b2Zut3ujI9Kc_2bU-Je_ zLRhLg(qdF|hzK!?y<) zJ!KsuXH8Bv z@fqxyH%l{DpXI*ez>AAFN$2OAsx-JJ8)Vn7xf6Yi)p9}0l}YVPNj-ftB(1^g=Fojb z+!%<6N&CjC538iLntldyq`06?{f+v&Tl|-VprXVY-Sx1!FY$4V;K-nLT86q|i^W-) z1FPPHA*aU;YkSUo;DaG5-%%HI%b8{TomxvrELiM^;@B9bDXh~5*@oamRwQ=bfd_&$>* zn1>TXFnc=12xNF|ua484TrwqgedB%Ud|}!5!Dw2&DqA2&!%*&^SXu*u2-=!)1VM~% zJhvJa4iUs{5BGZ3E0U{2eQaayKu4Xv7-pIiHIPY%>CJ z#oFul-<4Ne=?93n$OC1`qa;MwVs{0*h zhkbUrVwOSjjB0#*qFBQ{2hkwtPTLPN@F`A?9Gqg3?MAQYcej_tSzlk!Y1hjmLe?7j za9%$W4nX}vqe67O^{gwjzu1ww8Gd$F!(kqqSsPXkCg)v%I5X<@+)0I)|7g;JI(V~? z>qD1bvx>T(#}-E(CH^J`NXo4l0+Ruq_v8)!;b1ubKrfswqJ!SN_;Yk`Arhu5`+ zyPtlqx~wxC81#sb*m(YelHqZ?RU(J7`S|&2k?ftnypn3464u)gneLcQV;h471^p3E zmsU#TksNclDa3;uSe89M-u6R;ZZyo#Sz1@CHME)C!)i9RH4`KlUd2<*htQt4m*C4S z&}K|)TsHlZTzkkSnBp~wJ#_pu3dQUoSeSO=ZtqL<9UuPgpAuc+P4kLk z+C$uLA>cz3FL0>>gFn&4toCOH%BU=P|VFl%OaK`aT}V zO>b&eijKB9ES#0<(|Rt`MOta8AapQTg5xHqXBMOPs**&&5Jo2S_s^~ND?h41wrb^ zCo`KJSC@%^M3*O2XYozq9{&!077HN?xFtS~1gG|b@G#L8(}!3L`+gFV8%H1EnwAt@ z&OeV1akQBEROfSKSSOm@UxqH;G1s9<`4oI8DfupPZOhFoLn13C-hnu^EE3 zkmk)0vCo8AkQ=Zl|EBU1mVxLL=fZ_`%xbs5o(3ph`QLEQ9p_CQh85_d)F)Y2Z6A+I zqYD0PyV`UMGE2UJ-s~9E@SS!1!DKnDz_;>-H6)#=$ENGkrqS_Gy9d8^y zD?VJC+0*Mj&7$5oK|Ej;1av)zU&Deo5ev98KVZ=;HC1z;^G#2@1X zd8Vo~qG12CEdP$6NifjcR9_mnF#LMbQWYR|DZt$-La~;W=AA1~wXmpFnIfP)L64># zWo40V7UBX4Jr?%p_3YpVaXvrD2VRyfRGXQ((ey~HjjE)!8rOjPWx zkCg2va7c#Uj}vpB0iD8#7L+e9UVn?bUgI(Nw81J!{D|aAy6#P0@eGQR1kTx5&$={ ze4cg)?geu(LXJ3`!u9Aqc6vLFf$#!n6llP`jV}7oF{-pGiOmq{fno=x$Se!1CmxRP z1KgP1F*orM+BLguy@%=>rPYXjyTe|}#2q{6cKgy@F}OiCObZ;ri6o+)e1 z;F@bpcJUrnuUg_ktt`|aRvdQ2$hvEn-afU8{$P*xpN!-E8TzRK9zv(?uSzI;4r_;G zAT}Q?as!;xAcO`rw6Bh4G6k*^lVx4kD`o)j!O`wc!zNG)8Tsr7pJLD|JymD7?)(BL zsDuENMKg76k_zR$6dYcwEX6ja8rm8GBP(6GvYgqbP-Fu<#I1axV6G3*WU#f)okFjy zM-4IiXf$Jaj z|A4A4awdw1{Bj2yo1Ut}d<_x>9`A&iqY3PuetJ5vnv6D1rGRpeB9%9?kAUsm9{y_E zGpZO%_AO&1O1b-92-qN|UrO9W&RW(IPDY>ZPdK+=uSYLNv5-{5u znkyE{y&jq>LhHfsS*Yec%&9k!_742~?c8=1?nPJ5TW$7S!;4QaPWzpe5yomuBTCTm zXv!;P28v9}848f_)!&!~@b=2Mz`XNmsb2WnRhOHB5L{k~iXlk}6^0VCz(^0%3lO|- z-juu37e9dWzw1b;9MoeL%j32~m0wS)Qzu~M)4wXIyfNE4GlK*Je-;ZJ31G;{!#UI^ z4W7crvqktdOlGrBURh7|FH%&&c-dnQiginu2r2Sh|Li~;VvC^m4c4|)3&vwBAg5R( z^*pztJ>8wpl|%R*7qhyi*rVu=CMx>D+Gne`k_BrCK}Ny<+bQA*P0V z&42Sk);QdSuqTO|{E>Ata7DAl)w)m1{!I?C&C<1KRU|WgAANoV*G>iX&kH3~5&n-| zmEJPhd!L}~*-DUL-KiQhS3^LuNexOmVeO&vzu!G#a_dhgAMC^gr){n+?>mM#4(!(Q zn`Bvyg6Yhu;HgCsIf$M4Fc-l&pVZ2GUOwfi|CUnWVyxT^+-wg zw_Xn2c6@6ghqzf@>zO{iEJVAUrB ze=Yo@9S_=egc@h&V8S@Fob1s)tzoj;&JFxz=_t3kE#`msb?7~_m5CbDo$)I!`rv?# z-3!;M2vr3@OinJYr51EbW~(0}4x(R^c%JLBjqIvknSHNhu7B@A_%@ulV`}Pcrce%! zIshS^U7}mtT2S696pfV6&LYNxTa#e z4D2ZOMuXh|k@WIvSg{!Br0{mSYj&o6!4R-OaeK~7UGeB{;KWNNmsyO^i1bOFLH6ls zAJsaTkH+k7o@rx)eCy6YDD1L&9T2?V9)n81OKuO`LmjDe(1K?HZE4p#<9fL9dUSD> zV9_U%+T2P3zOk*>L;zUkNrEpqGkVCd$%T?WVN3=@&jJ>r=Grm`vMlRkZ>Lm556{i6;z!U3u%lt@y9`lYWPCNSA_oC45?%2kc?ub(hQ0GA^?=om|jLu3ppKO4F;5yFamAwhf~I? zNHry|id%JR5tDv4yMCrdjz!I^+-&`;>ePM5RIQIeA@VhJvFhafuq+-DmpW%MZp`+V zbfNS?tsB1CN3tz~y!k;H%>Wdnu)kJ$LJ^XXg|6jsQl_^C0raj09cF{xVC-R%r9cen(mRzEILr9pVW zbaXH>!08%Io-j4u4Z?E|SsjjjaxOSaEUl;+1$wrtka}W&)zm>q{(k(?&09&yj%mnN zneH5i*-VvoiO&a)u&`_)DUHI1zznELjF5?~KOy z=q|@=DEG69Z|iR6?=9csk{lrsQj{26p)(MKe-VoRhJb5wDxrFutb&^IG8qCtL?024 zlNv@?FtoC_Q*#MWRy2I%b{FrZmd^oBElpe$(n5|&EObU3&sSGpLtR&`oD~b zKc+%1$n{$k3ez#{o497OaV6*Eo>?_3x|vP=_JP?3UH^V)ZGD>N6FABq4X3t>VvD$NL>*m2DFPBupDfuq#lm+P$2)VD;6Mc zA1QT@^4HkE`hOL=G{m(}-gEr$sKDJ)gv3vAKT@iy;?aK*?flwFi-i*#jF4vfpahVF^{C_+We{Dwa;Ow|7yk}7!_y`3yu@OEN$9}~BEZ}&A`!MMz93hx@* z?s?VLn9yFc^-{L7wjXf++oIZoIV#)d8r*VmWandh<6RxqMy27c!wSgR znJXQ#wW_n1rs^>)+h@moH(YF!e{<0gxtacM0`YsQ>9Ho+&+4-R+Q~9*9>rDlLChwx zu>eWtzUkSHhRHCM!xTdIWNACyoxk z;q>EQSHc8AN_H8cZW`1aR97S7WkuF)MP&+h%-= z7r8n&(+My>5i*yxef|AX zQ75zo91+ybu|P)^h^=jf%EL3q?y*c*kLCyiXgXu(w{pC0JUl$1?57vE-9h1$`@K(}oj$vG_{5Y1f6^i+;rz4mo3KozfsMGlCa3R63 zx%gzgA&*{${{FXIsGoqewo#$&d5g@No_esivloj>x?vk;@XgfsMzM+RL^ujA#b-tHj!bA?;vi8>A5eC&hF6&o$ZX01w=ZR(upCVskh{%--4(#E)`!#3+V}pG&0wc2bUx zY#b$y4|iv}=5u=vSzLU=m!JaWlBM8ibJFP;4(lnYT+RBt?a8B}-Mk;#2*5?4+(*Eq zh0y_#s6&roL2T<#2_3uTY{;slQg3q`0IxAPFw^fDl}y`Fu`luG!Oh*_k+$5&uf~g2 z!-tICiLcT`+antUohd0|VJ$S=z{+ihNfXtrX)8vj$;<(23rY z*~9Xwvt^NYQ2GGUj!WjXBNki)}uL^z~f658d)IBEJgzav-sq@0~f`Mn)q?Z*-Um=p^nG5Y({RAgmZ0bt$ zT~JX9wreODZWVoTOEsPIa)!`8_WNvXOlV$MowH)87#sxeU87u+?!4k$lk+uHaq_@z zMJRRAR1vgnD;B~}7lHM;@}Ex_U%^rw*O(wAf7`%q9Tp(r8>!#2V|#eczjc%Upm9Y( z(Va&bDs@&j+&HYd7;M!$cz*)Q?RG7F2$l@_VM zdYAo9tIi!Wc%2cF_vn20%7e+S-)6SKO$OXbRjka@9HQ45O#1RA=+a4!u+(j+IB%hp z$Vz;+Eib%_jBK`YJTQhfzNI~kSKY9~HK&jY3|yh>hzc-1OQSN-wm)o2sjXe&4|&=DCbNzidGM}ba3uQj_tN(k zOjb#5jyv{M!rr(Ws*{|1uTb_-hS2pMv!s^KH^fu-awrujt10@)08akj&h_#?Igr$ZF$f0t)DqKk-+zkqF+&}vUPQ66&x_?LDd zU}T%sY=h5=n*?0dD4OFv5XDao@8oG=;_FyT?vD8h=FPM3=ySXKTCc2CZtC=|h+EfE zi&_}|h+hAExs!Q7O=7>)aiRP5Z4Zx6STeUxd$<0Q!gu(Lop!BI>}iGqMIIm;~aPs{T; z29L$!86N?+ESMzj=(%|i&6gu%#{LH3^|oF>S_{(IUJqWEsOG8O`8wNr;Ziz!UG-zu zzv5tei_qruSoNv1lkDwu(&vV<7ZLejPnu@qH8_S=KtjiHnOJ`<<;N^arLcRsuRwA- zVn0t}E%PAt8~YTOB2_Zq-_1r3mn(%?I@ZYZn|D)6doj)Mc1!Y)S?rZ>%&*>AB)RpnxKfH!iMJq$_PNFs zk+Z5_FcIM}!v|G9Ehrg)`(qjTN0(Gh(<+ct#HX6_n+QCV5~wuNYSbg$94iVX20#d? zZvv+=_6Z6KG4E5{jg2R9`=2bF6<}X2;O{eR@9boqh%_9&M2gKX;A`JyxK)6;!Hb{p`=a z`vi4=1PJdi0cIziou{pB^L9y^UQp_1F!}ZL{l=Cq2&99UY$)WTgg=1vI>ebBZMLOX>u`s68@?S&bFPMt~B51yzI#!#SUl zG@sAdkKAa3;A!gpk?kCl@irM_Y`dj*%z47vUdKf06B&>6v;dK!nfx9#y!EP@73Q&C zI``R*SxdeIi6$#Gm&;_B$iV>=GRlEhm3n&OWmv*x9&XPo&{O$IZktv?;AjG)u|xQ- zMx-b@-CMl6enroEyr2r@BLhnYi9d1uiw*g;TT4OrEZNDoLyg~jU@r7a56Sj{0Zc&O zU)%7oaIrOqW3im-Q5rI`BB>B?#c+aGl5&|ISG;!v0WTKc#wI3|$KLZ^c{(7?DaZ|S# zp;U2DRvZOWyTq#f{n6_br&X-%hn6}@RnZb>PYh#$`Kxg6SwcrwO8PUM4MrDpBn<1!tmVV z83?V0jw_hovo>8TQ|?M0hoyizN%LJny;-P$5wkUA6xC|ddWoo*85WuKOK|Fk=4asj z3zrVe?d#<)t}*FY6&o^PRX4bM0K?lFMtekKMT6T1^ zzapn{aexqN7W;=wjkV-uP)25{F-yqVy>WTWB10VZ^*ggTTXm8;iGrW1Q*qtL)RsXj z)@1bpr?UND@>%bwHdev-FjDe-LC`e4$I?#&wU6?uvgv!&qiI7S}mSi$9npYBJy(ok;5t{vg;m&i1 zA%wblx5t3iV{r;59v^s(uyAOFb8Jd}et|veCV}QS({%d$w6GOkZJ1Cqr}^>uqy%tM_@U39577?dA~p?4X) z6Op1iXVa)wVGMDJ(?U=&915Vq0y>tJjwVmAOKrm;G5>=+^l7JP6)@6uTYml9HS#N9 z1?CZ>=n?2}P-}mhg6ecBOV3gp=U|loc=lu$;}NN7V|?^B35? zoLAiG#s{8uHkHDj*oyWP+F8mZ@m~tuR4u?R-xSUQ0FzC!3M z61*P6JI%8g)o#bth(W~Gp&5BR=20I;Nqi z2~!_O^aTC*(Dg^pO@JD-!W{OJfSKfpQz9Kr5Y(?A_Jm40zge!BTrf9io~&be{XD2F zbv?N0@0|D7cJ}cFK!uT@hutj4Lk|yF_ioXt)*jQPJaNX1T}U*!V7C;#o#Al$&B_AC z)m7*{M<~}Oy$fzGB^-B0bS>vhU(iJ5Nv8;0-=YWFWchKDSc5rQB>`UzwH|Snp0G|{ zLR(w@M+_14yC02OyF1}pzDHS@LTSkD4 zgy>V2n1%udN8~{Wk&Zb)-8BO?%J0t7IcZ}So8-LasEl*k5zpzXM&&D{RHgCo9ZyMp zy9h_)&gQdRO>Pr5qHTk*K&_o~^LeFtvuq>-pNf?Hs@=doF5|=APT6Y zrx(3Ex8-MjZ-&~tTykxlooX*F{^CJ7G&Ue{PMrO*?7A7;IXQ}6fj$f}H z-pGC-oRSAwRczJxiS3xXdwZ5rq?r=T%QimxQf+;8UmBP-(WTy8@`qbNbgvaJU z?JeSt?Z~;vMMICzU@lP;W;{-v7BJIg0Pd2WM-Q`JOZtug{594rE_#fVhstv`ON*3p ze#4;T;jY08Y4RhdD7FXgPwtch7Qe9G?XTNo;fKSH94Tmi) zvXVI!x}-4v&N#$`n8=mtIr2=5Z)C80!`7BDvEIQ?ozQ(deAWW}Ammb^92e_PCaf)$ z?$$>X>h|MfhOOC&;~JmM|4YsxW&@3o|6$qD@IRJa36n}0F^-F1|9H4%d%LRj?Ocmg z)h1sp&O=}ifdo{W$S{t&6Pn=BE)^ch(me8)_rXPI032X`Q(KrZpJY;Ax797e16~X2 zWZ7(M7mlaM78#CXC_nPsZ4t`y&uR8C82m-dOFuEKx60t9Sr(^IR8xgFMuOFMM;so8ah8 zXNf)Mji6nMCZ3Fh?eR2w&V7$K*OZqK=1wxZy^J!D{=4bMP-LuVS(so4ujX9DOO*5V zmh}es`Q+aq@^8+aN{1W(Pt!dgelS0jZ2(85L<(4XEk?F^S6E4kK*FLH_C73kFQkq> zc2R#QO)2>T>(#AkDPjxq2x#pX%u;jaN}EJcC04GTBAM1!Ffb>eP7HDMq5}S;5!p=F zG(dXEtRVan$+CZwQ6c}bKPfh^>wN9ww8=~nSv4JBW^pUEnqV+uj-(i|9K0Y9dpg%a z<5Zf0UYrcP^ymxyeA#l}DpcY5pC*hv31e`i;Kx)40HctzGe0iC`I0W%IhwB?vIXgH zf5FtwZi-3-w82qX;@=+(W`t(vmWM4(`F}?P{c`EilWbnRfuZk~Y%d_*OXNV=2 zr=({LL8qI5jr!H`8>EwUH05RHx%{mo*2zQKQp>xe2L3&%zxVW?MJ#2$$M@Slhn)Y2 z$)Pu`5ZqqA65#_i^R%C%G`!^#jDbE5JSihN&iD^YcnSkPRc9dz{$OfTa1?zd zRqSePBZrS05tHDr-!j(~2Ejg{qTrFu;hyhnx*0JSp|7nqtu`B^kDy))>J5Rf_S5YK zBXJjfTS(L(ey7FoficG~El(KjY3c-qOv)q4?#C-#b(~e(wTAQ~Y41#%z9XP2lo?1d zS!wm7pgV3VV>We<`v{Q|4-V{<;UXI3P#7-)l=*D)0bOjS2J> zU$wT5QRa!AkG)|$6B=KKw6#Iu=;>1p)O*iU$uKUc;nsYdeBK zv|R!vnl8`hMOK#gHM0)i8xA_CJ_-V1MUgLq^`|JJ!%li0l{;F3)s|K1 z0y!$Ol>+>yGlUjuHe!U%=5uuf^Qqq-Ni&?*x?Ylg^`Ldi~zJfFm=N{sDio26AIRG49+=R&``CGh$2_5J%z?E$Kpo_!HITnAXx-4_KXDx{

8~aA5n==&LAn>*lYgd%5by6JL_rf;kLsJA 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

pni?O?Zql-<0@&g%W=X>fbc@d-eM3pr*LW@96#= l-4tioxbgoqJ%E#UdN1!VydANl?GNx$R#21AI(zNG{{RA29IXHV literal 0 HcmV?d00001 diff --git "a/Week_00/G20200343030527/\347\256\227\346\263\225.png" "b/Week_00/G20200343030527/\347\256\227\346\263\225.png" new file mode 100644 index 0000000000000000000000000000000000000000..c6884cd354d737d5709b9a51c3bb675f1525de6b GIT binary patch literal 223426 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

^9?&iQ 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 iApQC0U`UIBIFNV6bq*J6T06mS@w=5GZm|K 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ℜ?4f+ICS=GC)i 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 X&-!XTs{Pd~z`sY5ir_+VqgVe2w4Ar| literal 0 HcmV?d00001 From 61c155901184082b591c975fd78803b5c67875e0 Mon Sep 17 00:00:00 2001 From: chengwenping <58714953+chengwenping@users.noreply.github.com> Date: Sun, 16 Feb 2020 16:49:59 +0800 Subject: [PATCH 0167/1268] Create LeetCode_001_385.go --- Week_01/G20200343030385/LeetCode_001_385.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Week_01/G20200343030385/LeetCode_001_385.go diff --git a/Week_01/G20200343030385/LeetCode_001_385.go b/Week_01/G20200343030385/LeetCode_001_385.go new file mode 100644 index 00000000..1e0f72cc --- /dev/null +++ b/Week_01/G20200343030385/LeetCode_001_385.go @@ -0,0 +1,16 @@ +func twoSum(nums []int, target int) []int { + var b []int + for j := 0; j < len(nums);j ++ { + var b []int + b = append(b, j) + c := target - nums[j] + for i := j + 1; i < len(nums);i ++ { + + if c == nums[i]{ + b = append(b, i) + return b + } + } + } + return b +} From 10b2181ea5cfdc1718fe4ac2a7e6790eda28d521 Mon Sep 17 00:00:00 2001 From: chengwenping <58714953+chengwenping@users.noreply.github.com> Date: Sun, 16 Feb 2020 16:51:31 +0800 Subject: [PATCH 0168/1268] Create LeetCode_021_385.go --- Week_01/G20200343030385/LeetCode_021_385.go | 50 +++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Week_01/G20200343030385/LeetCode_021_385.go diff --git a/Week_01/G20200343030385/LeetCode_021_385.go b/Week_01/G20200343030385/LeetCode_021_385.go new file mode 100644 index 00000000..1118126e --- /dev/null +++ b/Week_01/G20200343030385/LeetCode_021_385.go @@ -0,0 +1,50 @@ +/** + * Definition for singly-linked list. + * type ListNode struct { + * Val int + * Next *ListNode + * } + */ +func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode { + if l1 == nil { + return l2 + } else if l2 == nil { + return l1 + } + + var l3Fast *ListNode = nil //新的链表第一个节点 + var l3Last *ListNode = nil //新链表最后节点 + var newNode *ListNode = nil //新创建节点 + + for true { + //对比l1和l2当前值,取较小值,取值链表前进一步 + if l1.Val > l2.Val { + newNode = l2 + l2 = l2.Next + } else { + newNode = l1 + l1 = l1.Next + } + + //较小值链接到l3 + if l3Last == nil { + l3Fast = newNode + l3Last = newNode + } else { + l3Last.Next = newNode + l3Last = newNode + } + + //如果l1和l2其中一个已经遍历完,另一个剩余部分直接拼接到新链表尾部 + if l1 == nil { + l3Last.Next = l2 + break + } else if l2 == nil { + l3Last.Next = l1 + break + } + } + + return l3Fast + +} From b86ed9b2ccd5cfa1f166bec915b57e9de3e770c4 Mon Sep 17 00:00:00 2001 From: chengwenping <58714953+chengwenping@users.noreply.github.com> Date: Sun, 16 Feb 2020 16:53:03 +0800 Subject: [PATCH 0169/1268] Create LeetCode_283_385.go --- Week_01/G20200343030385/LeetCode_283_385.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Week_01/G20200343030385/LeetCode_283_385.go diff --git a/Week_01/G20200343030385/LeetCode_283_385.go b/Week_01/G20200343030385/LeetCode_283_385.go new file mode 100644 index 00000000..415f8957 --- /dev/null +++ b/Week_01/G20200343030385/LeetCode_283_385.go @@ -0,0 +1,15 @@ +func moveZeroes(nums []int) { + a := 0 + b := 0 + for ; b < len(nums);b ++ { + if nums[b] != 0 { + c := nums[b] + nums[a] = c + if b > a { + nums[b] = 0 + } + a++ + } + + } +} From 7bb53e2693ccc533cb14fa63a164b006b98497c3 Mon Sep 17 00:00:00 2001 From: majiancheng Date: Sun, 16 Feb 2020 16:58:05 +0800 Subject: [PATCH 0170/1268] =?UTF-8?q?[=E5=85=B6=E4=BB=96]=E8=AF=B4?= =?UTF-8?q?=E6=98=8E=EF=BC=9A015-Week=2001=20[=E5=BD=B1=E5=93=8D]=EE=80=80?= =?UTF-8?q?015-Week=2001?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030015/LeetCode_1_015.java | 44 +++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 Week_01/G20200343030015/LeetCode_1_015.java diff --git a/Week_01/G20200343030015/LeetCode_1_015.java b/Week_01/G20200343030015/LeetCode_1_015.java new file mode 100644 index 00000000..51260415 --- /dev/null +++ b/Week_01/G20200343030015/LeetCode_1_015.java @@ -0,0 +1,44 @@ +package G20200343030015.week_01; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by majiancheng on 2020/2/16. + */ +public class LeetCode_1_015 { + + public int[] twoSum(int[] nums, int target) { + Map map = new HashMap(); + for (int i = 0; i < nums.length; i++) { + if (map.containsKey(target - nums[i])) { + return new int[] { map.get(target - nums[i]), i }; + } + map.put(nums[i], i); + } + + throw new IllegalArgumentException("No two sum solution"); + } + + public static void main(String[] args) { + int[] result = new LeetCode_1_015().twoSum(new int[] { 2, 7, 11, 15 }, 9); + + for (int item : result) { + System.out.print(item + ", "); + } + } + +} + +/** + * 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 + * 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 + * 示例: + * 给定 nums = [2, 7, 11, 15], target = 9 + * 因为 nums[0] + nums[1] = 2 + 7 = 9 + * 所以返回 [0, 1] + *

+ * 来源:力扣(LeetCode) + * 链接:https://leetcode-cn.com/problems/two-sum + * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 + */ From c6fbe0daebda1289b3023cf3361ab65ccc11c5e2 Mon Sep 17 00:00:00 2001 From: Saul_Cui Date: Sun, 16 Feb 2020 17:11:11 +0800 Subject: [PATCH 0171/1268] two-sum --- Week_00/G20200343030643/01-two-sum.py | 11 +++++++++++ .../{643-movezeros.py => 283-move-zeroes.py} | 0 2 files changed, 11 insertions(+) create mode 100644 Week_00/G20200343030643/01-two-sum.py rename Week_00/G20200343030643/{643-movezeros.py => 283-move-zeroes.py} (100%) diff --git a/Week_00/G20200343030643/01-two-sum.py b/Week_00/G20200343030643/01-two-sum.py new file mode 100644 index 00000000..1b3c2037 --- /dev/null +++ b/Week_00/G20200343030643/01-two-sum.py @@ -0,0 +1,11 @@ +class Solution(object): + def twoSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + for i in range(len(nums)) : + for j in range(i+1, len(nums)) : + if (nums[i] + nums[j] == target): + return [i,j] diff --git a/Week_00/G20200343030643/643-movezeros.py b/Week_00/G20200343030643/283-move-zeroes.py similarity index 100% rename from Week_00/G20200343030643/643-movezeros.py rename to Week_00/G20200343030643/283-move-zeroes.py From 3c47d51ebfd6bc3a65e4bfa8b3c9710281eb210a Mon Sep 17 00:00:00 2001 From: Saul_Cui Date: Sun, 16 Feb 2020 17:23:01 +0800 Subject: [PATCH 0172/1268] week_01 homework --- Week_01/G20200343030643/01-two-sum.py | 11 +++++++++++ Week_01/G20200343030643/283-move-zeroes.py | 12 ++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 Week_01/G20200343030643/01-two-sum.py create mode 100644 Week_01/G20200343030643/283-move-zeroes.py diff --git a/Week_01/G20200343030643/01-two-sum.py b/Week_01/G20200343030643/01-two-sum.py new file mode 100644 index 00000000..1b3c2037 --- /dev/null +++ b/Week_01/G20200343030643/01-two-sum.py @@ -0,0 +1,11 @@ +class Solution(object): + def twoSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + for i in range(len(nums)) : + for j in range(i+1, len(nums)) : + if (nums[i] + nums[j] == target): + return [i,j] diff --git a/Week_01/G20200343030643/283-move-zeroes.py b/Week_01/G20200343030643/283-move-zeroes.py new file mode 100644 index 00000000..3ce4e17b --- /dev/null +++ b/Week_01/G20200343030643/283-move-zeroes.py @@ -0,0 +1,12 @@ +class Solution(object): + def moveZeroes (self, nums): + if not nums: + return 0 + + j = 0 + for i in xrange(len(nums)): + if nums[i] : + nums[j] = nums[i] + j += 1 + for i in xrange(j,len(nums)): + nums[i] = 0 From ea2727fd07a04ead47910f777758f16da1fd9d86 Mon Sep 17 00:00:00 2001 From: sunshined Date: Sun, 16 Feb 2020 17:24:44 +0800 Subject: [PATCH 0173/1268] 631-Week 01 --- .gitignore | 1 + Week_01/G20200343030631/LeetCode_189_631.java | 83 +++++++++++++++++++ Week_01/G20200343030631/LeetCode_26_631.java | 25 ++++++ Week_01/G20200343030631/NOTE.md | 6 +- 4 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 Week_01/G20200343030631/LeetCode_189_631.java create mode 100644 Week_01/G20200343030631/LeetCode_26_631.java diff --git a/.gitignore b/.gitignore index 26af9a84..3097207b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ # Default ignored files /workspace.xml .idea +*.iml diff --git a/Week_01/G20200343030631/LeetCode_189_631.java b/Week_01/G20200343030631/LeetCode_189_631.java new file mode 100644 index 00000000..da799999 --- /dev/null +++ b/Week_01/G20200343030631/LeetCode_189_631.java @@ -0,0 +1,83 @@ +// Version1 +public static void rotate(int[] nums, int k) { + if (null == nums || nums.length == 0){ + return; + } + // 每次右移1个,循环多次 + for (int i = 0; i < k; i++) { + rotateOneStep(nums); + } + } + +private static void rotateOneStep(int[] nums) { + int previous = nums[nums.length - 1]; + for (int i = 0; i < nums.length; i++) { + int temp = nums[i]; + nums[i] = previous; + previous = temp; + } + } +// Version2 +private static void rotate(int[] nums, int k) { + if (null == nums || nums.length == 0){ + return; + } + // 需多次使用数组长度,避免每次获取; + int length = nums.length; + int[] tmp = new int[length]; + for (int j = 0; j < length; j++) { + int newLoc = (j + k) % length; + tmp[newLoc] = nums[j]; + } + for (int j = 0; j < length; j++) { + nums[j] = tmp[j]; + } + } +// Version3 +private static void rotate(int[] nums, int k) { + if (null == nums || nums.length == 0){ + return; + } + int length = nums.length; + // 当K大于数据长度时,没必要多次执行旋转 + k %= length; + // 翻转整个数组 + reverse(nums, 0, (length - 1)); + // 翻转前K个 + reverse(nums, 0, (k - 1)); + // 翻转剩余n-k个 + reverse(nums, k, (length - 1)); + } + +private static void reverse(int[] nums, int start, int end) { + while (start < end) { + // 两两交换 + int tmp = nums[start]; + nums[start] = nums[end]; + nums[end] = tmp; + start++; + end--; + } + } +// Version4 +private static void rotate(int[] nums, int k) { + if (null == nums || nums.length == 0) { + return; + } + int length = nums.length; + // 当K大于数据长度时,没必要多次执行旋转 + k %= length; + int num = 0; + for (int start = 0; num < length; start++) { + int current = start; + int previous = nums[start]; + do { + int next = (current + k) % length; + int tmp = nums[next]; + nums[next] = previous; + previous = tmp; + current = next; + num++; + } while (start != current); + } + } \ No newline at end of file diff --git a/Week_01/G20200343030631/LeetCode_26_631.java b/Week_01/G20200343030631/LeetCode_26_631.java new file mode 100644 index 00000000..edebb8a0 --- /dev/null +++ b/Week_01/G20200343030631/LeetCode_26_631.java @@ -0,0 +1,25 @@ +// Version1 +public static int removeDuplicates(int[] nums) { + int result = nums.length; + for (int i = 0; i < nums.length; i++) { + int tmp = nums[i]; + for (int j = i + 1; j < nums.length; j++) { + if (nums[j] == tmp) { + result = result - 1; + break; + } + } + } + return result; + } +// Version2 +public static int removeDuplicates(int[] nums) { + int result = 0; + for (int i = 0; i < nums.length; i++) { + if (nums[i] != nums[result]) { + result++; + nums[result] = nums[i]; + } + } + return result + 1; + } \ No newline at end of file diff --git a/Week_01/G20200343030631/NOTE.md b/Week_01/G20200343030631/NOTE.md index 50de3041..c369c363 100644 --- a/Week_01/G20200343030631/NOTE.md +++ b/Week_01/G20200343030631/NOTE.md @@ -1 +1,5 @@ -学习笔记 \ No newline at end of file +学习笔记 +- keep it simple,keep it stupid!源码中感受到真理; +- 看几遍、读几遍,还得多写几遍; +- 仔细读题,潜藏线索、潜藏坑; +- 先不考虑限定条件下的思路,容易有误导性,虽然解出来了,但是会一直重复整个思路去优化,不能跳开; From d6d932b26922fb503ef1914aff1eb77549a5281b Mon Sep 17 00:00:00 2001 From: mahuiming <807741077@qq.com> Date: Sun, 16 Feb 2020 17:30:47 +0800 Subject: [PATCH 0174/1268] 453-Week 01 --- Week_01/G20200343030453/LeetCode_21_453 | 71 +++++++++++++ Week_01/G20200343030453/LeetCode_26_453 | 16 +++ Week_01/G20200343030453/LeetCode_42_453 | 22 ++++ Week_01/G20200343030453/LeetCode_641_453 | 123 +++++++++++++++++++++++ Week_01/G20200343030453/NOTE.md | 36 ++++++- 5 files changed, 267 insertions(+), 1 deletion(-) create mode 100644 Week_01/G20200343030453/LeetCode_21_453 create mode 100644 Week_01/G20200343030453/LeetCode_26_453 create mode 100644 Week_01/G20200343030453/LeetCode_42_453 create mode 100644 Week_01/G20200343030453/LeetCode_641_453 diff --git a/Week_01/G20200343030453/LeetCode_21_453 b/Week_01/G20200343030453/LeetCode_21_453 new file mode 100644 index 00000000..327c89b4 --- /dev/null +++ b/Week_01/G20200343030453/LeetCode_21_453 @@ -0,0 +1,71 @@ +/* + * @lc app=leetcode.cn id=21 lang=c + * + * [21] 合并两个有序链表 + */ + +// @lc code=start +/** + * Definition for singly-linked list. + * struct ListNode { + * int val; + * struct ListNode *next; + * }; + */ + +// 解法一 迭代 +struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){ + if(!l1 || !l2) { + return l1 == NULL ? l2 : l1; + } + struct ListNode *head = NULL; + if(l1 -> val < l2 -> val) { + head = l1; + l1 = l1 -> next; + } + else { + head = l2; + l2 = l2 -> next; + } + struct ListNode *p = head; + while(l1 || l2) { + if(!l1) { + p -> next = l2; + break; + } + else if(!l2) { + p -> next = l1; + break; + } + else if(l1 -> val < l2 -> val) { + p -> next = l1; + p = p -> next; + l1 = l1 -> next; + } + else { + p -> next = l2; + p = p -> next; + l2 = l2 -> next; + } + } + return head; +} + + +// 解法二 递归 +struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){ + if(!l1) { + return l2; + } + else if(!l2) { + return l1; + } + else if(l1 -> val < l2 -> val) { + l1 -> next = mergeTwoLists(l1 -> next, l2); + return l1; + } + else { + l2 -> next = mergeTwoLists(l1, l2 -> next); + return l2; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030453/LeetCode_26_453 b/Week_01/G20200343030453/LeetCode_26_453 new file mode 100644 index 00000000..ad9d7262 --- /dev/null +++ b/Week_01/G20200343030453/LeetCode_26_453 @@ -0,0 +1,16 @@ +//[26] 删除排序数组中的重复项 +int removeDuplicates(int* nums, int numsSize){ + // 1. 暴力法 + // 2. 双指针 O(n) + if(numsSize < 2) { + return numsSize; + } + int i = 0; + int j = 0; + for(i = 1; i < numsSize; i++) { + if(nums[i] != nums[j]) { + nums[++j] = nums[i]; + } + } + return j + 1; +} \ No newline at end of file diff --git a/Week_01/G20200343030453/LeetCode_42_453 b/Week_01/G20200343030453/LeetCode_42_453 new file mode 100644 index 00000000..25d8d5f6 --- /dev/null +++ b/Week_01/G20200343030453/LeetCode_42_453 @@ -0,0 +1,22 @@ +// [42] 接雨水 + +int trap(int* height, int heightSize){ + + // 暴力法 + int i, j; + int size = 0; + for(i = 0; i < heightSize; i++) { + int leftmax = 0, rightmax = 0; + for(j = 0; j < i; j++) { + leftmax = leftmax < height[j] ? height[j] : leftmax; + } + for(j = i + 1; j < heightSize; j++) { + rightmax = rightmax < height[j] ? height[j] : rightmax; + } + int temp = leftmax < rightmax ? leftmax : rightmax; + if(temp > height[i]) { + size += temp - height[i]; + } + } + return size; +} \ No newline at end of file diff --git a/Week_01/G20200343030453/LeetCode_641_453 b/Week_01/G20200343030453/LeetCode_641_453 new file mode 100644 index 00000000..c7720274 --- /dev/null +++ b/Week_01/G20200343030453/LeetCode_641_453 @@ -0,0 +1,123 @@ +// [641] 设计循环双端队列 + +typedef struct { + int *data; + int capacity; + int head; + int tail; +} MyCircularDeque; + +/** Initialize your data structure here. Set the size of the deque to be k. */ + +bool myCircularDequeIsEmpty(MyCircularDeque* obj); +bool myCircularDequeIsFull(MyCircularDeque* obj); + +MyCircularDeque* myCircularDequeCreate(int k) { + MyCircularDeque *Dq = (MyCircularDeque *)calloc(1 , sizeof(MyCircularDeque)); + Dq -> data = (int *)calloc(k + 1, sizeof(int)); + Dq -> capacity = k + 1; + Dq -> head = Dq -> tail = 0; + return Dq; +} + +/** Adds an item at the front of Deque. Return true if the operation is successful. */ +bool myCircularDequeInsertFront(MyCircularDeque* obj, int value) { + if(!myCircularDequeIsFull(obj)) { + obj -> head = (obj -> head - 1 + obj -> capacity) % obj -> capacity; + obj -> data[obj -> head] = value; + return true; + } + return false; +} + +/** Adds an item at the rear of Deque. Return true if the operation is successful. */ +bool myCircularDequeInsertLast(MyCircularDeque* obj, int value) { + + if(!myCircularDequeIsFull(obj)) { + obj -> data[obj -> tail] = value; + obj -> tail = (obj -> tail + 1) % obj -> capacity; + return true; + } + return false; +} + +/** Deletes an item from the front of Deque. Return true if the operation is successful. */ +bool myCircularDequeDeleteFront(MyCircularDeque* obj) { + + if(!myCircularDequeIsEmpty(obj)) { + obj -> head = (obj -> head + 1) % obj -> capacity; // 问题 + return true; + } + return false; +} + +/** Deletes an item from the rear of Deque. Return true if the operation is successful. */ +bool myCircularDequeDeleteLast(MyCircularDeque* obj) { + + if(!myCircularDequeIsEmpty(obj)) { + obj -> tail = (obj -> tail - 1 + obj -> capacity) % obj -> capacity; + return true; + } + return false; +} + +/** Get the front item from the deque. */ +int myCircularDequeGetFront(MyCircularDeque* obj) { + if(myCircularDequeIsEmpty(obj)) { + return -1; + } + + return obj -> data[obj -> head]; +} + +/** Get the last item from the deque. */ +int myCircularDequeGetRear(MyCircularDeque* obj) { + + if(myCircularDequeIsEmpty(obj)) { + return -1; + } + return obj -> data[(obj -> tail - 1 + obj -> capacity) % obj -> capacity]; +} + +/** Checks whether the circular deque is empty or not. */ +bool myCircularDequeIsEmpty(MyCircularDeque* obj) { + + return obj -> head == obj -> tail ? true : false; +} + +/** Checks whether the circular deque is full or not. */ +bool myCircularDequeIsFull(MyCircularDeque* obj) { + + return (obj -> tail + 1) % obj -> capacity == obj -> head ? true : false; +} + +void myCircularDequeFree(MyCircularDeque* obj) { + if(obj != NULL) { + free(obj -> data); + obj -> data = NULL; + free(obj); + obj = NULL; + } +} + +/** + * Your MyCircularDeque struct will be instantiated and called as such: + * MyCircularDeque* obj = myCircularDequeCreate(k); + * bool param_1 = myCircularDequeInsertFront(obj, value); + + * bool param_2 = myCircularDequeInsertLast(obj, value); + + * bool param_3 = myCircularDequeDeleteFront(obj); + + * bool param_4 = myCircularDequeDeleteLast(obj); + + * int param_5 = myCircularDequeGetFront(obj); + + * int param_6 = myCircularDequeGetRear(obj); + + * bool param_7 = myCircularDequeIsEmpty(obj); + + * bool param_8 = myCircularDequeIsFull(obj); + + * myCircularDequeFree(obj); +*/ \ No newline at end of file diff --git a/Week_01/G20200343030453/NOTE.md b/Week_01/G20200343030453/NOTE.md index 50de3041..fdec6200 100644 --- a/Week_01/G20200343030453/NOTE.md +++ b/Week_01/G20200343030453/NOTE.md @@ -1 +1,35 @@ -学习笔记 \ No newline at end of file +学习笔记 + +学号:G20200343030453 姓名: 马辉明 + +日期: 2020.2.16 + +[21] 合并两个有序链表 题目总结 +(1)迭代法: +归并排序的思想,因为两个链表有序,只做一次排序即可,稍作改进,当其中一个有序表结束时,可以将 next 指向另一个链表的剩余节点,不需要遍历完之后作判断,这样节省了比较时间,时间复杂度 O(n + m) +(2)递归法:终止条件:当 l1 或 l2 为空时,返回剩余 l2 或 l1 结束; +返回值为每一层都已排好序的头指针; +递归内容:当 l1 的值 val 较小时,l1 的 next 指向之后排完序的链表头,否则,l2 的 next 指向排好序的链表头; +时间复杂度:O(n + m)空间复杂度也是一样,递归会消耗(n + m)个栈空间 + +[42] 接雨水 题目总结 +(1) 暴力法 遍历每一根柱子,找出该柱子左右两边最高的柱子取较小值,较小值与当前柱子差值为接雨水数 +此题有很多解法,后续抽空总结... + +[641] 设计循环双端队列 题目总结 https://blog.csdn.net/xiaoma_2018/article/details/103997820 +实现该循环队列,需要注意以下几点: + +1.判断队列为空? 当收尾指针相等,队列为空,head == tail +2.判断队列已满? 当尾指针的下一位等于头指针,队列已满,(tail + 1 + capacity) % capacity == head; +3.初始化队列时? 首尾指针从0开始, head = tail = 0 +4.从头部插入数据? head 指针向前移动, head = (head - 1 + capacity) % capacity +5.从尾部插入数据? tail 指针向后移动, tail = (tail + 1) % capacity +6.从头部删除数据? head 指针向后移动, head = (head + 1) % capacity +7.从尾部删除数据? tail 指针向前移动, tail = (tail - 1 + capacity) % capacity +8.从尾部读取数据? 考虑头部插入(head 前移一位)和尾部插入(插入后,tail后移一位),所以读取data[(tail - 1 + capacity) % capacity] + +[26] 删除排序数组中的重复项 题目总结 + +用双指针遍历 + + From 60d675c417bae4743910fe3bc88055b1cc5a74c3 Mon Sep 17 00:00:00 2001 From: pyluyang <1065311304@qq.com> Date: Sun, 16 Feb 2020 17:33:30 +0800 Subject: [PATCH 0175/1268] =?UTF-8?q?=E7=AE=97=E6=B3=95=E8=AE=AD=E7=BB=83?= =?UTF-8?q?=E8=90=A5=E7=AC=AC=E4=B8=80=E5=91=A8=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...44\346\225\260\344\271\213\345\222\214.py" | 19 ++++++++++++++++++ ...3.\347\247\273\345\212\250\351\233\266.py" | 20 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 "Week_01/G20200343030537/1.\344\270\244\346\225\260\344\271\213\345\222\214.py" create mode 100644 "Week_01/G20200343030537/283.\347\247\273\345\212\250\351\233\266.py" diff --git "a/Week_01/G20200343030537/1.\344\270\244\346\225\260\344\271\213\345\222\214.py" "b/Week_01/G20200343030537/1.\344\270\244\346\225\260\344\271\213\345\222\214.py" new file mode 100644 index 00000000..67fae69a --- /dev/null +++ "b/Week_01/G20200343030537/1.\344\270\244\346\225\260\344\271\213\345\222\214.py" @@ -0,0 +1,19 @@ +# +# @lc app=leetcode id=1 lang=python3 +# +# [1] Two Sum +# +from typing import List +# @lc code=start +class Solution: + def twoSum(self, nums: List[int], target: int) -> List[int]: + if len(nums) <= 1: + return False + hashmap = {} + for i, num in enumerate(nums): + if num in hashmap: + return [hashmap[num], i] + else: + hashmap[target - num] = i +# @lc code=end + diff --git "a/Week_01/G20200343030537/283.\347\247\273\345\212\250\351\233\266.py" "b/Week_01/G20200343030537/283.\347\247\273\345\212\250\351\233\266.py" new file mode 100644 index 00000000..c1c703dc --- /dev/null +++ "b/Week_01/G20200343030537/283.\347\247\273\345\212\250\351\233\266.py" @@ -0,0 +1,20 @@ +# +# @lc app=leetcode.cn id=283 lang=python3 +# +# [283] 移动零 +# +from typing import List +# @lc code=start +class Solution: + def moveZeroes(self, nums: List[int]) -> None: + """ + Do not return anything, modify nums in-place instead. + """ + lastNonZeroFoundAt = 0 + for i in range(len(nums)): + if nums[i] != 0 : + nums[lastNonZeroFoundAt], nums[i] = nums[i] , nums[lastNonZeroFoundAt] + lastNonZeroFoundAt=lastNonZeroFoundAt+1 + +# @lc code=end + From ece6a8cc063c0314ad194c3e137ab6c414057d6f Mon Sep 17 00:00:00 2001 From: zhujiashuai Date: Sun, 16 Feb 2020 17:34:19 +0800 Subject: [PATCH 0176/1268] =?UTF-8?q?=E5=8F=8C=E5=90=91=E9=98=9F=E5=88=97?= =?UTF-8?q?=E7=9A=842=E7=A7=8D=E5=AE=9E=E7=8E=B0=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030523/id_523/.DS_Store | Bin 0 -> 6148 bytes .../id_523/LeetCode_641_523_Array.java | 119 ++++++++++++++ .../id_523/LeetCode_641_523_List.java | 150 ++++++++++++++++++ 3 files changed, 269 insertions(+) create mode 100644 Week_01/G20200343030523/id_523/.DS_Store create mode 100644 Week_01/G20200343030523/id_523/LeetCode_641_523_Array.java create mode 100644 Week_01/G20200343030523/id_523/LeetCode_641_523_List.java diff --git a/Week_01/G20200343030523/id_523/.DS_Store b/Week_01/G20200343030523/id_523/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 Date: Sun, 16 Feb 2020 17:36:08 +0800 Subject: [PATCH 0177/1268] =?UTF-8?q?week=2001=20=E6=80=BB=E7=BB=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030391/NOTE.md | 62 +++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/Week_01/G20200343030391/NOTE.md b/Week_01/G20200343030391/NOTE.md index 107ea7d6..0befe0d1 100644 --- a/Week_01/G20200343030391/NOTE.md +++ b/Week_01/G20200343030391/NOTE.md @@ -1 +1,63 @@ # 学习笔记 + +## 1.数组 + ### 概念 + - 数组是一种线性表的数据结构,用一组连续的内存空间存储相同类型的数据 + - 线性表:每个数据最多只有一个前驱和后继节点如数组、链表、队列、栈 + - 非线性表:树、图、堆 + - 连续的内存空间和相同的数据类型保证了可以实现随机访问 + ### 操作 + - 随机访问:时间复杂度O(1) + - 插入:尾部插入O(1);随机插入O(n) + - 删除:删除最后一个O(1);随机删除O(n) + +## 2. 链表 + ### 概念 + - 链表是一种物理存储单元谁给你非连续、非顺序的存储结构,数据元素的逻辑顺序通过链表中的指针实现 + - 循环链表:尾结点只想头结点,可以是单链表也可以是双链表 + - 单向链表:值、指针;插入删除:O(1);随机访问:O(n) + - 双向链表: 值、prev、next;头部、尾部、给定节点操作O(1) + - 静态链表: 值、指针、下标;用数组描述链表 + ### 操作 + - 随机访问:O(n) + - 插入:随机插入O(n) + - 删除:随机删除O(n) + +## 3.跳表 + ### 概念 + - 在有序的链表的基础上,通过维护对层次的索引链加快查询、插入、删除速度 + ### 操作 + - 查询:O(log(n)) + - 插入:O(log(n)) + - 删除:O(log(n)) +## 4.栈 + ### 概念 + - 栈是一种操作受限的线性表,体现在只能在一端插入删除数据,先进后出 FILO + - 数组实现:顺序栈;链表实现:链式栈 + ### 操作 + - 入栈push:栈顶压入O(1) + - 出栈pop:栈顶取出O(1) + - 访问栈顶:peekO(1) +## 5.队列 + ### 概念 + - 队列是一种操作受限的线性表,先进先出FILO + - head指针+tail指针 + - 顺序队列:isFull = tail==capacity;isEmpty = head==tail; + - 双端对垒:同时具有队列和栈的特性,支持从两端添加、取出元素 + ### 操作 + - 入队:队尾加入O(1) + - 出队:队首取出O(1) +## 6.优先队列 + ### 概念 + - 使用堆实现,元素具有优先级,入队最大(最小)优先级加入堆顶,出队最大(最小)优先级弹出 + ### 操作 + - 入队:堆实现log(n) + - 出队:堆实现log(n) + + +## 算法套路 + - 五毒神掌 + - 升维思想 + - 空间换时间 + - 阅读代码添加注释 + - 变量命名辅助理解 \ No newline at end of file From 38f828dc151afdd9d7dc0ec5a57be6c9056a7a69 Mon Sep 17 00:00:00 2001 From: dontaire Date: Sun, 16 Feb 2020 17:37:10 +0800 Subject: [PATCH 0178/1268] week 01 homework --- Week_01/G20200343030561/Leetcode_042_561.java | 29 ++++++ Week_01/G20200343030561/Leetcode_066_561.java | 29 ++++++ Week_01/G20200343030561/Leetcode_088_561.java | 20 +++++ Week_01/G20200343030561/Leetcode_641_561.java | 88 +++++++++++++++++++ Week_01/G20200343030561/NOTE.md | 1 - Week_01/G20200343030561/NOTE.org | 72 +++++++++++++++ 6 files changed, 238 insertions(+), 1 deletion(-) create mode 100644 Week_01/G20200343030561/Leetcode_042_561.java create mode 100644 Week_01/G20200343030561/Leetcode_066_561.java create mode 100644 Week_01/G20200343030561/Leetcode_088_561.java create mode 100644 Week_01/G20200343030561/Leetcode_641_561.java delete mode 100644 Week_01/G20200343030561/NOTE.md create mode 100644 Week_01/G20200343030561/NOTE.org diff --git a/Week_01/G20200343030561/Leetcode_042_561.java b/Week_01/G20200343030561/Leetcode_042_561.java new file mode 100644 index 00000000..33dfe555 --- /dev/null +++ b/Week_01/G20200343030561/Leetcode_042_561.java @@ -0,0 +1,29 @@ +/* + * @lc app=leetcode.cn id=42 lang=java + * + * [42] 接雨水 + */ + +// @lc code=start +class Solution { + public int trap(final int[] height) { + if (height.length < 2) return 0; + + int ret = 0; + int len = height.length; + int[] left = new int[len]; + int[] right = new int[len]; + left[0] = height[0]; + for(var i = 1; i < len; ++ i) + left[i] = Math.max(height[i], left[i - 1]); + right[len - 1] = height[len - 1]; + for(var i = len - 2; i >= 0; --i ) + right[i] = Math.max(height[i], right[i + 1]); + for(var i = 1; i < len - 1 ; ++i) { + ret += Math.min(left[i], right[i]) - height[i]; + } + return ret; + } +} +// @lc code=end + diff --git a/Week_01/G20200343030561/Leetcode_066_561.java b/Week_01/G20200343030561/Leetcode_066_561.java new file mode 100644 index 00000000..44ec539d --- /dev/null +++ b/Week_01/G20200343030561/Leetcode_066_561.java @@ -0,0 +1,29 @@ +/* + * @lc app=leetcode.cn id=66 lang=java + * + * [66] 加一 + */ + +// @lc code=start +class Solution { + public int[] plusOne(int[] digits) { + for(var i = digits.length - 1; i >= 0; i--) { + + if (digits[i] == 9) { + digits[i] = 0; + } else { + digits[i] ++; + return digits; + } + + } + int[] ret = new int[digits.length + 1]; + for (var i = 0; i < ret.length; i++) { + ret[i] = 0; + } + ret[0] = 1; + return ret; + } +} +// @lc code=end + diff --git a/Week_01/G20200343030561/Leetcode_088_561.java b/Week_01/G20200343030561/Leetcode_088_561.java new file mode 100644 index 00000000..878a9636 --- /dev/null +++ b/Week_01/G20200343030561/Leetcode_088_561.java @@ -0,0 +1,20 @@ +/* + * @lc app=leetcode.cn id=88 lang=java + * + * [88] 合并两个有序数组 + */ + +// @lc code=start +class Solution { + public void merge(int[] nums1, int m, int[] nums2, int n) { + int p = m-- + n-- - 1; + while (m >= 0 && n >= 0) + nums1[p--] = nums1[m] > nums2[n] ? nums1[m--] : nums2[n--]; + + + while (n >= 0) + nums1[p--] = nums2[n--]; + } +} +// @lc code=end + diff --git a/Week_01/G20200343030561/Leetcode_641_561.java b/Week_01/G20200343030561/Leetcode_641_561.java new file mode 100644 index 00000000..ef19d7ff --- /dev/null +++ b/Week_01/G20200343030561/Leetcode_641_561.java @@ -0,0 +1,88 @@ +/* + * @lc app=leetcode.cn id=641 lang=java + * + * [641] 设计循环双端队列 + */ + +// @lc code=start +class MyCircularDeque { + int[] arr; + int front; + int rear; // + int maxLength; + /** Initialize your data structure here. Set the size of the deque to be k. */ + public MyCircularDeque(int k) { + maxLength = k + 1; + front = 0; + rear = 0; + arr = new int[maxLength]; + } + + /** Adds an item at the front of Deque. Return true if the operation is successful. */ + public boolean insertFront(int value) { + if (isFull()) return false; + front = (front - 1 + maxLength) % maxLength; // change pointer before assign value + arr[front] = value; + return true; + } + + /** Adds an item at the rear of Deque. Return true if the operation is successful. */ + public boolean insertLast(int value) { + if(isFull()) return false; + arr[rear] = value; + rear = (rear + 1) % maxLength;// change pointer after assign value; whatever iF or iL, one of them should assign value before; + return true; + } + + /** Deletes an item from the front of Deque. Return true if the operation is successful. */ + public boolean deleteFront() { + if(isEmpty()) return false; + front = (front + 1) % maxLength; + return true; + } + + /** Deletes an item from the rear of Deque. Return true if the operation is successful. */ + public boolean deleteLast() { + if(isEmpty()) return false; + rear = (rear - 1 + maxLength) % maxLength; + return true; + } + + /** Get the front item from the deque. */ + public int getFront() { + if (isEmpty()) return -1; + return arr[front]; + } + + /** Get the last item from the deque. */ + public int getRear() { + if (isEmpty()) return -1; + //as pointer plus one after assign value + return arr[(rear - 1 + maxLength) % maxLength]; + } + + /** Checks whether the circular deque is empty or not. */ + public boolean isEmpty() { + return front == rear; + } + + /** Checks whether the circular deque is full or not. */ + public boolean isFull() { + return (rear + 1) % maxLength == front; + } +} + +/** + * Your MyCircularDeque object will be instantiated and called as such: + * MyCircularDeque obj = new MyCircularDeque(k); + * boolean param_1 = obj.insertFront(value); + * boolean param_2 = obj.insertLast(value); + * boolean param_3 = obj.deleteFront(); + * boolean param_4 = obj.deleteLast(); + * int param_5 = obj.getFront(); + * int param_6 = obj.getRear(); + * boolean param_7 = obj.isEmpty(); + * boolean param_8 = obj.isFull(); + */ +// @lc code=end + diff --git a/Week_01/G20200343030561/NOTE.md b/Week_01/G20200343030561/NOTE.md deleted file mode 100644 index 50de3041..00000000 --- a/Week_01/G20200343030561/NOTE.md +++ /dev/null @@ -1 +0,0 @@ -学习笔记 \ No newline at end of file diff --git a/Week_01/G20200343030561/NOTE.org b/Week_01/G20200343030561/NOTE.org new file mode 100644 index 00000000..5a441c9c --- /dev/null +++ b/Week_01/G20200343030561/NOTE.org @@ -0,0 +1,72 @@ +* 学习总结 +** Java 的基本功有些差,比如for(data_type variable:array)这样的遍历方式之前都没用过。还需要多看别人的解法多熟悉一下。 +** 看到新题 想到暴力解法也要写出来,不要不屑于暴力法,很考验基本功。 +** 看到旧题 想到怎么解了也要再解一遍,就像数学题,总是自以为会了,实则还是会犯马虎。 +** 基本功最考验两点,解题在这浪费好多时间 +*** 下标i 是否 +1 or -1 +*** 判断条件 > or < 还是 >= or <= + +* 源码分析 +** Queue 源码 +*** Queue +Java中Queue为Interface,继承Collection,说明是集合家族的一员 +**** 包含如下方法: +- add +- offer +- remove +- poll +- element +- peek +*** AbstractQueue +AbstractQueue为Queue的一个实现类 +**** 封装3个方法 +- add +- clear +- element +分别调用 +- offer +- poll +- peek +并加以判断,抛出异常。 +**** 2个批量方法 +- clear +- addAll +分别调用 +- poll +- add +*** LinkedList +Queue较为常用的实现方式之一 +**** 与 Queue 相关的方法 +***** offer +offer 调用 add, add 调用 linkLast 并返回真,linkLast修改last.next、替换last、判断之前的last是否为空 为空则将新节点设为first +***** poll +poll 判断是否为空 不为空则调用 ulinkFirst,ulinkFirst 修改指针,将参数的item返回。 +***** peek +判断是否为空,返回first的item。 +** Priority Queue 源码 +Java 中的 Priority Queue 使用二叉堆维护队列 +*** 入队 +add 别名 offer,offer 判断大小、调用 siftUp, siftUp 根据是否有比较器 使用不同的方法,siftUpComparable 循环比较父节点与参数的大小 并交换位置 直到出现父节点比参数小为止。 +*** 扩容 +*** 出队 +remove 调用 poll,poll 取出队首、将队尾元素设为 null --size仍大于0 将末元素做为参数调用siftDown,siftDown 根据是否有比较器调用不同的方法,siftDownComparable 循环判断 (左右子节点较小者 与 参数)的大小 若参数大则交换位置 +*** 取首 +element 调用 peek, peek 返回队首queue[0] +* 改写示例代码-Deque +#+begin_src java + Deque deque = new LinkedList(); + + deque.addLast("a"); + deque.addLast("b"); + deque.addLast("c"); + System.out.println(deque); + + String str = deque.getFirst(); + System.out.println(str); + System.out.println(deque); + + while(deque.size() > 0) { + System.out.println(deque.pollFirst()); + } + System.out.println(); +#+end_src From 598ac711d40e4b2e76cc422607fe470db5946510 Mon Sep 17 00:00:00 2001 From: songkaida Date: Sun, 16 Feb 2020 17:44:04 +0800 Subject: [PATCH 0179/1268] 429-Week01 --- Week_01/G20200343030429/LeetCode_189_429.java | 67 +++++++++++++++++++ Week_01/G20200343030429/LeetCode_26_429.java | 27 ++++++++ 2 files changed, 94 insertions(+) create mode 100644 Week_01/G20200343030429/LeetCode_189_429.java create mode 100644 Week_01/G20200343030429/LeetCode_26_429.java diff --git a/Week_01/G20200343030429/LeetCode_189_429.java b/Week_01/G20200343030429/LeetCode_189_429.java new file mode 100644 index 00000000..c1344da9 --- /dev/null +++ b/Week_01/G20200343030429/LeetCode_189_429.java @@ -0,0 +1,67 @@ +package leetcode.week01; + +/** + * @author Abner.S + * @date 2020/2/16 16:17 + * @description No. 189 rotate-array + * 旋转数组 + */ +public class LeetCode_189_429 { + + /** + * 思路1:每次将数组依次移动一位,循环 k 次 + * @param nums + * @param k + */ + public void rotate1(int[] nums, int k) { + int temp; + int previous; + for (int i = 0; i < k; i++) { + previous = nums[nums.length -1]; + + for (int j = 0; j < nums.length; j++) { + temp = nums[j]; + nums[j] = previous; + previous = temp; + } + } + } + + /** + * 思路2:反转,移动 k 次, k % length 对应的元素即成为首个元素, k = k % length + * 有可能存在 k > length 的情况 + * 1、将所有元素反转 + * 2、反转前 k 个元素,这 k 个元素恰好是从原数组末端要移动到数组前端的元素 + * 3、将 n - k 个元素反转,即原来的顺序 + * 4、得到结果 + * @param nums + * @param k + */ + public void rotate2(int[] nums, int k) { + // 得到旋转的具体位置 + k %= nums.length; + // 反转所有元素 + reverse(nums, 0, nums.length); + // 反转前 k 个元素 + reverse(nums, 0, k - 1); + // 反转剩下元素 + reverse(nums, k, nums.length - 1); + } + + /** + * 反转数组元素 + * @param nums 传入数组 + * @param start 反转起始位置 + * @param end 反转结束位置 + */ + private void reverse(int[] nums, int start, int end) { + // 从两侧向中间夹逼替换元素 + while (start < end) { + int temp = nums[start]; + nums[start] = nums[end]; + nums[end] = temp; + start++; + end--; + } + } +} diff --git a/Week_01/G20200343030429/LeetCode_26_429.java b/Week_01/G20200343030429/LeetCode_26_429.java new file mode 100644 index 00000000..19e0f330 --- /dev/null +++ b/Week_01/G20200343030429/LeetCode_26_429.java @@ -0,0 +1,27 @@ +package leetcode.week01; + +/** + * @author Abner.S + * @date 2020/2/16 14:47 + * @description No.26 remove-duplicates-from-sorted-array + * 删除排序数组中的重复项 + */ +public class LeetCode_26_429 { + + // 思路1:暴力解法 双重循环,发现不妥,可能需要额外的空间 + // 思路2:双指针,快慢指针 + public int removeDuplicates(int[] nums) { + if (nums.length < 2) { + return nums.length; + } + int temp = 0; + for (int i = 1; i < nums.length; i++) { + if (nums[i] != nums[temp]) { + temp++; + nums[temp] = nums[i]; + } + } + return temp + 1; + } + +} From 5641c5d85e15a9dd1e65f061481e698c1657652b Mon Sep 17 00:00:00 2001 From: linxun Date: Sun, 16 Feb 2020 17:46:49 +0800 Subject: [PATCH 0180/1268] add demo line --- Week_00/G20200343030605/NOTE.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Week_00/G20200343030605/NOTE.md b/Week_00/G20200343030605/NOTE.md index 50de3041..c556ff72 100644 --- a/Week_00/G20200343030605/NOTE.md +++ b/Week_00/G20200343030605/NOTE.md @@ -1 +1,2 @@ -学习笔记 \ No newline at end of file +学习笔记 +### Demo From e58dffc1b9d46383e3fb60108a73b158b574e0bf Mon Sep 17 00:00:00 2001 From: Ryeagler Date: Sun, 16 Feb 2020 17:54:42 +0800 Subject: [PATCH 0181/1268] 083-Week01 --- .../G20190379010083/LeetCode_001_083.swift | 35 ++++++ .../G20190379010083/LeetCode_011_083.swift | 46 ++++++++ .../G20190379010083/LeetCode_015_083.swift | 100 ++++++++++++++++++ .../G20190379010083/LeetCode_020_083.swift | 31 ++++++ .../G20190379010083/LeetCode_070_083.swift | 33 ++++++ .../G20190379010083/LeetCode_084_083.swift | 29 +++++ .../G20190379010083/LeetCode_189_083.swift | 62 +++++++++++ .../G20190379010083/LeetCode_283_083.swift | 63 +++++++++++ 8 files changed, 399 insertions(+) create mode 100644 Week_01/G20190379010083/LeetCode_001_083.swift create mode 100644 Week_01/G20190379010083/LeetCode_011_083.swift create mode 100644 Week_01/G20190379010083/LeetCode_015_083.swift create mode 100644 Week_01/G20190379010083/LeetCode_020_083.swift create mode 100644 Week_01/G20190379010083/LeetCode_070_083.swift create mode 100644 Week_01/G20190379010083/LeetCode_084_083.swift create mode 100644 Week_01/G20190379010083/LeetCode_189_083.swift create mode 100644 Week_01/G20190379010083/LeetCode_283_083.swift diff --git a/Week_01/G20190379010083/LeetCode_001_083.swift b/Week_01/G20190379010083/LeetCode_001_083.swift new file mode 100644 index 00000000..4f662a23 --- /dev/null +++ b/Week_01/G20190379010083/LeetCode_001_083.swift @@ -0,0 +1,35 @@ +// +// 0001_2sum.swift +// AlgorithmPractice +// +// https://leetcode-cn.com/problems/two-sum/ +// Created by Ryeagler on 2020/2/14. +// Copyright © 2020 Ryeagle. All rights reserved. +// + +import Foundation + + // 暴力求解 + func twoSumBruteForce(_ nums: [Int], _ target: Int) -> [Int] { + for i in stride(from: 0, to: nums.count, by: 1) { + for j in stride(from: i + 1, to: nums.count, by: 1) { + if nums[i] + nums[j] == target { + return [i, j] + } + } + } + return [] + } + + func twoSum(_ nums: [Int], _ target: Int) -> [Int] { + var map: [Int: Int] = [Int: Int]() + for i in stride(from: 0, to: nums.count, by: 1) { + let current = nums[i] + let another = target - current + if map[another] != nil { + return [i, map[another]!] + } + map.updateValue(i, forKey: nums[i]) + } + return [] + } diff --git a/Week_01/G20190379010083/LeetCode_011_083.swift b/Week_01/G20190379010083/LeetCode_011_083.swift new file mode 100644 index 00000000..6b27d0bb --- /dev/null +++ b/Week_01/G20190379010083/LeetCode_011_083.swift @@ -0,0 +1,46 @@ +// +// 0011_ContainerWithMostWater.swift +// AlgorithmPractice +// +// https://leetcode-cn.com/problems/container-with-most-water/ +// Created by Ryeagler on 2020/2/11. +// Copyright © 2020 Ryeagle. All rights reserved. +// + +import Foundation + + +class ContainerWithMostWater { + // 暴力解法,这个解法在leetcode上超过了时间限制😂 + func maxAreaByBruteForce(_ height: [Int]) -> Int { + var maxArea = 0 + for i in stride(from: 0, to: height.count, by: 1) { + for j in stride(from: i + 1, to: height.count, by: 1) { + let area = (j - i) * min(height[i], height[j]) + maxArea = max(maxArea, area) + } + } + return maxArea + } + + // 双指针解法 + func maxArea(_ height: [Int]) -> Int { + if height.count <= 0 { + return 0 + } + var left = 0 + var right = height.count - 1 + + var maxArea = 0 + while left < right { + let area = (right - left) * (min(height[left], height[right])) + maxArea = max(maxArea, area) + if height[left] < height[right] { + left += 1 + } else { + right -= 1 + } + } + return maxArea + } +} diff --git a/Week_01/G20190379010083/LeetCode_015_083.swift b/Week_01/G20190379010083/LeetCode_015_083.swift new file mode 100644 index 00000000..799dd237 --- /dev/null +++ b/Week_01/G20190379010083/LeetCode_015_083.swift @@ -0,0 +1,100 @@ +// +// 0015_3num.swift +// AlgorithmPractice +// +// https://leetcode-cn.com/problems/3sum/ +// Created by Ryeagler on 2020/2/12. +// Copyright © 2020 Ryeagle. All rights reserved. +// + +import Foundation + +class ThreeSum { + // 暴力方式虽然能解出所有三个数和为0的数组,但是不符合题目中要求的不能包含重复的三元组这个条件 + func threeSumBruteForce(_ nums: [Int]) -> [[Int]] { + var result = [[Int]]() + for i in stride(from: 0, to: nums.count, by: 1) { + for j in stride(from: i + 1, to: nums.count, by: 1) { + for k in stride(from: j + 1, to: nums.count, by: 1) { + if nums[i] + nums[j] + nums[k] == 0 { + var arr = [Int]() + // 错误加下标 + arr.append(nums[i]) + arr.append(nums[j]) + arr.append(nums[k]) + result.append(arr) + break + } + } + } + } + return result + } + + // 这个解法最后还是没有通过leetcode的方法 + func threeSumHashMap(_ nums: [Int]) -> [[Int]] { + var map: [Int: Int] = [Int: Int]() + for i in stride(from: 0, to: nums.count, by: 1) { + map.updateValue(i, forKey: nums[i]) + } + + var result: [[Int]] = [[Int]]() + var resultMap: [[Int]: Bool] = [[Int]: Bool]() + for i in stride(from: 0, to: nums.count, by: 1) { + for j in stride(from: i + 1, to: nums.count, by: 1) { + let another = 0 - (nums[i] + nums[j]) + if map[another] != nil { + // 少了这一步,就会导致3元组中,同一个下标对应的数字出现多次 + if map[another] == i || map [another] == j { + continue + } + let arr = [nums[i], nums[j], another].sorted() + + // 这一步是为了去除重复的 + if resultMap[arr] == true { + continue + } + result.append(arr) + resultMap.updateValue(true, forKey: arr) + } + } + } + + return result + } + + func threeSum(_ nums: [Int]) -> [[Int]] { + if nums.count < 3 { + return [] + } + var result = [[Int]]() + let sortedNums = nums.sorted() + for var i in 0.. 0 { + return [] + } + let last = sortedNums.count - 1 + while i + 1 < last && sortedNums[i] == sortedNums[i+1] { + i += 1 + } + var left = i + 1 + var right = last + while left < right { + let sum = sortedNums[i] + sortedNums[left] + sortedNums[right] + if sum == 0 { + result.append([sortedNums[i], sortedNums[left], sortedNums[right]]) + } + if sum <= 0 { + repeat { + left += 1 + } while left < last && sortedNums[left] == sortedNums[left - 1] + } else { + repeat { + right -= 1 + } while right > 0 && sortedNums[right] == sortedNums[right + 1] + } + } + } + return result + } +} diff --git a/Week_01/G20190379010083/LeetCode_020_083.swift b/Week_01/G20190379010083/LeetCode_020_083.swift new file mode 100644 index 00000000..c665e96c --- /dev/null +++ b/Week_01/G20190379010083/LeetCode_020_083.swift @@ -0,0 +1,31 @@ +// +// 0020_ValidParentheses.swift +// AlgorithmPractice +// +// https://leetcode-cn.com/problems/valid-parentheses/ +// Created by Ryeagler on 2020/2/15. +// Copyright © 2020 Ryeagle. All rights reserved. +// + +import Foundation + +class ValidParentheses { + func isValid(_ s: String) -> Bool { + let map: [Character: Character] = ["[": "]", "(": ")", "{": "}"] + var stack: Stack = Stack() + for character in s { + if map[character] != nil { + stack.push(character) + } else { + if let top = stack.pop() { + if map[top] != character { + return false + } + } else { + return false + } + } + } + return stack.isEmpty + } +} diff --git a/Week_01/G20190379010083/LeetCode_070_083.swift b/Week_01/G20190379010083/LeetCode_070_083.swift new file mode 100644 index 00000000..ff38e8d2 --- /dev/null +++ b/Week_01/G20190379010083/LeetCode_070_083.swift @@ -0,0 +1,33 @@ +// +// 0070_ClimbingStairs.swift +// AlgorithmPractice +// +// https://leetcode-cn.com/problems/climbing-stairs/ +// Created by Ryeagler on 2020/2/12. +// Copyright © 2020 Ryeagle. All rights reserved. +// + +import Foundation + +class ClimbingStairs { + // 递归法,递归的方式超出时间限制 + func climbStairsRecursion(_ n: Int) -> Int { + if n <= 2 { + return n + } + return climbStairsRecursion(n - 1) + climbStairsRecursion(n - 2) + } + + func climbStairs(_ n: Int) -> Int { + if n <= 2 { + return n + } + var first = 1, second = 2, third = 3 + for _ in stride(from: 3, through: n, by: 1) { + third = first + second + first = second + second = third + } + return third + } +} diff --git a/Week_01/G20190379010083/LeetCode_084_083.swift b/Week_01/G20190379010083/LeetCode_084_083.swift new file mode 100644 index 00000000..67b51075 --- /dev/null +++ b/Week_01/G20190379010083/LeetCode_084_083.swift @@ -0,0 +1,29 @@ +// +// 0084-LargestRectangleInHistogram.swift +// AlgorithmPractice +// +// https://leetcode-cn.com/problems/largest-rectangle-in-histogram/ +// Created by Ryeagler on 2020/2/15. +// Copyright © 2020 Ryeagle. All rights reserved. +// + +import Foundation + +class LargestRectangleInHistogram { + /// 暴力解法 + func largestRectangleAreaBruteForce(_ heights: [Int]) -> Int { + var maxArea = 0 + for i in 0.. Int { + return 0 + } +} diff --git a/Week_01/G20190379010083/LeetCode_189_083.swift b/Week_01/G20190379010083/LeetCode_189_083.swift new file mode 100644 index 00000000..90ec8bbd --- /dev/null +++ b/Week_01/G20190379010083/LeetCode_189_083.swift @@ -0,0 +1,62 @@ +// +// 0189_RotateArray.swift +// AlgorithmPractice +// +// Created by Ryeagler on 2020/2/16. +// Copyright © 2020 Ryeagle. All rights reserved. +// + +import Foundation + +class RotateArray { + /// 三次反转法,时间复杂度为O(n),空间复杂度为O(1) + func rotate(_ nums: inout [Int], _ k: Int) { + if k < 0 {return} + // 题目中要求是向右移动k位,最初没有考虑到k大于数组长度的情况 + reverse(&nums, 0, nums.count - 1) + reverse(&nums, 0, k % nums.count - 1) + reverse(&nums, k % nums.count, nums.count - 1) + } + + /// 通过额外的空间反转,时间复杂度为O(n),空间复杂度为O(1) + func rotateAnotherArray(_ nums: inout [Int], _ k: Int) { + var tmpNums = [Int](repeating: 0, count: k) + for i in 0..= nums.count { + return + } + var left = start + var right = end + while left < right { + let tmp = nums[left] + nums[left] = nums[right] + nums[right] = tmp + left += 1 + right -= 1 + } + } +} diff --git a/Week_01/G20190379010083/LeetCode_283_083.swift b/Week_01/G20190379010083/LeetCode_283_083.swift new file mode 100644 index 00000000..65201aef --- /dev/null +++ b/Week_01/G20190379010083/LeetCode_283_083.swift @@ -0,0 +1,63 @@ +// +// 0283_MoveZeros.swift +// AlgorithmPractice +// +// https://leetcode-cn.com/problems/move-zeroes/ +// Created by Ryeagler on 2020/2/11. +// Copyright © 2020 Ryeagle. All rights reserved. +// + +import Foundation + +class MoveZerosSolution { + /// 两遍循环法 + func moveZeroes(_ nums: inout [Int]) { + var countOfNozero = 0 + for i in stride(from: 0, to: nums.count, by: 1) { + if nums[i] != 0 { + nums[countOfNozero] = nums[i] + countOfNozero += 1 + } + } + + for i in stride(from: countOfNozero, to: nums.count, by: 1) { + nums[i] = 0 + } + } + + /// 一次循环:快排思想 + func moveZeroesQs(_ nums: inout [Int]) { + // 第一个指针到那些需要移动前面的数 + // 第二个指针找到将要交换 + var j = 0 + for i in stride(from: 0, to: nums.count, by: 1) { + if (nums[i] != 0) { + let tmp = nums[i] + nums[i] = nums[j] + nums[j] = tmp + j += 1 + } + } + } + + /// 快速分割 + func qsDivide(_ nums: inout [Int]) { + if nums.count <= 0 { + return + } + let right = nums.count - 1 + let pivot = nums[right] + var j = 0 + for i in stride(from: 0, to: nums.count - 1, by: 1) { + if nums[i] <= pivot { + let tmp = nums[i] + nums[i] = nums[j] + nums[j] = tmp + j += 1 + } + } + let tmp = nums[right] + nums[right] = nums[j] + nums[j] = tmp + } +} From 942cce8132b5a6294f17cbc3d99193c0a507ba91 Mon Sep 17 00:00:00 2001 From: FatWhale <59955510+FatFat-Whale@users.noreply.github.com> Date: Sun, 16 Feb 2020 17:55:17 +0800 Subject: [PATCH 0182/1268] Update NOTE.md --- Week_01/G20200343030443/NOTE.md | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/Week_01/G20200343030443/NOTE.md b/Week_01/G20200343030443/NOTE.md index e0c455d0..73eaa214 100644 --- a/Week_01/G20200343030443/NOTE.md +++ b/Week_01/G20200343030443/NOTE.md @@ -1,9 +1,8 @@ 问题1:重写DequeDemo + import java.util.Deque; import java.util.LinkedList; - public class DequeDemo { - public static void main(String[] args) { Deque deque = new LinkedList(); deque.offerFirst("a"); @@ -17,6 +16,16 @@ public class DequeDemo { System.out.println(deque.pollFirst()); } System.out.println(deque); - } } + +问题2:分析queue源码: + 接口Queue继承于Collection接口,除Collection中声明方法外,增加声明了六个针对队列的基本操作,根据功能性分为三组:新增元素add()/offer()、出队元素remove()/poll()、复制队首元素element()/peek(),其中 add()/remove()/element()会在操作失败时抛出相应异常。 + PriorityQueue为类,实现了基本的Queue操作,还支持在添加或删除元素时根据权值来排序,对自定义类可通过传入构造器来进行权值判定。 + 1. 在添加元素时,其内部调用链为:add->offer->siftUp->siftUpUsingComparator(提供构造器)/siftUpComparable(元素自然顺序) + 2. 在删除元素时,其内部调用链为:poll->siftDownComparable(元素自然顺序)/siftDownUsingComparator(提供构造器) + 另外,在源码中,队列是以Object[] 数组来存储,以二叉树实现排序存储.在sift* 中均设定了排序及调整策略。 + PriorityQueue类支持动态扩容(grow函数),当当前容量为64以内时,每次扩容为2倍+2,大于等于64时,每次扩为1.5倍。内部设定元素最大值为2^31-8。如果扩容后大于最大值,则会判断当前所需数组大小是否大于最大值,如大于最大值,则返回2^31作为扩容后大小。 + +课后总结:第一周主要为线性结构,理解上难点不多,但是做题时经常第一想法要复杂很多,需要经过详细验算才能得出一个较为复杂的方案,还需要根据老师提供的思想进行多练习。从分析源码的过程中,对JAVA源代码的写作风格也有所学习,对自顶向下的编程思想有了更多的感悟,后续在遇到复杂编程时还需要多加练习。 + From fa8b23c7c5619665fd69b273a031fbf1b205d61f Mon Sep 17 00:00:00 2001 From: Sun Liang Date: Sun, 16 Feb 2020 19:02:02 +0900 Subject: [PATCH 0183/1268] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E5=91=A8=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E7=BB=83=E4=B9=A0=E4=B8=89=E6=95=B0=E4=B9=8B=E5=92=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030509/015_509.java | 67 ++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 Week_01/G20200343030509/015_509.java diff --git a/Week_01/G20200343030509/015_509.java b/Week_01/G20200343030509/015_509.java new file mode 100644 index 00000000..acc1a819 --- /dev/null +++ b/Week_01/G20200343030509/015_509.java @@ -0,0 +1,67 @@ +import java.util.Arrays; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; + +/* + * @lc app=leetcode.cn id=15 lang=java + * + * [15] 三数之和 + */ + +// @lc code=start +class Solution015 { + + public static void main( String[] args) { + int[] nums = {-1, 0 , 1, 2, -1, -4}; + List> list = threeSum2(nums); + System.out.println(list); + } + + public static List> threeSum(int[] nums) { + List> list = new LinkedList<>(); + Arrays.sort(nums); + for (int i = 0; i < nums.length - 2; i++) { + if (i == 0 || (i > 0 && nums[i - 1] != nums[i])) { + int left = i + 1, right = nums.length - 1; + while (left < right) { + if (nums[i] + nums[left] + nums[right] == 0) { + list.add(Arrays.asList(nums[i], nums[left], nums[right])); + while (left < right && nums[left] == nums[left + 1]) { + left++; + } + while (left < right && nums[right] == nums[right - 1]) { + right--; + } + left++; + right--; + } else if (nums[i] + nums[left] + nums[right] > 0) { + right--; + } else { + left++; + } + } + } + } + return list; + } + + public static List> threeSum2(int[] nums) { + List> list = new LinkedList<>(); + //暴力法,时间没通过 + for (int i = 0; i < nums.length -2; i++) { + for (int j = i +1; j < nums.length - 1; j++) { + for (int k = j + 1; k < nums.length; k++) { + if ( nums[i] + nums[j] + nums[k] == 0) { + List temp = Arrays.asList(nums[i], nums[j], nums[k]); + Collections.sort(temp); + if ( !list.contains(temp)) { + list.add(temp); + } + } + } + } + } + return list; + } +} \ No newline at end of file From 443b2faa2f4271932a72b39773129b175abfbaeb Mon Sep 17 00:00:00 2001 From: ZhangChenyang <847184430@qq.com> Date: Sun, 16 Feb 2020 18:15:09 +0800 Subject: [PATCH 0184/1268] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E5=91=A8=E5=88=B7?= =?UTF-8?q?=E9=A2=98=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030571/NOTE.md | 2 +- .../main/merge-sorted-array.go | 53 ++++++++++++ .../remove-duplicates-from-sorted-array.go | 81 +++++++++++++++++++ Week_01/G20200343030571/main/rotate-array.go | 69 ++++++++++++++++ 4 files changed, 204 insertions(+), 1 deletion(-) create mode 100644 Week_01/G20200343030571/main/merge-sorted-array.go create mode 100644 Week_01/G20200343030571/main/remove-duplicates-from-sorted-array.go create mode 100644 Week_01/G20200343030571/main/rotate-array.go diff --git a/Week_01/G20200343030571/NOTE.md b/Week_01/G20200343030571/NOTE.md index 50de3041..4f6b8afb 100644 --- a/Week_01/G20200343030571/NOTE.md +++ b/Week_01/G20200343030571/NOTE.md @@ -1 +1 @@ -学习笔记 \ No newline at end of file +学习笔记 diff --git a/Week_01/G20200343030571/main/merge-sorted-array.go b/Week_01/G20200343030571/main/merge-sorted-array.go new file mode 100644 index 00000000..0134b336 --- /dev/null +++ b/Week_01/G20200343030571/main/merge-sorted-array.go @@ -0,0 +1,53 @@ +package main +/* +合并两个有序数组: + 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 + + 说明: + 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 + 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 + + 示例: + 输入: + nums1 = [1,2,3,0,0,0], m = 3 + nums2 = [2,5,6], n = 3 + + 输出: [1,2,2,3,5,6] +*/ +/* + 暴力法:用nums2从头到尾依次跟nums1比较,小于等于则插入。 + O(m*n) + + 排序法:直接插到尾部然后排序 + O((n+m)log(n+m)) + +*/ + +/* + 去看了一眼题解,发现原来只要从后往前插入数据,就可以省去了暴力法多次在元素中间 + 插入元素的开销,妙啊 + +*/ +func merge(nums1 []int, m int, nums2 []int, n int) { + len1 := m - 1 + len2 := n - 1 + len := m + n - 1 + + for { + if len1 < 0 || len2 < 0 { + break + } + if nums2[len2] >= nums1[len1] { + nums1[len] = nums2[len2] + len2-- + } else { + nums1[len] = nums1[len1] + len1-- + } + len-- + } + if len2 >= 0 { + copy(nums1[0:len2+1], nums2[0:len2+1]) + } + +} diff --git a/Week_01/G20200343030571/main/remove-duplicates-from-sorted-array.go b/Week_01/G20200343030571/main/remove-duplicates-from-sorted-array.go new file mode 100644 index 00000000..3db37f3f --- /dev/null +++ b/Week_01/G20200343030571/main/remove-duplicates-from-sorted-array.go @@ -0,0 +1,81 @@ +package main +/* +删除排序数组中的重复项: + +给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 +不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O (1) 额外空间的条件下完成。 +*/ + + +/* + 一开始自己能想出个大概思路,应该也算是属于“用空间换时间”范围里的。 + 就是在一次遍历中,用两个指针,一个指针负责遍历,一个指针负责记录“遇到下一个非重复项的时候应该插入的地方” + 然后用一个变量temp来存储应该与遍历指针进行比对来看是否重复的数,也就是遇到的最新的非重复的数。 +*/ + +/* + 以下是自己按照思路,并修改直到通过的代码。 + 由于思路不够清晰,一开始写的代码错误百出,甚至把判断是否重复后分别的操作给搞混了。 +*/ +func removeDuplicates1(nums []int) int { + if len(nums) == 0 { + return 0 + } + temp := nums[0] + + i,j := int(1),int(1) + for ; i < len(nums); i++ { + if nums[i] == temp { + } else { + nums[j] = nums[i] + temp = nums[i] + j++ + } + } + return j +} + +/* + 通过查看别人的题解,发现自己代码中的temp变量是不必要的,因为其实那个慢指针前面位置的元素 + 就等于是temp. + 然后自己写了removeDuplicates2. + 然后照着这个思路写完之后,发现自己的代码才打败30%左右,觉得不对劲。 + + 再比对,发现这是由于自己有个定势思维,就是那个慢指针一定是要指向下一个被插入的位置,然后他的 + 上一个位置来替换temp.这就导致了我每次if判断中都要执行一次j-1的计算操作。 +*/ + +func removeDuplicates2(nums []int) int { + len := int(len(nums)) + if len == 0 {return 0} + + i,j := int(1),int(1) + for ; i < len; i++ { + if (nums[i] != nums[j-1]) { + nums[j] = nums[i] + j++ + } + } + return j +} + +/* + 最终版本如下: + 通过调换赋值与自增的顺序。慢指针在对比前直接指向应该比对的元素。 + 比对发现不相等后,再自增正好指向了这次应该赋值的位置与下一次比对的位置。 + 击败了93.93% +*/ +func removeDuplicates3(nums []int) int { + len := int(len(nums)) + if len == 0 {return 0} + + i,j := int(1),int(0) + for ; i < len; i++ { + if (nums[i] != nums[j]) { + j++ + nums[j] = nums[i] + + } + } + return j + 1 +} \ No newline at end of file diff --git a/Week_01/G20200343030571/main/rotate-array.go b/Week_01/G20200343030571/main/rotate-array.go new file mode 100644 index 00000000..1864074c --- /dev/null +++ b/Week_01/G20200343030571/main/rotate-array.go @@ -0,0 +1,69 @@ +package main +/* +旋转数组 + 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 + + 示例 1: + 输入: [1,2,3,4,5,6,7,8] 和 k = 3 + 输出: [6,7,8,1,2,3,4,5] + 解释: + 向右旋转 1 步: [7,1,2,3,4,5,6] + 向右旋转 2 步: [6,7,1,2,3,4,5] + 向右旋转 3 步: [5,6,7,1,2,3,4] + +/* + 一开始看了题之后毫无头绪,暴力法都没想出来,然后去看了题解发现原来那么暴力。。。 + 感觉那种暴力法我也能想出来,就是没往那么暴力上想。然后通过暴力法也没想到啥好的优化解法。 + 再看官方题解的三次反转,一开始没看懂时以为是用了啥比较高级的数学原理,后来再一看,才发现原来这个原理就是基于常识的。 + 然后有了思路就自己动手写了下, + 自己一开始没想到len == 1和k == 0的情况,只想到了len == 0的情况。 + 修改后通过,才击败36.92% +*/ +func rotate1(nums []int, k int) { + len := int(len(nums)) + if len <= 1 {return} + k = k % len + if k == 0 {return} + reverse1(nums, 0, len-1) + reverse1(nums, 0, k-1) + reverse1(nums, k, len-1) +} + +func reverse1(nums []int, i int, j int) { + for { + nums[i], nums[j] = nums[j], nums[i] + i++ + j-- + if i >= j { + break + } + } +} +/* + 全看了下题解,发现是因为这题应该用while-do的逻辑而不是do-while. + 用while-do的好处不仅可以省去一开始对k == 0的判断。 + 并且当 k == 1|| k == len-1时,可以少在一次反转中做一个不必要的反转操作(即:我 转 我 自 己)。 + 修改代码如下,击败95.48% + +*/ +func rotate2(nums []int, k int) { + len := int(len(nums)) + if len <= 1 {return} + k = k % len + //if k == 0 {return} + reverse2(nums, 0, len-1) + reverse2(nums, 0, k-1) + reverse2(nums, k, len-1) +} + +func reverse2(nums []int, i int, j int) { + for { + if i >= j { + break + } + nums[i], nums[j] = nums[j], nums[i] + i++ + j-- + + } +} \ No newline at end of file From d73cac2fdfc31525a1adab09877d32bead2005f6 Mon Sep 17 00:00:00 2001 From: liyanan Date: Sun, 16 Feb 2020 18:18:58 +0800 Subject: [PATCH 0185/1268] 603 Week-01 --- Week_01/G20200343030603/LeetCode_1_603.java | 19 + Week_01/G20200343030603/LeetCode_2_603.java | 58 ++ Week_01/G20200343030603/LeetCode_3_603.java | 51 ++ Week_01/G20200343030603/LeetCode_8_603.md | 18 + Week_01/G20200343030603/LeetCode_9_603.md | 604 ++++++++++++++++++++ 5 files changed, 750 insertions(+) create mode 100644 Week_01/G20200343030603/LeetCode_1_603.java create mode 100644 Week_01/G20200343030603/LeetCode_2_603.java create mode 100644 Week_01/G20200343030603/LeetCode_3_603.java create mode 100644 Week_01/G20200343030603/LeetCode_8_603.md create mode 100644 Week_01/G20200343030603/LeetCode_9_603.md diff --git a/Week_01/G20200343030603/LeetCode_1_603.java b/Week_01/G20200343030603/LeetCode_1_603.java new file mode 100644 index 00000000..ecc0af43 --- /dev/null +++ b/Week_01/G20200343030603/LeetCode_1_603.java @@ -0,0 +1,19 @@ +class Solution { + //双指针解法 + public int removeDuplicates(int[] nums) { + if (nums == null || nums.length == 0){ + return 0; + } + + int p = 0; + for (int q = 1; q < nums.length; q++){ + if (nums[p] != nums[q]){ + if (q - p > 1){ + nums[p + 1] = nums[q]; + } + p++; + } + } + return p+1; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030603/LeetCode_2_603.java b/Week_01/G20200343030603/LeetCode_2_603.java new file mode 100644 index 00000000..b348d330 --- /dev/null +++ b/Week_01/G20200343030603/LeetCode_2_603.java @@ -0,0 +1,58 @@ +class Solution { + public void rotate(int[] nums, int k) { + // //1、暴力法 时间复杂度O(n) 空间复杂度O(1) 执行用时95ms 内存消耗47.1MB + // int temp, previous; + // for (int i = 0; i < k; i++){ + // previous = nums[nums.length - 1]; + // for (int j = 0; j < nums.length; j++){ + // temp = nums[j]; + // nums[j] = previous; + // previous = temp; + // } + // } + + + // //2、使用额外数组 时间复杂度O(n) 空间复杂度O(n) 执行用时1ms 内存消耗47.1MB + // int[] a = new int[nums.length]; + // for (int i = 0; i < nums.length; i++){ + // a[(i + k) % nums.length] = nums[i]; + // } + + // for (int i = 0; i < nums.length; i++){ + // nums[i] = a[i]; + // } + + + //3、环状替换 时间复杂度O(n) 空间复杂度O(1) 执行用时0ms 内存消耗47.3MB + k = k % nums.length; + int count = 0; + for (int start = 0; count < nums.length; start++){ + int current = start; + int prev = nums[start]; + do { + int next = (current + k) % nums.length; + int temp = nums[next]; + nums[next] = prev; + prev = temp; + current = next; + count++; + } while (start != current); + } + + // //4、反转 时间复杂度O(n) 空间复杂度O(1) 执行用时0ms 内存消耗47.3MB + // k %= nums.length; + // reverse(nums, 0, nums.length - 1); + // reverse(nums, 0, k - 1); + // reverse(nums, k, nums.length - 1); + } + + private void reverse(int[] nums, int start, int end){ + while (start < end){ + int temp = nums[start]; + nums[start] = nums[end]; + nums[end] = temp; + start++; + end--; + } + } +} \ No newline at end of file diff --git a/Week_01/G20200343030603/LeetCode_3_603.java b/Week_01/G20200343030603/LeetCode_3_603.java new file mode 100644 index 00000000..183678bd --- /dev/null +++ b/Week_01/G20200343030603/LeetCode_3_603.java @@ -0,0 +1,51 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode(int x) { val = x; } + * } + */ + +public class ListNode { + int val; + ListNode next; + ListNode(int x){ + val = x; + } +} + +class Solution { + public ListNode mergeTwoLists(ListNode l1, ListNode l2) { +// //1、递归 时间复杂度O(n+m) 空间复杂度O(n+m) +// if (l1 == null){ +// return l2; +// }else if (l2 == null){ +// return l1; +// }else if (l1.val < l2.val){ +// l1.next = mergeTwoLists(l1.next,l2); +// return l1; +// }else { +// l2.next = mergeTwoLists(l1,l2.next); +// return l2; +// } + + //2、迭代 时间复杂度O(n+m) 空间复杂度O(1) + ListNode prehead = new ListNode(-1); + + ListNode prev = prehead; + while (l1 != null && l2 != null){ + if (l1.val <= l2.val){ + prev.next = l1; + l1 = l1.next; + } else { + prev.next = l2; + l2 = l2.next; + } + prev = prev.next; + } + + prev.next = l1 == null ? l2 : l1; + return prehead.next; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030603/LeetCode_8_603.md b/Week_01/G20200343030603/LeetCode_8_603.md new file mode 100644 index 00000000..e7d92196 --- /dev/null +++ b/Week_01/G20200343030603/LeetCode_8_603.md @@ -0,0 +1,18 @@ +用 add first 或 add last 这套新的 API 改写 Deque 的代码 +```java +Deque deque = new LinkedList(); + +deque.addFirst("a"); +deque.addFirst("b"); +deque.addFirst("c"); +System.out.prinln(deque); + +String str = deque.peekFirst(); +System.out.println(str); +System.out.println(deque); + +while(deque.size() > 0){ + System.out.println(deque.popFirst()); +} +System.out.println(deque); +``` \ No newline at end of file diff --git a/Week_01/G20200343030603/LeetCode_9_603.md b/Week_01/G20200343030603/LeetCode_9_603.md new file mode 100644 index 00000000..7be73016 --- /dev/null +++ b/Week_01/G20200343030603/LeetCode_9_603.md @@ -0,0 +1,604 @@ +一、 Queue源码分析 + +Queue和List一样都是Collection的子接口 +```java +public interface Queue extends Collection { + + // 向队列中添加一个元素 + // 如果添加成功则返回true + // 如果队列容量已满则抛出异常 + boolean add(E e); + + // 向队列中添加一个元素 + // 如果添加成功则返回true + // 如果添加失败则返回false + boolean offer(E e); + + // 移除对头元素 + // 返回对头元素,如果没有对头元素则抛出异常 + // throws NoSuchElementException + E remove(); + + // 移除对头元素 + // 返回对头元素,如果没有对头元素则返回null + E poll(); + + // 返回对头元素,不会删除对头元素 + // 如果没有对头元素则抛出异常 + // throws NoSuchElementException + E element(); + + // 返回对头元素,不会删除对头元素 + // 如果队列为空,则返回null + E peek(); + } +``` + + 二、 Priority Queue源码分析 + +总结 +1. 普通队列都是先进先出的,但是优先级队列是根据优先级进行确定的,优先级最高的先出队列; +2. 优先级队列类似于一颗完全二叉树,其内部实现使用的是数组 +3. 优先级队列在数组中其元素不一定是完全有序的,但是在出队列时,其元素是有序的 +4. 优先级队列插入和删除元素时,都需要对队列中的元素进行调整,其中remove()和add()方法的时间复杂度为O(log n) +而remove(Object obj)和contaions()方法需要O(n)时间复杂度,取对头元素只需要O(1)时间 +5. 优先级队列是非同步的,队列中不允许使用null元素 +```java + +public class PriorityQueue extends AbstractQueue + implements java.io.Serializable { + + private static final long serialVersionUID = -7720805057305804111L; + + //------------------------------初始化定义--------------------------------------------- + // 默认容量为11 + private static final int DEFAULT_INITIAL_CAPACITY = 11; + // 元素的存储方式是数组 + transient Object[] queue; // non-private to simplify nested class access + // 队列中元素的个数 + int size; + // 比较器 + private final Comparator comparator; + // 队列修改的次数 + transient int modCount; // non-private to simplify nested class access + + //-------------------------- 构造函数------------------------------------- + // 创建一个默认容量(11)和自然顺序的优先级队列 + public PriorityQueue() { + this(DEFAULT_INITIAL_CAPACITY, null); + } + // 创建一个指定容量和自然顺序的优先级队列 + public PriorityQueue(int initialCapacity) { + this(initialCapacity, null); + } + // 创建一个默认容量和指定比较器的优先级队列 + public PriorityQueue(Comparator comparator) { + this(DEFAULT_INITIAL_CAPACITY, comparator); + } + // 创建一个指定容量和包含指定集合元素的优先级队列,它分为三种情况: + // 第一种:如果是一个已经排好序的集合,首先根据集合获取到他的比较器方法,然后将集合中的元素添加到队列中; + // 第二种:如果是一个优先级队列,首先获取比较器方法,然后将指定优先级队列中的元素赋值到该队列中; + // 第三种:其他情况默认使用自然比较器,将集合中的元素添加到队列中; + public PriorityQueue(int initialCapacity, + Comparator comparator) { + // Note: This restriction of at least one is not actually needed, + // but continues for 1.5 compatibility + if (initialCapacity < 1) + throw new IllegalArgumentException(); + this.queue = new Object[initialCapacity]; + this.comparator = comparator; + } + + //创建一个包含指定优先级队列的队列,他的实现逻辑与(4)中的第二种情况相同; + @SuppressWarnings("unchecked") + public PriorityQueue(Collection c) { + if (c instanceof SortedSet) { + SortedSet ss = (SortedSet) c; + this.comparator = (Comparator) ss.comparator(); + initElementsFromCollection(ss); + } + else if (c instanceof PriorityQueue) { + PriorityQueue pq = (PriorityQueue) c; + this.comparator = (Comparator) pq.comparator(); + initFromPriorityQueue(pq); + } + else { + this.comparator = null; + initFromCollection(c); + } + } + + //创建一个指定优先级的集合中的元素的队列 + @SuppressWarnings("unchecked") + public PriorityQueue(PriorityQueue c) { + this.comparator = (Comparator) c.comparator(); + initFromPriorityQueue(c); + } + + @SuppressWarnings("unchecked") + public PriorityQueue(SortedSet c) { + this.comparator = (Comparator) c.comparator(); + initElementsFromCollection(c); + } + + // 初始化一个队列 + private void initFromPriorityQueue(PriorityQueue c) { + if (c.getClass() == PriorityQueue.class) { + this.queue = c.toArray(); + this.size = c.size(); + } else { + initFromCollection(c); + } + } + + // 从集合中初始化数据到队列中 + private void initElementsFromCollection(Collection c) { + // 将集合转成数组 + Object[] a = c.toArray(); + // 如果数组不是Object类型,转成Object类型 + if (a.getClass() != Object[].class) + a = Arrays.copyOf(a, a.length, Object[].class); + int len = a.length; + + if (len == 1 || this.comparator != null) + for (Object e : a) + if (e == null) + throw new NullPointerException(); + this.queue = a; + this.size = a.length; + } + + private void initFromCollection(Collection c) { + initElementsFromCollection(c); + heapify(); + } + + private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; + + // 对数组的容量进行扩容 + private void grow(int minCapacity) { + int oldCapacity = queue.length; + // Double size if small; else grow by 50% 扩容的大小是翻倍或者50% + int newCapacity = oldCapacity + ((oldCapacity < 64) ? + (oldCapacity + 2) : + (oldCapacity >> 1)); + // overflow-conscious code 当数组的长度超过最大限制时,进行调整 + if (newCapacity - MAX_ARRAY_SIZE > 0) + newCapacity = hugeCapacity(minCapacity); + queue = Arrays.copyOf(queue, newCapacity); + } + + //检验数组的长度是否超过限制,如果超过了进行调整或抛出异常 + private static int hugeCapacity(int minCapacity) { + if (minCapacity < 0) // overflow + throw new OutOfMemoryError(); + return (minCapacity > MAX_ARRAY_SIZE) ? + Integer.MAX_VALUE : + MAX_ARRAY_SIZE; + } + + //向队列中插入了一个元素 + public boolean add(E e) { + return offer(e); + } + + //向队列中插入了一个元素 + public boolean offer(E e) { + //如果元素为null,就抛出异常 + if (e == null) + throw new NullPointerException(); + modCount++; + int i = size; + // 如果队列中的元素个数大于或等于队列的长度,执行grow,对数组的容量进行扩容 + if (i >= queue.length) + grow(i + 1); + size = i + 1; + // 如果队列中的元素为空,那么新加入的元素为第一个元素,直接赋值到0的位置,否则插入元素向上进程调整 + if (i == 0) + queue[0] = e; + else + siftUp(i, e); + return true; + } + + @SuppressWarnings("unchecked") + public E peek() { + return (size == 0) ? null : (E) queue[0]; + } + + //获取某个元素的索引位置,对数组进行遍历 + private int indexOf(Object o) { + if (o != null) { + for (int i = 0; i < size; i++) + if (o.equals(queue[i])) + return i; + } + return -1; + } + + // 删除某一个元素 + public boolean remove(Object o) { + int i = indexOf(o); + if (i == -1) + return false; + else { + removeAt(i); + return true; + } + } + + boolean removeEq(Object o) { + for (int i = 0; i < size; i++) { + if (o == queue[i]) { + removeAt(i); + return true; + } + } + return false; + } + + public boolean contains(Object o) { + return indexOf(o) >= 0; + } + + public Object[] toArray() { + return Arrays.copyOf(queue, size); + } + + @SuppressWarnings("unchecked") + public T[] toArray(T[] a) { + final int size = this.size; + if (a.length < size) + // Make a new array of a's runtime type, but my contents: + return (T[]) Arrays.copyOf(queue, size, a.getClass()); + System.arraycopy(queue, 0, a, 0, size); + if (a.length > size) + a[size] = null; + return a; + } + + public Iterator iterator() { + return new Itr(); + } + + private final class Itr implements Iterator { + + private int cursor; + + private int lastRet = -1; + + private ArrayDeque forgetMeNot; + + private E lastRetElt; + + private int expectedModCount = modCount; + + public boolean hasNext() { + return cursor < size || + (forgetMeNot != null && !forgetMeNot.isEmpty()); + } + + @SuppressWarnings("unchecked") + public E next() { + if (expectedModCount != modCount) + throw new ConcurrentModificationException(); + if (cursor < size) + return (E) queue[lastRet = cursor++]; + if (forgetMeNot != null) { + lastRet = -1; + lastRetElt = forgetMeNot.poll(); + if (lastRetElt != null) + return lastRetElt; + } + throw new NoSuchElementException(); + } + + public void remove() { + if (expectedModCount != modCount) + throw new ConcurrentModificationException(); + if (lastRet != -1) { + E moved = PriorityQueue.this.removeAt(lastRet); + lastRet = -1; + if (moved == null) + cursor--; + else { + if (forgetMeNot == null) + forgetMeNot = new ArrayDeque<>(); + forgetMeNot.add(moved); + } + } else if (lastRetElt != null) { + PriorityQueue.this.removeEq(lastRetElt); + lastRetElt = null; + } else { + throw new IllegalStateException(); + } + expectedModCount = modCount; + } + } + + public int size() { + return size; + } + + public void clear() { + modCount++; + for (int i = 0; i < size; i++) + queue[i] = null; + size = 0; + } + + @SuppressWarnings("unchecked") + public E poll() { + if (size == 0) + return null; + int s = --size; + modCount++; + E result = (E) queue[0]; + E x = (E) queue[s]; + queue[s] = null; + if (s != 0) + siftDown(0, x); + return result; + } + + //删除某个位置的元素 + @SuppressWarnings("unchecked") + E removeAt(int i) { + // assert i >= 0 && i < size; + modCount++; + //s为数组中的最后一个元素的位置 + int s = --size; + if (s == i) // removed last element + queue[i] = null; + else { + E moved = (E) queue[s]; + queue[s] = null; + siftDown(i, moved); + //如果是最后一个元素替换到了删除的元素的位置,那么需要将元素进行向上比较,使其满足优先级队列的特性 + if (queue[i] == moved) { + siftUp(i, moved); + if (queue[i] != moved) + return moved; + } + } + return null; + } + + // 在K位置插入元素X,同时对数组中的元素进行调整,使其满足队列的要求 + private void siftUp(int k, E x) { + if (comparator != null) + siftUpUsingComparator(k, x); + else + siftUpComparable(k, x); + } + + /** + * 如果是默认比较器,插入元素时的调整方式 + * @param k + * @param x + */ + @SuppressWarnings("unchecked") + private void siftUpComparable(int k, E x) { + Comparable key = (Comparable) x; + // k大于0时,循环遍历K + while (k > 0) { + // 获取K的父节点 + int parent = (k - 1) >>> 1; + // 获取父节点的元素e + Object e = queue[parent]; + // 如果key的值大于等于其父节点的元素,那么不需要进行调整,结束操作 + if (key.compareTo((E) e) >= 0) + break; + // 否则的话将两个值进行对换,同时将k赋值为其父节点的位置 + queue[k] = e; + k = parent; + } + queue[k] = key; + } + + //如果有指定的比较器,插入元素之后的调整方法 + @SuppressWarnings("unchecked") + private void siftUpUsingComparator(int k, E x) { + while (k > 0) { + int parent = (k - 1) >>> 1; + Object e = queue[parent]; + if (comparator.compare(x, (E) e) >= 0) + break; + queue[k] = e; + k = parent; + } + queue[k] = x; + } + + //向下调整队列中的元素 + private void siftDown(int k, E x) { + if (comparator != null) + siftDownUsingComparator(k, x); + else + siftDownComparable(k, x); + } + + //当无比较器时的下移操作的实现 + @SuppressWarnings("unchecked") + private void siftDownComparable(int k, E x) { + Comparable key = (Comparable)x; + //half为队列的中间一半位置 + int half = size >>> 1; // loop while a non-leaf + //循环调整k,k小于中间位置索引值时循环 + while (k < half) { + //获取k的左孩子索引值 + int child = (k << 1) + 1; // assume left child is least + //获取左孩子的值 + Object c = queue[child]; + //获取k的右孩子索引值 + int right = child + 1; + //如果存在右孩子,并且右孩子的值小于左孩子的值,那么将c值赋值为右孩子的值,也就是取左右孩子中值较小的那位 + if (right < size && + ((Comparable) c).compareTo((E) queue[right]) > 0) + c = queue[child = right]; + //如果key值小于等于孩子结点中的值,不需要调整,结束循环 + if (key.compareTo((E) c) <= 0) + break; + queue[k] = c; + k = child; + } + queue[k] = key; + } + + @SuppressWarnings("unchecked") + private void siftDownUsingComparator(int k, E x) { + int half = size >>> 1; + while (k < half) { + int child = (k << 1) + 1; + Object c = queue[child]; + int right = child + 1; + if (right < size && + comparator.compare((E) c, (E) queue[right]) > 0) + c = queue[child = right]; + if (comparator.compare(x, (E) c) <= 0) + break; + queue[k] = c; + k = child; + } + queue[k] = x; + } + + @SuppressWarnings("unchecked") + private void heapify() { + for (int i = (size >>> 1) - 1; i >= 0; i--) + siftDown(i, (E) queue[i]); + } + + public Comparator comparator() { + return comparator; + } + + private void writeObject(java.io.ObjectOutputStream s) + throws java.io.IOException { + // Write out element count, and any hidden stuff + s.defaultWriteObject(); + + // Write out array length, for compatibility with 1.5 version + s.writeInt(Math.max(2, size + 1)); + + // Write out all elements in the "proper order". + for (int i = 0; i < size; i++) + s.writeObject(queue[i]); + } + + private void readObject(java.io.ObjectInputStream s) + throws java.io.IOException, ClassNotFoundException { + // Read in size, and any hidden stuff + s.defaultReadObject(); + + // Read in (and discard) array length + s.readInt(); + + queue = new Object[size]; + + // Read in all elements. + for (int i = 0; i < size; i++) + queue[i] = s.readObject(); + + // Elements are guaranteed to be in "proper order", but the + // spec has never explained what that might be. + heapify(); + } + + public final Spliterator spliterator() { + return new PriorityQueueSpliterator<>(this, 0, -1, 0); + } + + static final class PriorityQueueSpliterator implements Spliterator { + /* + * This is very similar to ArrayList Spliterator, except for + * extra null checks. + */ + private final PriorityQueue pq; + private int index; // current index, modified on advance/split + private int fence; // -1 until first use + private int expectedModCount; // initialized when fence set + + /** Creates new spliterator covering the given range. */ + PriorityQueueSpliterator(PriorityQueue pq, int origin, int fence, + int expectedModCount) { + this.pq = pq; + this.index = origin; + this.fence = fence; + this.expectedModCount = expectedModCount; + } + + private int getFence() { // initialize fence to size on first use + int hi; + if ((hi = fence) < 0) { + expectedModCount = pq.modCount; + hi = fence = pq.size; + } + return hi; + } + + public PriorityQueueSpliterator trySplit() { + int hi = getFence(), lo = index, mid = (lo + hi) >>> 1; + return (lo >= mid) ? null : + new PriorityQueueSpliterator<>(pq, lo, index = mid, + expectedModCount); + } + + @SuppressWarnings("unchecked") + public void forEachRemaining(Consumer action) { + int i, hi, mc; // hoist accesses and checks from loop + PriorityQueue q; Object[] a; + if (action == null) + throw new NullPointerException(); + if ((q = pq) != null && (a = q.queue) != null) { + if ((hi = fence) < 0) { + mc = q.modCount; + hi = q.size; + } + else + mc = expectedModCount; + if ((i = index) >= 0 && (index = hi) <= a.length) { + for (E e;; ++i) { + if (i < hi) { + if ((e = (E) a[i]) == null) // must be CME + break; + action.accept(e); + } + else if (q.modCount != mc) + break; + else + return; + } + } + } + throw new ConcurrentModificationException(); + } + + public boolean tryAdvance(Consumer action) { + if (action == null) + throw new NullPointerException(); + int hi = getFence(), lo = index; + if (lo >= 0 && lo < hi) { + index = lo + 1; + @SuppressWarnings("unchecked") E e = (E)pq.queue[lo]; + if (e == null) + throw new ConcurrentModificationException(); + action.accept(e); + if (pq.modCount != expectedModCount) + throw new ConcurrentModificationException(); + return true; + } + return false; + } + + public long estimateSize() { + return (long) (getFence() - index); + } + + public int characteristics() { + return Spliterator.SIZED | Spliterator.SUBSIZED | Spliterator.NONNULL; + } + } +} +``` + From 57cc8da3bfd7672031016596d0fd6706c5eb9434 Mon Sep 17 00:00:00 2001 From: chqing Date: Sun, 16 Feb 2020 18:19:22 +0800 Subject: [PATCH 0186/1268] feat: Task of week01 --- Week_01/G20200343030625/LeetCode_1_625.java | 16 ++++++++++ Week_01/G20200343030625/LeetCode_283_625.java | 14 +++++++++ Week_01/G20200343030625/LeetCode_66_625.java | 30 +++++++++++++++++++ Week_01/G20200343030625/LeetCode_88_625.java | 23 ++++++++++++++ 4 files changed, 83 insertions(+) create mode 100644 Week_01/G20200343030625/LeetCode_1_625.java create mode 100644 Week_01/G20200343030625/LeetCode_283_625.java create mode 100644 Week_01/G20200343030625/LeetCode_66_625.java create mode 100644 Week_01/G20200343030625/LeetCode_88_625.java diff --git a/Week_01/G20200343030625/LeetCode_1_625.java b/Week_01/G20200343030625/LeetCode_1_625.java new file mode 100644 index 00000000..932cd0cf --- /dev/null +++ b/Week_01/G20200343030625/LeetCode_1_625.java @@ -0,0 +1,16 @@ +class Solution { + public int[] twoSum(int[] nums, int target) { + Map map = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + map.put(nums[i], i); + } + + for (int i = 0; i < nums.length; i++) { + int complement = target - nums[i]; + if (map.containsKey(complement) && map.get(complement) != i) { + return new int[] { i, map.get(complement) }; + } + } + throw new IllegalArgumentException("No two sum solution"); + } +} diff --git a/Week_01/G20200343030625/LeetCode_283_625.java b/Week_01/G20200343030625/LeetCode_283_625.java new file mode 100644 index 00000000..72cb57eb --- /dev/null +++ b/Week_01/G20200343030625/LeetCode_283_625.java @@ -0,0 +1,14 @@ +class Solution { + public void moveZeroes(int[] nums) { + int zeroIdx = 0; + for (int i = 0; i < nums.length; i++){ + if (nums[i] != 0){ + nums[zeroIdx] = nums [i]; + if(zeroIdx != i){ + nums[i] = 0; + } + zeroIdx ++; + } + } + } +} diff --git a/Week_01/G20200343030625/LeetCode_66_625.java b/Week_01/G20200343030625/LeetCode_66_625.java new file mode 100644 index 00000000..c6adcb37 --- /dev/null +++ b/Week_01/G20200343030625/LeetCode_66_625.java @@ -0,0 +1,30 @@ +class Solution { + public int[] plusOne(int[] digits) { + int[] arr = digits; + int idx = arr.length - 1; + int carry = 1; + + while (idx >= 0) { + int sum = arr[idx] + carry; + carry = sum / 10; + arr[idx] = sum % 10; + if (carry == 0) { + break; + } + idx--; + } + + if (carry == 1) { + int[] result = new int[arr.length + 1]; + result[0] = 1; + for (int i = 1; i < result.length; i++) { + result[i] = arr[i - 1]; + } + + return result; + } + + return arr; + + } +} diff --git a/Week_01/G20200343030625/LeetCode_88_625.java b/Week_01/G20200343030625/LeetCode_88_625.java new file mode 100644 index 00000000..bce96d78 --- /dev/null +++ b/Week_01/G20200343030625/LeetCode_88_625.java @@ -0,0 +1,23 @@ +class Solution { + public void merge(int[] nums1, int m, int[] nums2, int n) { + int[] tmp = new int[m]; + System.arraycopy(nums1, 0, tmp, 0, m); + + int p1 = 0; + int p2 = 0; + int p = 0; + while ((p1 < m) && (p2 < n)) { + if(tmp[p1] < nums2[p2]){ + nums1[p++] = tmp[p1++]; + }else{ + nums1[p++] = nums2[p2++]; + } + } + if(p1 < m){ + System.arraycopy(tmp, p1, nums1, p, m - p1); + } + if(p2 < n){ + System.arraycopy(nums2,p2,nums1,p,n - p2); + } + } +} From 7864f05cd2711d058d96b55639e0b0623ff3370b Mon Sep 17 00:00:00 2001 From: songkaida Date: Sun, 16 Feb 2020 18:38:40 +0800 Subject: [PATCH 0187/1268] 429-Week01 --- .../G20200343030429/{LeetCode_26_429.java => LeetCode_1_429.java} | 0 .../{LeetCode_189_429.java => LeetCode_2_429.java} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename Week_01/G20200343030429/{LeetCode_26_429.java => LeetCode_1_429.java} (100%) rename Week_01/G20200343030429/{LeetCode_189_429.java => LeetCode_2_429.java} (100%) diff --git a/Week_01/G20200343030429/LeetCode_26_429.java b/Week_01/G20200343030429/LeetCode_1_429.java similarity index 100% rename from Week_01/G20200343030429/LeetCode_26_429.java rename to Week_01/G20200343030429/LeetCode_1_429.java diff --git a/Week_01/G20200343030429/LeetCode_189_429.java b/Week_01/G20200343030429/LeetCode_2_429.java similarity index 100% rename from Week_01/G20200343030429/LeetCode_189_429.java rename to Week_01/G20200343030429/LeetCode_2_429.java From 69806f6e067d981b2e6a05b9848b5b55776ef01e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=89=E8=B4=9E?= Date: Sun, 16 Feb 2020 18:52:16 +0800 Subject: [PATCH 0188/1268] 20 and 155 --- Week_01/G20200343030391/LeetCode_155_391.java | 64 +++++++++++++++++++ Week_01/G20200343030391/LeetCode_20_391.java | 39 +++++++++++ 2 files changed, 103 insertions(+) create mode 100644 Week_01/G20200343030391/LeetCode_155_391.java create mode 100644 Week_01/G20200343030391/LeetCode_20_391.java diff --git a/Week_01/G20200343030391/LeetCode_155_391.java b/Week_01/G20200343030391/LeetCode_155_391.java new file mode 100644 index 00000000..48b5f99a --- /dev/null +++ b/Week_01/G20200343030391/LeetCode_155_391.java @@ -0,0 +1,64 @@ +package G20200343030391; + +import java.util.Stack; + +public class LeetCode_155_391 { + + public static void main(String[] args) { + MinStack minStack = new MinStack(); + minStack.push(-2); + minStack.push(0); + minStack.push(-3); + minStack.getMin(); // 返回 -3. + minStack.pop(); + minStack.top(); // 返回 0. + minStack.getMin(); // 返回 -2. + + } + + public static class MinStack { + Stack dataStack; + Stack minStack; + + + /** initialize your data structure here. */ + public MinStack() { + dataStack = new Stack<>(); + minStack = new Stack<>(); + } + + public void push(int x) { + dataStack.push(x); + if (minStack.isEmpty() || minStack.peek() >= x) { + minStack.push(x); + } else { + minStack.push(minStack.peek()); + } + + } + + public void pop() { + if (!dataStack.isEmpty()) { + dataStack.pop(); + minStack.pop(); + } + } + + public int top() { + if (!dataStack.isEmpty()) { + return dataStack.peek(); + } else { + throw new RuntimeException("stack is empty"); + } + } + + public int getMin() { + if (!dataStack.isEmpty()) { + return minStack.peek(); + } else { + throw new RuntimeException("stack is empty"); + } + } + } + +} diff --git a/Week_01/G20200343030391/LeetCode_20_391.java b/Week_01/G20200343030391/LeetCode_20_391.java new file mode 100644 index 00000000..31665c99 --- /dev/null +++ b/Week_01/G20200343030391/LeetCode_20_391.java @@ -0,0 +1,39 @@ +package G20200343030391; + +import java.util.HashMap; +import java.util.Stack; + +public class LeetCode_20_391 { + + public static void main(String[] args) { + String s = "()[]{}"; + boolean valid = isValid(s); + System.out.println(valid); + } + + /** + * 最近相关性:使用栈先进先出的特性 + * @param s + * @return + */ + public static boolean isValid(String s) { + HashMap hashMap = new HashMap<>(); + hashMap.put(')', '('); + hashMap.put(']', '['); + hashMap.put('}', '{'); + char[] charArray = s.toCharArray(); + Stack stack = new Stack<>(); + for (int i = 0; i < charArray.length; i++) { + if (hashMap.containsKey(charArray[i])) { + if (stack.isEmpty()) { + return false; + } else if (stack.pop() != hashMap.get(charArray[i])) { + return false; + } + } else { + stack.push(charArray[i]); + } + } + return stack.isEmpty(); + } +} From e0feb43391c919537d7255fdbbe6b522e83109a7 Mon Sep 17 00:00:00 2001 From: majiancheng Date: Sun, 16 Feb 2020 19:35:17 +0800 Subject: [PATCH 0189/1268] =?UTF-8?q?[=E5=85=B6=E4=BB=96]=E8=AF=B4?= =?UTF-8?q?=E6=98=8E=EF=BC=9A015=20Week01=E4=BD=9C=E4=B8=9A=20[=E5=BD=B1?= =?UTF-8?q?=E5=93=8D]015=20Week01=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030015/LeetCode_189_015.java | 98 +++++++++++++++++++ Week_01/G20200343030015/LeetCode_26_015.java | 54 ++++++++++ Week_01/G20200343030015/LeetCode_283_015.java | 49 ++++++++++ Week_01/G20200343030015/NOTE.md | 6 +- Week_01/Week_01.iml | 11 +++ 5 files changed, 217 insertions(+), 1 deletion(-) create mode 100644 Week_01/G20200343030015/LeetCode_189_015.java create mode 100644 Week_01/G20200343030015/LeetCode_26_015.java create mode 100644 Week_01/G20200343030015/LeetCode_283_015.java create mode 100644 Week_01/Week_01.iml diff --git a/Week_01/G20200343030015/LeetCode_189_015.java b/Week_01/G20200343030015/LeetCode_189_015.java new file mode 100644 index 00000000..b3132a51 --- /dev/null +++ b/Week_01/G20200343030015/LeetCode_189_015.java @@ -0,0 +1,98 @@ +package G20200343030015.week_01; + +/** + * Created by majiancheng on 2020/2/16. + */ +public class LeetCode_189_015 { + + /** + * 第一种方法, 暴力求解 + * + * @param nums + * @param k + */ + public void rotate1(int[] nums, int k) { + for (int i = 0; i < k; i++) { + int prev = nums[nums.length - 1]; + for (int j = 0; j < nums.length; j++) { + int temp = nums[j]; + nums[j] = prev; + prev = temp; + } + } + } + + /** + * 第二种方法, 翻转数组 + * + * @param nums + * @param k + */ + public void rotate2(int[] nums, int k) { + k %= nums.length; + reverse2(nums, 0, nums.length - 1); + reverse2(nums, 0, k - 1); + reverse2(nums, k, nums.length - 1); + } + + /** + * 第三种方法, 环状替换 + * + * @param nums + * @param k + */ + public void rotate3(int[] nums, int k) { + k %= nums.length; + int count = 0; + for (int start = 0; count < nums.length; start++) { + int current = start; + int prev = nums[start]; + do { + int next = (current + k) % nums.length; + int tmp = nums[next]; + nums[next] = prev; + + current = next; + prev = tmp; + count++; + } while (start != current); + } + } + + public void reverse2(int[] nums, int start, int end) { + while (start < end) { + int tmp = nums[start]; + nums[start] = nums[end]; + nums[end] = tmp; + start++; + end--; + } + } + + public static void main(String[] args) { + int[] nums = { 1, 2, 3, 4, 5, 6, 7 }; + /*new LeetCode_189_015().rotate1(nums, 3);*/ + /*new LeetCode_189_015().rotate2(nums, 3);*/ + new LeetCode_189_015().rotate3(nums, 3); + for (int i : nums) { + System.out.print(i + ", "); + } + } +} + +/** + * 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 + *

+ * 示例 1: + *

+ * 输入: [1,2,3,4,5,6,7] 和 k = 3 + * 输出: [5,6,7,1,2,3,4] + * 解释: + * 向右旋转 1 步: [7,1,2,3,4,5,6] + * 向右旋转 2 步: [6,7,1,2,3,4,5] + * 向右旋转 3 步: [5,6,7,1,2,3,4] + *

+ * 来源:力扣(LeetCode) + * 链接:https://leetcode-cn.com/problems/rotate-array + * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 + */ diff --git a/Week_01/G20200343030015/LeetCode_26_015.java b/Week_01/G20200343030015/LeetCode_26_015.java new file mode 100644 index 00000000..d0f954b5 --- /dev/null +++ b/Week_01/G20200343030015/LeetCode_26_015.java @@ -0,0 +1,54 @@ +package G20200343030015.week_01; + +/** + * Created by majiancheng on 2020/2/16. + */ +public class LeetCode_26_015 { + + public int removeDuplicates(int[] nums) { + if (nums == null || nums.length == 0) return 0; + int j = 0; + for (int i = 1; i < nums.length; i++) { + if (nums[j] != nums[i]) { + j++; + nums[j] = nums[i]; + } + } + + return j + 1; + } + + public static void main(String[] args) { + int[] nums = new int[] { 1, 1, 2 }; + int cnt = new LeetCode_26_015().removeDuplicates(nums); + for (int i = 0; i < cnt; i++) { + System.out.print(nums[i] + ", "); + } + + } +} + +/** + * 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 + *

+ * 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 + *

+ * 示例 1: + *

+ * 给定数组 nums = [1,1,2], + *

+ * 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 + *

+ * 你不需要考虑数组中超出新长度后面的元素。 + * 示例 2: + *

+ * 给定 nums = [0,0,1,1,1,2,2,3,3,4], + *

+ * 函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。 + *

+ * 你不需要考虑数组中超出新长度后面的元素。 + *

+ * 来源:力扣(LeetCode) + * 链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array + * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 + */ diff --git a/Week_01/G20200343030015/LeetCode_283_015.java b/Week_01/G20200343030015/LeetCode_283_015.java new file mode 100644 index 00000000..741b537b --- /dev/null +++ b/Week_01/G20200343030015/LeetCode_283_015.java @@ -0,0 +1,49 @@ +package G20200343030015.week_01; + +/** + * Created by majiancheng on 2020/2/16. + */ +public class LeetCode_283_015 { + + public void moveZeroes(int[] nums) { + if (nums == null) { + return; + } + + int j = 0; + for (int i = 0; i < nums.length; i++) { + if (nums[i] != 0) { + int tmp = nums[j]; + nums[j] = nums[i]; + nums[i] = tmp; + + j++; + } + } + } + + public static void main(String[] args) { + int[] nums = new int[] { 0, 1, 0, 3, 12 }; + new LeetCode_283_015().moveZeroes(nums); + for (int num : nums) { + System.out.print(num + ", "); + } + } +} + +/** + * 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 + *

+ * 示例: + *

+ * 输入: [0,1,0,3,12] + * 输出: [1,3,12,0,0] + * 说明: + *

+ * 必须在原数组上操作,不能拷贝额外的数组。 + * 尽量减少操作次数。 + *

+ * 来源:力扣(LeetCode) + * 链接:https://leetcode-cn.com/problems/move-zeroes + * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 + */ diff --git a/Week_01/G20200343030015/NOTE.md b/Week_01/G20200343030015/NOTE.md index 50de3041..7a73125c 100644 --- a/Week_01/G20200343030015/NOTE.md +++ b/Week_01/G20200343030015/NOTE.md @@ -1 +1,5 @@ -学习笔记 \ No newline at end of file +学习笔记 + + 1、五毒神掌很重要,算法要多去做几遍,多看leetcode别人高票实现的算法和思路; + 2、重要的是要留有充足的时间做预习,反复听课,反复做题 以及及时复习,刻意练习; + 3、对不理解的题一定要多看代码实现以及debug代码,直到理解并且默写出代码; diff --git a/Week_01/Week_01.iml b/Week_01/Week_01.iml new file mode 100644 index 00000000..d520dd6e --- /dev/null +++ b/Week_01/Week_01.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file From f7dca6ef218f652066d967850031a62db945c082 Mon Sep 17 00:00:00 2001 From: superau Date: Sun, 16 Feb 2020 19:48:08 +0800 Subject: [PATCH 0190/1268] 007-Week 00 --- Week_00/G20200343030007/LeetCode_007_11.js | 27 ++++++++ Week_00/G20200343030007/LeetCode_007_26.js | 51 +++++++++++++++ Week_00/G20200343030007/LeetCode_007_283.js | 47 ++++++++++++++ Week_00/G20200343030007/NOTE.md | 70 ++++++++++++++++++++- 4 files changed, 194 insertions(+), 1 deletion(-) create mode 100644 Week_00/G20200343030007/LeetCode_007_11.js create mode 100644 Week_00/G20200343030007/LeetCode_007_26.js create mode 100644 Week_00/G20200343030007/LeetCode_007_283.js diff --git a/Week_00/G20200343030007/LeetCode_007_11.js b/Week_00/G20200343030007/LeetCode_007_11.js new file mode 100644 index 00000000..a1714bf1 --- /dev/null +++ b/Week_00/G20200343030007/LeetCode_007_11.js @@ -0,0 +1,27 @@ +/** + * @param {number[]} height + * @return {number} + * 盛水最多的容器 + * 双指针法 + */ +var maxArea = function(height) { + let maxArea = 0; + + for (let i = 0, j = height.length - 1; i < j;) { + const minHeight = height[i] < height[j] ? height[i++] : height[j--]; + const area = (j - i + 1) * minHeight; + maxArea = Math.max(maxArea, area); + } + + return maxArea; +}; + + + +/** + * 双指针紧逼法 + * 原理:最大盛水面积取决于短边的长度 + * 指针1:最左边 + * 指针2:最右边 + * 如果左指针高度 < 右指针高度,左边往里缩,反之亦然 + */ \ No newline at end of file diff --git a/Week_00/G20200343030007/LeetCode_007_26.js b/Week_00/G20200343030007/LeetCode_007_26.js new file mode 100644 index 00000000..eced7439 --- /dev/null +++ b/Week_00/G20200343030007/LeetCode_007_26.js @@ -0,0 +1,51 @@ +/** + * @param {number[]} nums + * @return {number} + * 双指针法 + */ +var removeDuplicates = function (nums) { + if (nums.length <= 1) return nums.length; + // 定义慢指针 + let pos = 0; + + for (let i = 1; i < nums.length; i++) { + if (nums[i] !== nums[pos]) { + // 每次将 pos 指针对应位置的第二位作为不重复项 + nums[pos + 1] = nums[i]; + pos++; + } + } + + return pos + 1; +}; + + +// 预期:[1, 2, 3] +// var nums = [1, 1, 1, 2, 2, 3] +// 返回: 3 + +// const result = removeDuplicates(nums); +// console.log(nums, result); + +/** + * 优化一下 + */ +var removeDuplicates2 = function (nums) { + if (nums.length <= 1) return nums.length; + // 定义慢指针 + let pos = 0; + + for (let i = 1; i < nums.length; i++) { + // 会不会出现数组越界情况,不会,因为当前代码最大执行 5 次, ++pos 最大执行 5 次, + // 要是越界,pos = 6 ,但这一步时,for 循环已经结束 + if (nums[i] !== nums[pos]) nums[++pos] = nums[i]; + } + + return pos + 1; +}; + +var nums1 = [1, 2, 3, 4, 5, 6] +const result1 = removeDuplicates2(nums1); +console.log(nums1, result1); + + diff --git a/Week_00/G20200343030007/LeetCode_007_283.js b/Week_00/G20200343030007/LeetCode_007_283.js new file mode 100644 index 00000000..2604e618 --- /dev/null +++ b/Week_00/G20200343030007/LeetCode_007_283.js @@ -0,0 +1,47 @@ +/** + * @param {number[]} nums + * @return {void} Do not return anything, modify nums in-place instead. + * 双指针法 + */ +var moveZeroes = function(nums) { + if (nums.length <= 1) return; + // 慢指针 + let pos = 0; + // 将所有不为 0 的移到左边,并记录末尾所有 0 的第一个的位置 + for (let i = 1; i < nums.length; i++) { + if (nums[i] !== 0) nums[pos++] = nums[i]; + } + // 将末尾应该为 0 的置为 0 + while (pos < nums.length) { + nums[pos++] = 0; + } +} + +const nums = [0, 1, 0, 3, 12]; +moveZeroes(nums); +// 预期 [1, 3, 1, 0, 0, 0, 0] + +console.log(nums); + + +/** + * 双指针 + * 指针: + * 1. 将非 0 树放在前面 + * 2. 记录末尾 0 的开始位置 + * + * 第一步:将不为 0 的放到前面,记录指针变化 + * insertPos i nums + * 0 0 [0, 1, 0, 3, 12] + * 1 1 [1, 1, 0, 3, 12] + * 1 2 [1, 1, 0, 3, 12] + * 2 3 [1, 3, 0, 3, 12] + * 3 4 [1, 3, 12, 3, 12] + * + * 第二步:将末尾其它数据置为 0 + * insertPos nums + * 3 [1, 3, 12, 0, 12] + * 4 [1, 3, 12, 0, 0] + * + */ + diff --git a/Week_00/G20200343030007/NOTE.md b/Week_00/G20200343030007/NOTE.md index 50de3041..f63c2185 100644 --- a/Week_00/G20200343030007/NOTE.md +++ b/Week_00/G20200343030007/NOTE.md @@ -1 +1,69 @@ -学习笔记 \ No newline at end of file +## 学习笔记 + +### 数据结构与算法理解 + +计算机程序语言都是重复,究极就是重复的,是有规律的,所以所有的算法是可以找规律,套模板的。 + +### 如何学习 + +- **刻意练习** + + 就像打游戏一样,补兵不行一直练补兵,技能不行一直练技能,大神都是每一步基础都很扎实,所以基本功是制胜法宝。 + +- **刷题** + + 1. 敢于承认自己刷题时,***想不出来,不会做*** 的问题,因为优秀的算法时前人总结多年的经验,我们不是圣人,我们只是学习者,记下优秀的思路技巧,并做到熟能生巧时最重要的。 + 2. 刷题只做一遍是不可以的,以为看会了,照着写出来了就等于会了,**大错特错**!这是基本功,是需要达到见到这个题就可以立马想到解法,并且迅速写出来,达到这样的境界,只做一遍是万万不可的。 + - 第一遍:思路看懂,程序做熟 + - 第二遍:第二天重复默写,加强记忆 + - 第三遍:周天再写一遍,加强记忆 + - 第四遍:第二周写一遍 + - 第五遍:面试前突击练习 + +- **总结** + + 人脑记不住琐碎的知识,但可以归纳总结为脑图,**树**的形式 + + 将学习的算法和数据结构知识总结为脑图,并在阶段性学习完毕后,看一下自己的算法数据机构地图添加了哪些树枝,还有哪些知识点没有添加。 + +- **工欲善其事必先利其器** + + - 优秀的 IDE 和插件 + + - 可以使用 vscode top tips 这种关键词查询 + + - 基本的代码规范 + + - 缩行,关键词后跟空格等 + + - **自顶向下的编写方法** + + 先写大体主干,再写细节方法。 + + 比如计算盛水最大面积的题目,先 getMinHeight (求最小高度),再 getArea(求面积),最后 getMaxArea(求最大面积)。先写出大概框架思路,再补足方法细节。这样就不会套进纠结方法细节的误区,导致整个算法没有实现。 + + - 代码编写时的指法 + + - 快速到达行头行尾 + - 以单词为单位左右移动 + - 向上向下移动当前行代码 + - 整段删除或复制 + +### 本周刷题总结 + +- **思路** + + - 基本思路 + + 如果做不出来,可以尝试大脑中最基本的解法,一步一步程序执行的那种,或者暴力解法 for 循环这种。 + + - 其它思路 + + 本周影响最深刻的是对于双指针的理解,精妙 + + - 快慢指针法 + - 移动零 + - 双指针紧逼法 + - 计算最大盛水面积 + + **真的是有套路可言!** \ No newline at end of file From 4dfe23d8497b4a55204495d0b665c29d98aead95 Mon Sep 17 00:00:00 2001 From: superau Date: Sun, 16 Feb 2020 19:59:46 +0800 Subject: [PATCH 0191/1268] 007-Week 01 --- Week_01/G20200343030007/LeetCode_007_11.js | 27 ++++++++ Week_01/G20200343030007/LeetCode_007_26.js | 51 +++++++++++++++ Week_01/G20200343030007/LeetCode_007_283.js | 47 ++++++++++++++ Week_01/G20200343030007/NOTE.md | 70 ++++++++++++++++++++- 4 files changed, 194 insertions(+), 1 deletion(-) create mode 100644 Week_01/G20200343030007/LeetCode_007_11.js create mode 100644 Week_01/G20200343030007/LeetCode_007_26.js create mode 100644 Week_01/G20200343030007/LeetCode_007_283.js diff --git a/Week_01/G20200343030007/LeetCode_007_11.js b/Week_01/G20200343030007/LeetCode_007_11.js new file mode 100644 index 00000000..a1714bf1 --- /dev/null +++ b/Week_01/G20200343030007/LeetCode_007_11.js @@ -0,0 +1,27 @@ +/** + * @param {number[]} height + * @return {number} + * 盛水最多的容器 + * 双指针法 + */ +var maxArea = function(height) { + let maxArea = 0; + + for (let i = 0, j = height.length - 1; i < j;) { + const minHeight = height[i] < height[j] ? height[i++] : height[j--]; + const area = (j - i + 1) * minHeight; + maxArea = Math.max(maxArea, area); + } + + return maxArea; +}; + + + +/** + * 双指针紧逼法 + * 原理:最大盛水面积取决于短边的长度 + * 指针1:最左边 + * 指针2:最右边 + * 如果左指针高度 < 右指针高度,左边往里缩,反之亦然 + */ \ No newline at end of file diff --git a/Week_01/G20200343030007/LeetCode_007_26.js b/Week_01/G20200343030007/LeetCode_007_26.js new file mode 100644 index 00000000..eced7439 --- /dev/null +++ b/Week_01/G20200343030007/LeetCode_007_26.js @@ -0,0 +1,51 @@ +/** + * @param {number[]} nums + * @return {number} + * 双指针法 + */ +var removeDuplicates = function (nums) { + if (nums.length <= 1) return nums.length; + // 定义慢指针 + let pos = 0; + + for (let i = 1; i < nums.length; i++) { + if (nums[i] !== nums[pos]) { + // 每次将 pos 指针对应位置的第二位作为不重复项 + nums[pos + 1] = nums[i]; + pos++; + } + } + + return pos + 1; +}; + + +// 预期:[1, 2, 3] +// var nums = [1, 1, 1, 2, 2, 3] +// 返回: 3 + +// const result = removeDuplicates(nums); +// console.log(nums, result); + +/** + * 优化一下 + */ +var removeDuplicates2 = function (nums) { + if (nums.length <= 1) return nums.length; + // 定义慢指针 + let pos = 0; + + for (let i = 1; i < nums.length; i++) { + // 会不会出现数组越界情况,不会,因为当前代码最大执行 5 次, ++pos 最大执行 5 次, + // 要是越界,pos = 6 ,但这一步时,for 循环已经结束 + if (nums[i] !== nums[pos]) nums[++pos] = nums[i]; + } + + return pos + 1; +}; + +var nums1 = [1, 2, 3, 4, 5, 6] +const result1 = removeDuplicates2(nums1); +console.log(nums1, result1); + + diff --git a/Week_01/G20200343030007/LeetCode_007_283.js b/Week_01/G20200343030007/LeetCode_007_283.js new file mode 100644 index 00000000..2604e618 --- /dev/null +++ b/Week_01/G20200343030007/LeetCode_007_283.js @@ -0,0 +1,47 @@ +/** + * @param {number[]} nums + * @return {void} Do not return anything, modify nums in-place instead. + * 双指针法 + */ +var moveZeroes = function(nums) { + if (nums.length <= 1) return; + // 慢指针 + let pos = 0; + // 将所有不为 0 的移到左边,并记录末尾所有 0 的第一个的位置 + for (let i = 1; i < nums.length; i++) { + if (nums[i] !== 0) nums[pos++] = nums[i]; + } + // 将末尾应该为 0 的置为 0 + while (pos < nums.length) { + nums[pos++] = 0; + } +} + +const nums = [0, 1, 0, 3, 12]; +moveZeroes(nums); +// 预期 [1, 3, 1, 0, 0, 0, 0] + +console.log(nums); + + +/** + * 双指针 + * 指针: + * 1. 将非 0 树放在前面 + * 2. 记录末尾 0 的开始位置 + * + * 第一步:将不为 0 的放到前面,记录指针变化 + * insertPos i nums + * 0 0 [0, 1, 0, 3, 12] + * 1 1 [1, 1, 0, 3, 12] + * 1 2 [1, 1, 0, 3, 12] + * 2 3 [1, 3, 0, 3, 12] + * 3 4 [1, 3, 12, 3, 12] + * + * 第二步:将末尾其它数据置为 0 + * insertPos nums + * 3 [1, 3, 12, 0, 12] + * 4 [1, 3, 12, 0, 0] + * + */ + diff --git a/Week_01/G20200343030007/NOTE.md b/Week_01/G20200343030007/NOTE.md index 50de3041..f63c2185 100644 --- a/Week_01/G20200343030007/NOTE.md +++ b/Week_01/G20200343030007/NOTE.md @@ -1 +1,69 @@ -学习笔记 \ No newline at end of file +## 学习笔记 + +### 数据结构与算法理解 + +计算机程序语言都是重复,究极就是重复的,是有规律的,所以所有的算法是可以找规律,套模板的。 + +### 如何学习 + +- **刻意练习** + + 就像打游戏一样,补兵不行一直练补兵,技能不行一直练技能,大神都是每一步基础都很扎实,所以基本功是制胜法宝。 + +- **刷题** + + 1. 敢于承认自己刷题时,***想不出来,不会做*** 的问题,因为优秀的算法时前人总结多年的经验,我们不是圣人,我们只是学习者,记下优秀的思路技巧,并做到熟能生巧时最重要的。 + 2. 刷题只做一遍是不可以的,以为看会了,照着写出来了就等于会了,**大错特错**!这是基本功,是需要达到见到这个题就可以立马想到解法,并且迅速写出来,达到这样的境界,只做一遍是万万不可的。 + - 第一遍:思路看懂,程序做熟 + - 第二遍:第二天重复默写,加强记忆 + - 第三遍:周天再写一遍,加强记忆 + - 第四遍:第二周写一遍 + - 第五遍:面试前突击练习 + +- **总结** + + 人脑记不住琐碎的知识,但可以归纳总结为脑图,**树**的形式 + + 将学习的算法和数据结构知识总结为脑图,并在阶段性学习完毕后,看一下自己的算法数据机构地图添加了哪些树枝,还有哪些知识点没有添加。 + +- **工欲善其事必先利其器** + + - 优秀的 IDE 和插件 + + - 可以使用 vscode top tips 这种关键词查询 + + - 基本的代码规范 + + - 缩行,关键词后跟空格等 + + - **自顶向下的编写方法** + + 先写大体主干,再写细节方法。 + + 比如计算盛水最大面积的题目,先 getMinHeight (求最小高度),再 getArea(求面积),最后 getMaxArea(求最大面积)。先写出大概框架思路,再补足方法细节。这样就不会套进纠结方法细节的误区,导致整个算法没有实现。 + + - 代码编写时的指法 + + - 快速到达行头行尾 + - 以单词为单位左右移动 + - 向上向下移动当前行代码 + - 整段删除或复制 + +### 本周刷题总结 + +- **思路** + + - 基本思路 + + 如果做不出来,可以尝试大脑中最基本的解法,一步一步程序执行的那种,或者暴力解法 for 循环这种。 + + - 其它思路 + + 本周影响最深刻的是对于双指针的理解,精妙 + + - 快慢指针法 + - 移动零 + - 双指针紧逼法 + - 计算最大盛水面积 + + **真的是有套路可言!** \ No newline at end of file From 6eef70907cd318f80f9f9263b6c6a32ad97641f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BE=9A=E5=AE=AA=E6=95=8F?= Date: Sun, 16 Feb 2020 04:01:05 -0800 Subject: [PATCH 0192/1268] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E5=91=A8=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A=E4=BB=A5=E5=8F=8A=E6=80=BB=E7=BB=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030387/NOTE.md | 3 +- Week_01/G20200343030387/leetcode_189_087.js | 11 ++ Week_01/G20200343030387/leetcode_1_087.js | 39 +++++++ Week_01/G20200343030387/leetcode_21_087.js | 0 Week_01/G20200343030387/leetcode_26_087.js | 22 ++++ Week_01/G20200343030387/leetcode_283_087.js | 31 ++++++ Week_01/G20200343030387/leetcode_641_087.js | 109 ++++++++++++++++++++ Week_01/G20200343030387/leetcode_88_087.js | 7 ++ 8 files changed, 221 insertions(+), 1 deletion(-) create mode 100644 Week_01/G20200343030387/leetcode_189_087.js create mode 100644 Week_01/G20200343030387/leetcode_1_087.js create mode 100644 Week_01/G20200343030387/leetcode_21_087.js create mode 100644 Week_01/G20200343030387/leetcode_26_087.js create mode 100644 Week_01/G20200343030387/leetcode_283_087.js create mode 100644 Week_01/G20200343030387/leetcode_641_087.js create mode 100644 Week_01/G20200343030387/leetcode_88_087.js diff --git a/Week_01/G20200343030387/NOTE.md b/Week_01/G20200343030387/NOTE.md index 50de3041..c25abe5d 100644 --- a/Week_01/G20200343030387/NOTE.md +++ b/Week_01/G20200343030387/NOTE.md @@ -1 +1,2 @@ -学习笔记 \ No newline at end of file +解题思路确实稍微比之前开阔了一些,但是很多题目依然无法用较好的方法入手,大多数的时候想到的依旧是用暴力法去解决, +可能因为题目做的还不够多,不够熟吧。还有就是一些数据结构依然不是很理解,比如跳表这种,希望接下来再接再厉。 diff --git a/Week_01/G20200343030387/leetcode_189_087.js b/Week_01/G20200343030387/leetcode_189_087.js new file mode 100644 index 00000000..44c80c72 --- /dev/null +++ b/Week_01/G20200343030387/leetcode_189_087.js @@ -0,0 +1,11 @@ +// 暴力法:双重循环每次移动数组一步 +function rotateArr(nums, k) { + for (let i = 0; i < k; i++) { + let temp = nums[nums.length - 1] + for (let j = nums.length - 1; j > 0; j--) { + nums[j] = nums[j - 1] + } + nums[0] = temp + } + return nums +} diff --git a/Week_01/G20200343030387/leetcode_1_087.js b/Week_01/G20200343030387/leetcode_1_087.js new file mode 100644 index 00000000..a958d354 --- /dev/null +++ b/Week_01/G20200343030387/leetcode_1_087.js @@ -0,0 +1,39 @@ +// 暴力法 +function twoSum1(arr, target) { + const len = arr.length + for (let i = 0; i < len - 1; i++) { + for (let j = i + 1; j < len; j++) { + if (arr[i] + arr[j] === target) { + return [i, j] + } + } + } + return [] +} + +// 第一次遍历把所有元素存进map中,然后判断差值是否存在map中 +function twoSum2(arr, target) { + const len = arr.length + const map = new Map() + for (let i = 0; i < len; i++) { + map.set(arr[i], i) + } + for (let i = 0; i < len - 1; i++) { + if (map.has(target - arr[i]) && map.get(target - arr[i]) !== i) { + return [i, map.get(target - arr[i])] + } + } + return [] +} + +// 优化上方代码直接一遍循环,不存在就存,但是这里第二部循环需要到len +function twoSum3(arr, target) { + const map = new Map() + for (let i = 0; i < len; i++) { + if (map.has(target - arr[i]) && map.get(target - arr[i]) !== i) { + return [i, map.get(target - arr[i])] + } + map.set(arr[i], i) + } + return [] +} diff --git a/Week_01/G20200343030387/leetcode_21_087.js b/Week_01/G20200343030387/leetcode_21_087.js new file mode 100644 index 00000000..e69de29b diff --git a/Week_01/G20200343030387/leetcode_26_087.js b/Week_01/G20200343030387/leetcode_26_087.js new file mode 100644 index 00000000..13e99dfc --- /dev/null +++ b/Week_01/G20200343030387/leetcode_26_087.js @@ -0,0 +1,22 @@ +// 暴力法,反向遍历,重复就删除,最后返回数组长度 +function removeDuplicates1(nums) { + for (let i = nums.length - 1; i > -1; i--) { + let index = nums.indexOf(nums[i]) + if ( index !== i) { + nums.splice(i, 1) + } + } + return nums.length +} + +// 题目只需要前面元素按顺序排列,所以遇到非重复的元素就将count + 1,同时第count个元素等于当前元素 +function removeDuplicates2(nums) { + let count = 0 + for (let i = 0, len = nums.length; i < len; i++) { + if (nums[count] !== nums[i]) { + count++ + nums[count] = nums[i] + } + } + return ++count +} \ No newline at end of file diff --git a/Week_01/G20200343030387/leetcode_283_087.js b/Week_01/G20200343030387/leetcode_283_087.js new file mode 100644 index 00000000..cb6f160b --- /dev/null +++ b/Week_01/G20200343030387/leetcode_283_087.js @@ -0,0 +1,31 @@ +// 快慢指针 +function moveZeros2(arr) { + let slow = 0 + for (let fast = 0; fast < arr.length; fast++) { + if (arr[fast] !== 0) { + swap(arr, slow, fast) + slow++ + } + } +} + +function swap(arr, i, j) { + let temp = arr[i] + arr[i] = arr[j] + arr[j] = temp +} + +// 用一个下标先把所有非0元素往前放,最后在将下标以及之后的位置元素置为0 +function moveZeros3(arr) { + let count = 0 + for (let i = 0; i < arr.length; i++) { + if (arr[i] !== 0) { + arr[index] === arr[i] + index++ + } + } + for (let i = index; i < arr.length; i++) { + arr[i] = 0 + } + return arr +} \ No newline at end of file diff --git a/Week_01/G20200343030387/leetcode_641_087.js b/Week_01/G20200343030387/leetcode_641_087.js new file mode 100644 index 00000000..e7100da8 --- /dev/null +++ b/Week_01/G20200343030387/leetcode_641_087.js @@ -0,0 +1,109 @@ +/** + * Initialize your data structure here. Set the size of the deque to be k. + * @param {number} k + */ +var MyCircularDeque = function(k) { + this.len = k + this.value = [] +}; + +/** +* Adds an item at the front of Deque. Return true if the operation is successful. +* @param {number} value +* @return {boolean} +*/ +MyCircularDeque.prototype.insertFront = function(value) { + if (this.isFull()) { + return false + } + this.value.unshift(value) + return true +}; + +/** +* Adds an item at the rear of Deque. Return true if the operation is successful. +* @param {number} value +* @return {boolean} +*/ +MyCircularDeque.prototype.insertLast = function(value) { + if (this.isFull()) { + return false + } + this.value.push(value) + return true +}; + +/** +* Deletes an item from the front of Deque. Return true if the operation is successful. +* @return {boolean} +*/ +MyCircularDeque.prototype.deleteFront = function() { + if (this.isEmpty()) { + return false + } + this.value.splice(0, 1) + return true +}; + +/** +* Deletes an item from the rear of Deque. Return true if the operation is successful. +* @return {boolean} +*/ +MyCircularDeque.prototype.deleteLast = function() { + if (this.isEmpty()) { + return false + } + this.value.splice(this.value.length - 1, 1) + return true +}; + +/** +* Get the front item from the deque. +* @return {number} +*/ +MyCircularDeque.prototype.getFront = function() { + if (this.isEmpty()) { + return -1 + } + return this.value[0] +}; + +/** +* Get the last item from the deque. +* @return {number} +*/ +MyCircularDeque.prototype.getRear = function() { + if (this.isEmpty()) { + return -1 + } + return this.value[this.value.length - 1] +}; + +/** +* Checks whether the circular deque is empty or not. +* @return {boolean} +*/ +MyCircularDeque.prototype.isEmpty = function() { + return this.value.length === 0 +}; + +/** +* Checks whether the circular deque is full or not. +* @return {boolean} +*/ +MyCircularDeque.prototype.isFull = function() { + return this.value.length === this.len +}; + +/** +* Your MyCircularDeque object will be instantiated and called as such: +* var obj = new MyCircularDeque(k) +* var param_1 = obj.insertFront(value) +* var param_2 = obj.insertLast(value) +* var param_3 = obj.deleteFront() +* var param_4 = obj.deleteLast() +* var param_5 = obj.getFront() +* var param_6 = obj.getRear() +* var param_7 = obj.isEmpty() +* var param_8 = obj.isFull() +*/ \ No newline at end of file diff --git a/Week_01/G20200343030387/leetcode_88_087.js b/Week_01/G20200343030387/leetcode_88_087.js new file mode 100644 index 00000000..70747fc4 --- /dev/null +++ b/Week_01/G20200343030387/leetcode_88_087.js @@ -0,0 +1,7 @@ +// 不是很理解第一个数组后面的0 +function mergeSortedArray(arr1, m, arr2, n) { + arr1.splice(m, n, ...arr2) + arr1.sort((a, b) => { + return a - b + }) +} \ No newline at end of file From 36e6daa88e5a45eff44924eb7b50cba1a99c2f57 Mon Sep 17 00:00:00 2001 From: hubin <543563626@qq.com> Date: Sun, 16 Feb 2020 20:19:24 +0800 Subject: [PATCH 0193/1268] week01 commit --- Week_01/G20200343030365/LeerCode_1_365.java | 21 +++++++++ Week_01/G20200343030365/LeetCode_189_365.java | 45 +++++++++++++++++++ Week_01/G20200343030365/LeetCode_21_365.java | 35 +++++++++++++++ Week_01/G20200343030365/LeetCode_26_365.java | 21 +++++++++ Week_01/G20200343030365/LeetCode_283_365.java | 19 ++++++++ Week_01/G20200343030365/LeetCode_66_365.java | 19 ++++++++ Week_01/G20200343030365/LeetCode_88_365.java | 22 +++++++++ 7 files changed, 182 insertions(+) create mode 100644 Week_01/G20200343030365/LeerCode_1_365.java create mode 100644 Week_01/G20200343030365/LeetCode_189_365.java create mode 100644 Week_01/G20200343030365/LeetCode_21_365.java create mode 100644 Week_01/G20200343030365/LeetCode_26_365.java create mode 100644 Week_01/G20200343030365/LeetCode_283_365.java create mode 100644 Week_01/G20200343030365/LeetCode_66_365.java create mode 100644 Week_01/G20200343030365/LeetCode_88_365.java diff --git a/Week_01/G20200343030365/LeerCode_1_365.java b/Week_01/G20200343030365/LeerCode_1_365.java new file mode 100644 index 00000000..c6deacab --- /dev/null +++ b/Week_01/G20200343030365/LeerCode_1_365.java @@ -0,0 +1,21 @@ +package homework.week_01; + +import java.util.HashMap; +import java.util.Map; + +public class LeerCode_1_365 { + public int[] twoSum(int[] nums, int target) { + int[] result = new int[2]; + Map map = new HashMap(); + for(int i=0;i 0; j--){ + nums[j] = nums[j-1]; + } + nums[0] = last; + } + } + + // 反转 + public void rotate2(int[] nums, int k) { + + int length = nums.length; + k %= length; + reverse(nums,0,length-1); + reverse(nums,0,k-1); + reverse(nums,k,length-1); + + } + + + public void reverse(int[] nums, int start, int end){ + while(start < end){ + int temp = nums[start]; + nums[start] = nums[end]; + nums[end] = temp; + start++; + end--; + } + } + +} diff --git a/Week_01/G20200343030365/LeetCode_21_365.java b/Week_01/G20200343030365/LeetCode_21_365.java new file mode 100644 index 00000000..b726632a --- /dev/null +++ b/Week_01/G20200343030365/LeetCode_21_365.java @@ -0,0 +1,35 @@ +package homework.week_01; + +public class LeetCode_21_365 { + + + public ListNode mergeTwoLists(ListNode l1, ListNode l2) { + ListNode lv = new ListNode(-1); + + //保存头 + ListNode pre = lv; + + while(l1 != null && l2 != null){ + if(l1.val <= l2.val){ + lv.next = l1; + l1 = l1.next; + }else{ + lv.next = l2; + l2 = l2.next; + } + lv = lv.next; + } + + lv.next = l1 == null ? l2 : l1; + + return pre.next; + + } + + + public class ListNode { + int val; + ListNode next; + ListNode(int x) { val = x; } + } +} diff --git a/Week_01/G20200343030365/LeetCode_26_365.java b/Week_01/G20200343030365/LeetCode_26_365.java new file mode 100644 index 00000000..aed0f38e --- /dev/null +++ b/Week_01/G20200343030365/LeetCode_26_365.java @@ -0,0 +1,21 @@ +package homework.week_01; + +/** + * 删除排序数组中的重复项 + */ +public class LeetCode_26_365 { + + public int removeDuplicates(int[] nums) { + + if(nums.length == 0) return 0; + int i = 0; + + for(int j = 1; j < nums.length; j++){ + if(nums[i] != nums[j]){ + i++; + nums[i] = nums[j]; + } + } + return i+1; + } +} diff --git a/Week_01/G20200343030365/LeetCode_283_365.java b/Week_01/G20200343030365/LeetCode_283_365.java new file mode 100644 index 00000000..fd01f952 --- /dev/null +++ b/Week_01/G20200343030365/LeetCode_283_365.java @@ -0,0 +1,19 @@ +package homework.week_01; + +public class LeetCode_283_365 { + + public void moveZeroes(int[] nums) { + + int j = 0; + for(int i = 0; i < nums.length; i++){ + if(nums[i] != 0){ + nums[j] = nums[i]; + j++; + } + } + for(; j < nums.length; j++){ + nums[j] = 0; + } + } + +} diff --git a/Week_01/G20200343030365/LeetCode_66_365.java b/Week_01/G20200343030365/LeetCode_66_365.java new file mode 100644 index 00000000..d2c7d46d --- /dev/null +++ b/Week_01/G20200343030365/LeetCode_66_365.java @@ -0,0 +1,19 @@ +package homework.week_01; + +public class LeetCode_66_365 { + + public int[] plusOne(int[] digits) { + for (int i = digits.length - 1; i >= 0; i--) { + digits[i]++; + digits[i] = digits[i] % 10; + if (digits[i] != 0) return digits; + } + digits = new int[digits.length + 1]; + digits[0] = 1; + return digits; + } + + public static void main(String[] args) { + new LeetCode_66_365().plusOne(new int[]{9,9,9,9}); + } +} diff --git a/Week_01/G20200343030365/LeetCode_88_365.java b/Week_01/G20200343030365/LeetCode_88_365.java new file mode 100644 index 00000000..7d8bcc8e --- /dev/null +++ b/Week_01/G20200343030365/LeetCode_88_365.java @@ -0,0 +1,22 @@ +package homework.week_01; + +import java.util.Arrays; + +/** + * 合并两个有序数组 + */ +public class LeetCode_88_365 { + + public void merge(int[] nums1, int m, int[] nums2, int n) { + + int len1 = m - 1; + int len2 = n - 1; + int len = m + n - 1; + while(len1 >= 0 && len2 >= 0) { + // 注意--符号在后面,表示先进行计算再减1,这种缩写缩短了代码 + nums1[len--] = nums1[len1] > nums2[len2] ? nums1[len1--] : nums2[len2--]; + } + // 表示将nums2数组从下标0位置开始,拷贝到nums1数组中,从下标0位置开始,长度为len2+1 + System.arraycopy(nums2, 0, nums1, 0, len2 + 1); + } +} From 654cb1200328846aaf08f2fb984909bc5bb09182 Mon Sep 17 00:00:00 2001 From: TimZhang1024 Date: Sun, 16 Feb 2020 20:30:23 +0800 Subject: [PATCH 0194/1268] =?UTF-8?q?441=E7=AC=AC=E4=B8=80=E5=91=A8?= =?UTF-8?q?=E4=BD=9C=E4=B8=9A=5Fzt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\346\225\260\344\271\213\345\222\214.java" | 25 +++++ ...\350\275\254\346\225\260\347\273\204.java" | 39 +++++++ ...\345\272\217\351\223\276\350\241\250.java" | 53 +++++++++ ...\351\207\215\345\244\215\351\241\271.java" | 28 +++++ ...\347\247\273\345\212\250\351\233\266.java" | 70 ++++++++++++ ...\346\216\245\351\233\250\346\260\264.java" | 50 +++++++++ ...\347\253\257\351\230\237\345\210\227.java" | 106 ++++++++++++++++++ .../66.\345\212\240\344\270\200.java" | 27 +++++ ...\345\272\217\346\225\260\347\273\204.java" | 67 +++++++++++ ...2\220\347\240\201\345\210\206\346\236\220" | 9 ++ .../\346\224\271\345\206\231deque.java" | 24 ++++ 11 files changed, 498 insertions(+) create mode 100644 "Week_01/G20200343030441/1.\344\270\244\346\225\260\344\271\213\345\222\214.java" create mode 100644 "Week_01/G20200343030441/189.\346\227\213\350\275\254\346\225\260\347\273\204.java" create mode 100644 "Week_01/G20200343030441/21.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\351\223\276\350\241\250.java" create mode 100644 "Week_01/G20200343030441/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.java" create mode 100644 "Week_01/G20200343030441/283.\347\247\273\345\212\250\351\233\266.java" create mode 100644 "Week_01/G20200343030441/42.\346\216\245\351\233\250\346\260\264.java" create mode 100644 "Week_01/G20200343030441/641.\350\256\276\350\256\241\345\276\252\347\216\257\345\217\214\347\253\257\351\230\237\345\210\227.java" create mode 100644 "Week_01/G20200343030441/66.\345\212\240\344\270\200.java" create mode 100644 "Week_01/G20200343030441/88.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\346\225\260\347\273\204.java" create mode 100644 "Week_01/G20200343030441/Queue \345\222\214 Priority Queue\346\272\220\347\240\201\345\210\206\346\236\220" create mode 100644 "Week_01/G20200343030441/\346\224\271\345\206\231deque.java" diff --git "a/Week_01/G20200343030441/1.\344\270\244\346\225\260\344\271\213\345\222\214.java" "b/Week_01/G20200343030441/1.\344\270\244\346\225\260\344\271\213\345\222\214.java" new file mode 100644 index 00000000..66c35e8a --- /dev/null +++ "b/Week_01/G20200343030441/1.\344\270\244\346\225\260\344\271\213\345\222\214.java" @@ -0,0 +1,25 @@ +/* + * @lc app=leetcode.cn id=1 lang=java + * + * [1] 两数之和 + */ + +// @lc code=start +class Solution { + public int[] twoSum(int[] nums, int target) { + + int[] result = new int[2]; + Map map = new HashMap(); + for (int i = 0; i < nums.length; i++) { + if (map.containsKey(target - nums[i])) { + result[1] = i; + result[0] = map.get(target - nums[i]); + return result; + } + map.put(nums[i], i); + } + return result; + } +} +// @lc code=end + diff --git "a/Week_01/G20200343030441/189.\346\227\213\350\275\254\346\225\260\347\273\204.java" "b/Week_01/G20200343030441/189.\346\227\213\350\275\254\346\225\260\347\273\204.java" new file mode 100644 index 00000000..c7d92d09 --- /dev/null +++ "b/Week_01/G20200343030441/189.\346\227\213\350\275\254\346\225\260\347\273\204.java" @@ -0,0 +1,39 @@ +/* + * @lc app=leetcode.cn id=189 lang=java + * + * [189] 旋转数组 + */ + +// @lc code=start +class Solution { + public void rotate(int[] nums, int k) { + // 暴力法,直接移动,复杂度为O(kn) + // int last_element = nums[nums.length-1]; + + // for (int i = 0; i < k; ++i){ + // for (int j = nums.length-1; j > 0; --j){ + // nums[j] = nums[j-1]; + // } + // nums[0] = last_element; + // last_element = nums[nums.length-1]; + // } + + // 反转方法 + k %= nums.length; + swap_array(nums, 0, nums.length-1); + swap_array(nums, 0, k-1); + swap_array(nums, k, nums.length-1); + } + + private void swap_array(int[] nums, int start, int end) { + while (start < end) { + int temp = nums[start]; + nums[start] = nums[end]; + nums[end] = temp; + start++; + end--; + } + } +} +// @lc code=end + diff --git "a/Week_01/G20200343030441/21.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\351\223\276\350\241\250.java" "b/Week_01/G20200343030441/21.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\351\223\276\350\241\250.java" new file mode 100644 index 00000000..b82d8679 --- /dev/null +++ "b/Week_01/G20200343030441/21.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\351\223\276\350\241\250.java" @@ -0,0 +1,53 @@ +/* + * @lc app=leetcode.cn id=21 lang=java + * + * [21] 合并两个有序链表 + */ + +// @lc code=start +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode(int x) { val = x; } + * } + */ +class Solution { + public ListNode mergeTwoLists(ListNode l1, ListNode l2) { + // 头结点 + ListNode prehead = new ListNode(-1); + // 指针 + ListNode prev = prehead; + + while (l1 != null && l2 != null){ + if (l1.val <= l2.val){ + prev.next = l1; + l1 = l1.next; + }else { + prev.next = l2; + l2 = l2.next; + } + prev = prev.next; + } + + while (l1 != null){ + prev.next = l1; + l1 = l1.next; + prev = prev.next; + } + + while (l2 != null){ + prev.next = l2; + l2 = l2.next; + prev = prev.next; + } + + // 简洁写法 + // prev.next = l1 == null ? l2 : l1; + + return prehead.next; + } +} +// @lc code=end + diff --git "a/Week_01/G20200343030441/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.java" "b/Week_01/G20200343030441/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.java" new file mode 100644 index 00000000..4fb7f80b --- /dev/null +++ "b/Week_01/G20200343030441/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.java" @@ -0,0 +1,28 @@ +/* + * @lc app=leetcode.cn id=26 lang=java + * + * [26] 删除排序数组中的重复项 + */ + +// @lc code=start +class Solution { + public int removeDuplicates(int[] nums) { + + if (nums.length == 0) return 0; + + int current_num = nums[0]; + int current_index = 1; + + for (int i = 0; i < nums.length; ++i){ + if (nums[i] != current_num){ + current_num = nums[i]; + nums[current_index] = nums[i]; + current_index++; + } + } + + return current_index; + } +} +// @lc code=end + diff --git "a/Week_01/G20200343030441/283.\347\247\273\345\212\250\351\233\266.java" "b/Week_01/G20200343030441/283.\347\247\273\345\212\250\351\233\266.java" new file mode 100644 index 00000000..00f3e4ba --- /dev/null +++ "b/Week_01/G20200343030441/283.\347\247\273\345\212\250\351\233\266.java" @@ -0,0 +1,70 @@ +/* + * @lc app=leetcode.cn id=283 lang=java + * + * [283] 移动零 + */ + +// @lc code=start +class Solution { + public void moveZeroes(int[] nums) { + // 方案一 + // int len_nums = nums.length; + + // for (int i = 0; i < len_nums; i++){ + // if (nums[i] == 0){ + // for (int j = i; j < len_nums; j++){ + // if (j == len_nums-1){ + // break; + // } + // if(nums[j+1] != 0){ + // nums[i] = nums[j+1]; + // nums[j+1] = 0; + // break; + // } + // } + // } + // } + //============================================= + + // 方案二 28% + // int len_nums = nums.length; + // int count_zeros = 0; + // for (int i = 0; i < len_nums; i++){ + // if (nums[i] == 0){ + // count_zeros++; + // } + // } + + // int count_nums = 0; + // for (int j = 0; j < len_nums; j++){ + // if (nums[j] != 0){ + // nums[count_nums] = nums[j]; + // count_nums++; + // } + // } + + // for (int q = len_nums-count_zeros; q < len_nums; q++){ + // nums[q] = 0; + // } + //=============================================== + + // 方案三,双指针,和方案二其实差不多 + if(nums==null) { + return; + } + //第一次遍历的时候,j指针记录非0的个数,只要是非0的统统都赋给nums[j] + int j = 0; + for(int i=0;i s = new Stack(); + // int i = 0, maxWater = 0, maxBotWater = 0; + // while (i < height.length){ + // if (s.isEmpty() || height[i] <= height[s.peek()]){ + // s.push(i++); + // } + // else { + // int bot = s.pop(); + // maxBotWater = s.isEmpty()? + // 0:(Math.min(height[s.peek()],height[i])-height[bot])*(i-s.peek()-1); + // maxWater += maxBotWater; + // } + // } + // return maxWater; + } +} +// @lc code=end + diff --git "a/Week_01/G20200343030441/641.\350\256\276\350\256\241\345\276\252\347\216\257\345\217\214\347\253\257\351\230\237\345\210\227.java" "b/Week_01/G20200343030441/641.\350\256\276\350\256\241\345\276\252\347\216\257\345\217\214\347\253\257\351\230\237\345\210\227.java" new file mode 100644 index 00000000..df16126e --- /dev/null +++ "b/Week_01/G20200343030441/641.\350\256\276\350\256\241\345\276\252\347\216\257\345\217\214\347\253\257\351\230\237\345\210\227.java" @@ -0,0 +1,106 @@ +/* + * @lc app=leetcode.cn id=641 lang=java + * + * [641] 设计循环双端队列 + */ + +// @lc code=start +class MyCircularDeque { + + private int capacity; + private int[] arr; + private int front; + private int rear; + + /** Initialize your data structure here. Set the size of the deque to be k. */ + public MyCircularDeque(int k) { + // front == rear判断队列为空; + // (rear + 1) % capacity == front判断队列为满; + capacity = k + 1; + arr = new int[capacity]; + front = 0; + rear = 0; + } + + /** Adds an item at the front of Deque. Return true if the operation is successful. */ + public boolean insertFront(int value) { + if (isFull()) { + return false; + } + front = (front - 1 + capacity) % capacity; + arr[front] = value; + return true; + } + + /** Adds an item at the rear of Deque. Return true if the operation is successful. */ + public boolean insertLast(int value) { + if (isFull()) { + return false; + } + arr[rear] = value; + rear = (rear + 1) % capacity; + return true; + } + + /** Deletes an item from the front of Deque. Return true if the operation is successful. */ + public boolean deleteFront() { + if (isEmpty()) { + return false; + } + // front 被设计在数组的开头,所以是 +1 + front = (front + 1) % capacity; + return true; + } + + /** Deletes an item from the rear of Deque. Return true if the operation is successful. */ + public boolean deleteLast() { + if (isEmpty()) { + return false; + } + // rear 被设计在数组的末尾,所以是 -1 + rear = (rear - 1 + capacity) % capacity; + return true; + } + + /** Get the front item from the deque. */ + public int getFront() { + if (isEmpty()) { + return -1; + } + return arr[front]; + } + + /** Get the last item from the deque. */ + public int getRear() { + if (isEmpty()) { + return -1; + } + // 当 rear 为 0 时防止数组越界 + return arr[(rear - 1 + capacity) % capacity]; + } + + /** Checks whether the circular deque is empty or not. */ + public boolean isEmpty() { + return front == rear; + } + + /** Checks whether the circular deque is full or not. */ + public boolean isFull() { + return (rear + 1) % capacity == front; + } +} + +/** + * Your MyCircularDeque object will be instantiated and called as such: + * MyCircularDeque obj = new MyCircularDeque(k); + * boolean param_1 = obj.insertFront(value); + * boolean param_2 = obj.insertLast(value); + * boolean param_3 = obj.deleteFront(); + * boolean param_4 = obj.deleteLast(); + * int param_5 = obj.getFront(); + * int param_6 = obj.getRear(); + * boolean param_7 = obj.isEmpty(); + * boolean param_8 = obj.isFull(); + */ +// @lc code=end + diff --git "a/Week_01/G20200343030441/66.\345\212\240\344\270\200.java" "b/Week_01/G20200343030441/66.\345\212\240\344\270\200.java" new file mode 100644 index 00000000..5cef3a45 --- /dev/null +++ "b/Week_01/G20200343030441/66.\345\212\240\344\270\200.java" @@ -0,0 +1,27 @@ +/* + * @lc app=leetcode.cn id=66 lang=java + * + * [66] 加一 + */ + +// @lc code=start +class Solution { + public int[] plusOne(int[] digits) { + int n = digits.length; + for(int i = n-1; i >= 0; i--) { + if(digits[i] < 9) { + digits[i]++; + return digits; + } + + digits[i] = 0; + } + + int[] newNumber = new int [n+1]; + newNumber[0] = 1; + + return newNumber; + } +} +// @lc code=end + diff --git "a/Week_01/G20200343030441/88.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\346\225\260\347\273\204.java" "b/Week_01/G20200343030441/88.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\346\225\260\347\273\204.java" new file mode 100644 index 00000000..9cf8c7c3 --- /dev/null +++ "b/Week_01/G20200343030441/88.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\346\225\260\347\273\204.java" @@ -0,0 +1,67 @@ +/* + * @lc app=leetcode.cn id=88 lang=java + * + * [88] 合并两个有序数组 + */ + +// @lc code=start +class Solution { + public void merge(int[] nums1, int m, int[] nums2, int n) { + // 方案一,先把nums2中元素放在nums1的后端,再快速排序 + + // 方案二,比较后把大的交换至nums2中,最后再合并 + // for (int i = 0; i < m; ++i){ + // for (int j = 0; j < n; ++j){ + // if (nums1[i] > nums2[j]){ + // int temp = nums1[i]; + // nums1[i] = nums2[j]; + // nums2[j] = temp; + + // // 调整nums2[j]的位置 + // for (int p = j; p < n-1; ++p){ + // if (nums2[p] > nums2[p+1]){ + // int temp2 = nums2[p]; + // nums2[p] = nums2[p+1]; + // nums2[p+1] = temp2; + // }else{ + // break; + // } + // } + + // break; + // } + // } + // } + + // for (int i = 0; i < n; ++i){ + // nums1[m+i] = nums2[i]; + // } + + // 方案三,双指针,拷贝数组 + // Make a copy of nums1. + int [] nums1_copy = new int[m]; + System.arraycopy(nums1, 0, nums1_copy, 0, m); + + // Two get pointers for nums1_copy and nums2. + int p1 = 0; + int p2 = 0; + + // Set pointer for nums1 + int p = 0; + + // Compare elements from nums1_copy and nums2 + // and add the smallest one into nums1. + while ((p1 < m) && (p2 < n)) + nums1[p++] = (nums1_copy[p1] < nums2[p2]) ? nums1_copy[p1++] : nums2[p2++]; + + // if there are still elements to add + if (p1 < m) + System.arraycopy(nums1_copy, p1, nums1, p1 + p2, m + n - p1 - p2); + if (p2 < n) + System.arraycopy(nums2, p2, nums1, p1 + p2, m + n - p1 - p2); + } + + +} +// @lc code=end + diff --git "a/Week_01/G20200343030441/Queue \345\222\214 Priority Queue\346\272\220\347\240\201\345\210\206\346\236\220" "b/Week_01/G20200343030441/Queue \345\222\214 Priority Queue\346\272\220\347\240\201\345\210\206\346\236\220" new file mode 100644 index 00000000..066aaba1 --- /dev/null +++ "b/Week_01/G20200343030441/Queue \345\222\214 Priority Queue\346\272\220\347\240\201\345\210\206\346\236\220" @@ -0,0 +1,9 @@ +Queue源码分析 +1. Queue接口与List、Set同一级别,都是继承了Collection接口,LinkedList实现了Deque接口 +2. 方法有add, remove, element为throw exception方法;offer, poll, peek为return special value方法 +3. 实现类有双端队列Deque,阻塞队列BlockingQueue,非阻塞队列AbstractQueue;PriorityQueue为AbstractQueue的子类 + +Priority Queue源码分析 +1. 方法有add(E e)插入, clear()清空,contains(Object o)检查是否包含,offer(E e)也是插入,peek()读取元素,poll()获取元素,remove(Object o)删除元素 +2. boolean add(E e) 和boolean offer(E e)区别: +实际上add方法的内部调用的还是offer方法,所以我们主要看看offer是如何实现添加一个元素到堆结构中并维持这种结构不被破坏的。首先该方法定义了一 变量获取queue中实际存放的元素个数,紧接着一个if判断,如果该数组已经被完全使用了(没有可用空间了),会调用grow方法进行扩容,grow方法会根据具体情况判断,如果原数组较大则会扩大两倍+2,否则增加50%容量。 diff --git "a/Week_01/G20200343030441/\346\224\271\345\206\231deque.java" "b/Week_01/G20200343030441/\346\224\271\345\206\231deque.java" new file mode 100644 index 00000000..4c86ad2d --- /dev/null +++ "b/Week_01/G20200343030441/\346\224\271\345\206\231deque.java" @@ -0,0 +1,24 @@ +import java.util.Deque; +import java.util.LinkedList; + +public class DoubleQueue { + public static void main(String[] args) { + Deque deque = new LinkedList<>(); + deque.addFirst("a"); + deque.addFirst("b"); + deque.addFirst("c"); + System.out.println(deque); + + String str = deque.peekFirst(); + System.out.println(str); + System.out.println(deque); + + while (deque.size() > 0) { + System.out.println(deque.pop()); + } + + System.out.println(deque); + + + } +} \ No newline at end of file From c1be91f1bd0dea924ba9a419f1a464b8d2201489 Mon Sep 17 00:00:00 2001 From: zzzzz1797 <979652917@qq.com> Date: Sun, 16 Feb 2020 20:38:22 +0800 Subject: [PATCH 0195/1268] =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=AC=AC=E4=B8=80?= =?UTF-8?q?=E5=91=A8=E5=89=A9=E4=BD=99=E7=9A=84=E4=B9=A0=E9=A2=98=E7=BB=83?= =?UTF-8?q?=E4=B9=A0=EF=BC=8C=E4=B8=8D=E8=BF=87=E8=BF=98=E6=9C=89=E5=87=A0?= =?UTF-8?q?=E4=B8=AA=E6=B2=A1=E5=86=99=E5=AE=8C=EF=BC=8C=E4=B8=8B=E5=91=A8?= =?UTF-8?q?=E8=A1=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030545/LeetCode_155_545.py | 66 +++++++++++ Week_01/G20200343030545/LeetCode_20_545.py | 82 ++++++++++++++ Week_01/G20200343030545/LeetCode_239_545.py | 53 +++++++++ Week_01/G20200343030545/LeetCode_26_545.py | 2 +- Week_01/G20200343030545/LeetCode_84_545.py | 115 ++++++++++++++++++++ 5 files changed, 317 insertions(+), 1 deletion(-) create mode 100644 Week_01/G20200343030545/LeetCode_155_545.py create mode 100644 Week_01/G20200343030545/LeetCode_20_545.py create mode 100644 Week_01/G20200343030545/LeetCode_239_545.py create mode 100644 Week_01/G20200343030545/LeetCode_84_545.py diff --git a/Week_01/G20200343030545/LeetCode_155_545.py b/Week_01/G20200343030545/LeetCode_155_545.py new file mode 100644 index 00000000..f604a3ef --- /dev/null +++ b/Week_01/G20200343030545/LeetCode_155_545.py @@ -0,0 +1,66 @@ +""" + 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。 + + push(x) -- 将元素 x 推入栈中。 + pop() -- 删除栈顶的元素。 + top() -- 获取栈顶元素。 + getMin() -- 检索栈中的最小元素。 + + 示例: + MinStack minStack = new MinStack(); + minStack.push(-2); + minStack.push(0); + minStack.push(-3); + minStack.getMin(); --> 返回 -3. + minStack.pop(); + minStack.top(); --> 返回 0. + minStack.getMin(); --> 返回 -2. +""" + + +class MinStack: + + def __init__(self): + """ + initialize your data structure here. + """ + self.__ori_stack = [] + self.__min_stack = [] + + def empty(self) -> bool: + return not bool(self.__ori_stack) + + def push(self, x: int) -> None: + self.__ori_stack.append(x) + if self.__min_stack: + + # 这个if else是重点。 + if self.__min_stack[-1] > x: + # 如果最小栈的站定元素比新值大, 压栈 + self.__min_stack.append(x) + else: + # 反之 将最小栈的栈顶元素再压到最小栈,这样做的好吃时,出栈时不用考虑那么多,直接出就行 + self.__min_stack.append(self.__min_stack[-1]) + else: + self.__min_stack.append(x) + + def pop(self) -> None: + if not self.empty(): + self.__ori_stack.pop() + self.__min_stack.pop() + + def top(self) -> int: + if not self.empty(): + return self.__ori_stack[-1] + raise + + def getMin(self) -> int: + if not self.empty(): + return self.__min_stack[-1] + +# Your MinStack object will be instantiated and called as such: +# obj = MinStack() +# obj.push(x) +# obj.pop() +# param_3 = obj.top() +# param_4 = obj.getMin() diff --git a/Week_01/G20200343030545/LeetCode_20_545.py b/Week_01/G20200343030545/LeetCode_20_545.py new file mode 100644 index 00000000..52866973 --- /dev/null +++ b/Week_01/G20200343030545/LeetCode_20_545.py @@ -0,0 +1,82 @@ +""" + 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 + + 有效字符串需满足: + 左括号必须用相同类型的右括号闭合。 + 左括号必须以正确的顺序闭合。 + 注意空字符串可被认为是有效字符串。 + + 示例 1: + 输入: "()" + 输出: true + + 示例 2: + 输入: "()[]{}" + 输出: true + + 示例 3: + 输入: "(]" + 输出: false + + 示例 4: + 输入: "([)]" + 输出: false + + 示例 5: + 输入: "{[]}" + 输出: true +""" + + +class Solution: + def isValid(self, s: str) -> bool: + return self.use_stack(s) + + @classmethod + def use_stack(cls, s: str) -> bool: + """ + 运用栈这种数据结构 + 依次遍历字符串入栈。 + 当字符属于右括号时,弹出站定元素,比较弹出的内容和此时遍历的内容。如果有效循环这个操作,如果无效则直接返回非False + 当字符属于左括号时,压栈。 + 循环结束判断栈里是否还有元素,如果有则返回False, 无返回True + + 有一个小技巧:就是可以先判断字符串的长度,如果长度是奇数,则肯定不是有效的。 + 时间复杂度O(n),空间复杂度O(n) + """ + + s_len = len(s) + + if s_len % 2 != 0: # 奇数为肯定不符合要求 + return False + + stack = [] + for info in s: + if info in ("]", "}", ")"): + if not stack: + return False + ori_info = stack.pop() + if cls.check_valid(ori_info, info): + continue + else: + return False + else: + stack.append(info) + return True if not stack else False + + @classmethod + def check_valid(cls, info: str, check_info: str) -> bool: + if info == "[" and check_info == "]": + res = True + elif info == "{" and check_info == "}": + res = True + elif info == "(" and check_info == ")": + res = True + else: + res = False + + return res + + +if __name__ == '__main__': + print(Solution.use_stack("(]")) diff --git a/Week_01/G20200343030545/LeetCode_239_545.py b/Week_01/G20200343030545/LeetCode_239_545.py new file mode 100644 index 00000000..84fcb66f --- /dev/null +++ b/Week_01/G20200343030545/LeetCode_239_545.py @@ -0,0 +1,53 @@ +""" + 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。 + 你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 + 返回滑动窗口中的最大值。 + + 示例: + 输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3 + 输出: [3,3,5,5,6,7] + + 解释: + 滑动窗口的位置 最大值 + --------------- ----- + [1 3 -1] -3 5 3 6 7 3 + 1 [3 -1 -3] 5 3 6 7 3 + 1 3 [-1 -3 5] 3 6 7 5 + 1 3 -1 [-3 5 3] 6 7 5 + 1 3 -1 -3 [5 3 6] 7 6 + 1 3 -1 -3 5 [3 6 7] 7 + + 提示: + 你可以假设 k 总是有效的,在输入数组不为空的情况下,1 ≤ k ≤ 输入数组的大小。 +""" +from typing import List + + +class Solution: + def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]: + return self.directly(nums, k) + + @classmethod + def directly(cls, nums: List[int], k: int) -> List[int]: + """ + 暴力求解法 + 外层循环控制列表元素的遍历 + 内层循环控制 k个数的循环 + 时间复杂度O(n*k),空间复杂度O(n-k+1) + """ + res = [] + for i in range(len(nums)): + max_value = float("-inf") + for j in range(i, k + i): + max_value = max(nums[j], max_value) + res.append(max_value) + if i == len(nums) - k: + break + return res + + +if __name__ == '__main__': + params = [1, 3, -1, -3, 5, 3, 6, 7] + num = 3 + + print(Solution.directly(params, num)) diff --git a/Week_01/G20200343030545/LeetCode_26_545.py b/Week_01/G20200343030545/LeetCode_26_545.py index 59dc724b..2eedf073 100644 --- a/Week_01/G20200343030545/LeetCode_26_545.py +++ b/Week_01/G20200343030545/LeetCode_26_545.py @@ -46,4 +46,4 @@ def double_pointer(cls, nums: List[int]) -> int: if __name__ == '__main__': - print(Solution.double_pointer([1, 2, 3, 4, 5])) + print(Solution.double_pointer([1, 2, 3, 4, 5, 5, 5, 5])) diff --git a/Week_01/G20200343030545/LeetCode_84_545.py b/Week_01/G20200343030545/LeetCode_84_545.py new file mode 100644 index 00000000..7856780a --- /dev/null +++ b/Week_01/G20200343030545/LeetCode_84_545.py @@ -0,0 +1,115 @@ +""" + 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 + 求在该柱状图中,能够勾勒出来的矩形的最大面积。 + + 示例: + 输入: [2,1,5,6,2,3] + 输出: 10 +""" +from typing import List + + +class Solution: + def largestRectangleArea(self, heights: List[int]) -> int: + pass + + @classmethod + def directly_2(cls, heights: List[int]) -> int: + """ + 暴力求解法,三层循环嵌套。 + 第一层控制柱子的遍历。 + 第二层控制柱子往由遍历 + 第三层控制第一层循环的所在的柱子和第二层循环所在的柱子中间的最小值获取。 + 然后依次更新外层公用的面积 + + 时间复杂度:O(n^3), 空间复杂度O(1) + """ + res = 0 + height_len = len(heights) + + for i in range(height_len): # 第一层循环用于遍历每个柱子 + for j in range(i, height_len): + min_height = float("inf") + for k in range(i, j + 1): + print(k) + min_height = min(heights[k], min_height) + res = max(res, min_height * (j - i + 1)) + return res + + @classmethod + def directly_1(cls, heights: List[int]) -> int: + """ + 暴力求解法 + 两层循环 + 第一层循环控制柱子的遍历, + 第二层循环依次往右边遍历,并且计算出每次遍历时的最大面积。 + 和暴力求解法1不同的时,不用去找两根柱子之间的最小柱子,用一个变量保存这次循环时,最小柱子的高度。 + 时间复杂度O(n^2),空间复杂度O(1) + """ + heights_len = len(heights) + res = 0 + for index in range(heights_len): + min_height = float("inf") + for tmp_index in range(index, heights_len): + min_height = min(min_height, heights[tmp_index]) + res = max(res, min_height * (tmp_index - index + 1)) + return res + + @classmethod + def divide(cls, heights: List[int]) -> int: + """ + 分治法 + 确定了最矮柱子以后,矩形的宽尽可能往两边延伸。 + 在最矮柱子左边的最大面积矩形(子问题)。 + 在最矮柱子右边的最大面积矩形(子问题)。 + + 时间复杂度 平均开销:O(nlogn) 最坏O(n^2) + 空间复杂度 O(n) + FIXME: 还是不太理解,先敲一遍 + """ + + def _divide(nums: List[int], start: int, end: int) -> int: + if start > end: + return 0 + + min_index = start + for i in range(start, end + 1): + if nums[min_index] > nums[i]: + min_index = i + + check_value = max(_divide(nums, start, min_index - 1), _divide(nums, min_index + 1, end)) + return max(check_value, nums[min_index] * (end - start + 1)) + + return _divide(heights, 0, len(heights) - 1) + + @classmethod + def use_stack(cls, heights: List[int]) -> int: + """ + 使用栈的数据结构(单调递增栈) + 1. 先判断栈是否为空 + 2. + """ + stack = [] + + res = 0 + for index in range(len(heights)): + if not stack: + stack.append(index) + else: + if heights[index] < heights[stack[-1]]: + # 说明已经找到了右边界,然后依次弹出栈顶元素 并且计算该元素的最大面积 + while True: + tmp_index = stack.pop() + print(tmp_index, "ffff", heights[tmp_index], index - tmp_index + 1) + + res = max(res, heights[tmp_index] * (index - tmp_index + 1)) + if not stack: + break + stack.append(index) + else: + stack.append(index) + return res + + +if __name__ == '__main__': + print(Solution.use_stack([2, 1, 5, 6, 2, 3])) From e3b52eb558e6e72abb1e2dfa0269afa7ee8a23c8 Mon Sep 17 00:00:00 2001 From: liuhuan <1058039938@qq.com> Date: Sun, 16 Feb 2020 20:48:10 +0800 Subject: [PATCH 0196/1268] 'Week_01' --- Week_01/G20200343030009/LeetCode_1_003.js | 29 ++++++++++++++++++++++ Week_01/G20200343030009/LeetCode_26_003.js | 18 ++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 Week_01/G20200343030009/LeetCode_1_003.js create mode 100644 Week_01/G20200343030009/LeetCode_26_003.js diff --git a/Week_01/G20200343030009/LeetCode_1_003.js b/Week_01/G20200343030009/LeetCode_1_003.js new file mode 100644 index 00000000..0b064f9d --- /dev/null +++ b/Week_01/G20200343030009/LeetCode_1_003.js @@ -0,0 +1,29 @@ +/** + * @param {number[]} nums + * @param {number} target + * @return {number[]} + */ +var twoSum = function(nums, target) { + let hashObj = {} + // hash表法 + // 遍历一次数组,将所有元素存hash表中,再在表中查找是否存在值为target-nums[i] + for (let i = 0; i < nums.length; i++) { + // key存值, value存下标 + const t = target - nums[i] + // B: 放到一次循环里 + if (hashObj.hasOwnProperty(t) && hashObj[t] !== i) { + // 存在hash表中且不是本身元素 + return [hashObj[t], i] + } + hashObj[nums[i]] = i + } + // A: 分先后两次遍历 + // for (let i = 0; i < nums.length; i++) { + // const t = target - nums[i] + // if (hashObj.hasOwnProperty(t) && hashObj[t] !== i) { + // // 存在hash表中且不是本身元素 + // return [i, hashObj[t]] + // } + // } + return [] +}; \ No newline at end of file diff --git a/Week_01/G20200343030009/LeetCode_26_003.js b/Week_01/G20200343030009/LeetCode_26_003.js new file mode 100644 index 00000000..577c39d5 --- /dev/null +++ b/Week_01/G20200343030009/LeetCode_26_003.js @@ -0,0 +1,18 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var removeDuplicates = function(nums) { + //快慢指针 + let slow = 0; + let quick = 1; + for (; quick < nums.length; quick++) { + if (nums[slow] !== nums[quick]) { + // 快慢指针指向的数据不等,快指针数据赋值到慢指针下个位置 + nums[++slow] = nums[quick] + } + // 当快慢指针指向的数据相等(重复数据), 只是快指针单独向右移动; + // 直到不等时,进入上面if,将快指针数据赋值到慢指针下个位置 + } + return slow+1 +}; \ No newline at end of file From 85b4ed9579234e3caa9ee324eb0232b3a726ce7a Mon Sep 17 00:00:00 2001 From: xiangxuan Date: Sun, 16 Feb 2020 20:51:08 +0800 Subject: [PATCH 0197/1268] 543-Week 01 --- Week_01/G20200343030543/LeetCode_641_543.java | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 Week_01/G20200343030543/LeetCode_641_543.java diff --git a/Week_01/G20200343030543/LeetCode_641_543.java b/Week_01/G20200343030543/LeetCode_641_543.java new file mode 100644 index 00000000..544312af --- /dev/null +++ b/Week_01/G20200343030543/LeetCode_641_543.java @@ -0,0 +1,78 @@ +class MyCircularDeque { + private int capacity; + private int[] array; + private int front; + private int rear; + + /** Initialize your data structure here. Set the size of the deque to be k. */ + public MyCircularDeque(int k) { + capacity = k + 1; + array = new int[capacity]; + front = 0; + rear = 0; + } + + /** Adds an item at the front of Deque. Return true if the operation is successful. */ + public boolean insertFront(int value) { + if(isFull()){ + return false; + } + front = (front - 1 + capacity) % capacity; + array[front] = value; + return true; + } + + /** Adds an item at the rear of Deque. Return true if the operation is successful. */ + public boolean insertLast(int value) { + if(isFull()){ + return false; + } + array[rear] = value; + rear = (rear + 1) % capacity; + return true; + } + + /** Deletes an item from the front of Deque. Return true if the operation is successful. */ + public boolean deleteFront() { + if(isEmpty()){ + return false; + } + front = (front + 1) % capacity; + return true; + } + + /** Deletes an item from the rear of Deque. Return true if the operation is successful. */ + public boolean deleteLast() { + if(isEmpty()){ + return false; + } + rear = (rear - 1 + capacity) % capacity; + return true; + } + + /** Get the front item from the deque. */ + public int getFront() { + if(isEmpty()){ + return -1; + } + return array[front]; + } + + /** Get the last item from the deque. */ + public int getRear() { + if(isEmpty()){ + return -1; + } + return array[(rear - 1 + capacity) % capacity]; + } + + /** Checks whether the circular deque is empty or not. */ + public boolean isEmpty() { + return rear == front; + } + + /** Checks whether the circular deque is full or not. */ + public boolean isFull() { + return (rear + 1) % capacity == front; + } +} From a883ac00c0c10f4368ce38504518c410b490f9ef Mon Sep 17 00:00:00 2001 From: liuhuan <1058039938@qq.com> Date: Sun, 16 Feb 2020 20:51:35 +0800 Subject: [PATCH 0198/1268] 'rename' --- Week_01/G20200343030009/{LeetCode_1_003.js => LeetCode_1_009.js} | 0 .../G20200343030009/{LeetCode_26_003.js => LeetCode_26_009.js} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename Week_01/G20200343030009/{LeetCode_1_003.js => LeetCode_1_009.js} (100%) rename Week_01/G20200343030009/{LeetCode_26_003.js => LeetCode_26_009.js} (100%) diff --git a/Week_01/G20200343030009/LeetCode_1_003.js b/Week_01/G20200343030009/LeetCode_1_009.js similarity index 100% rename from Week_01/G20200343030009/LeetCode_1_003.js rename to Week_01/G20200343030009/LeetCode_1_009.js diff --git a/Week_01/G20200343030009/LeetCode_26_003.js b/Week_01/G20200343030009/LeetCode_26_009.js similarity index 100% rename from Week_01/G20200343030009/LeetCode_26_003.js rename to Week_01/G20200343030009/LeetCode_26_009.js From 65f0910ca9e75aa5b23e8aff5b72d007ae393d4a Mon Sep 17 00:00:00 2001 From: tanzy2018 Date: Sun, 16 Feb 2020 20:52:53 +0800 Subject: [PATCH 0199/1268] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E5=91=A8=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit LeetCode 26 LeetCode 283 本周心得总结 --- Week_01/G20200343030577/LeetCode_26_577.go | 74 +++++++++++++++++++++ Week_01/G20200343030577/LeetCode_283_577.go | 48 +++++++++++++ Week_01/G20200343030577/NOTE.md | 17 ++++- 3 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 Week_01/G20200343030577/LeetCode_26_577.go create mode 100644 Week_01/G20200343030577/LeetCode_283_577.go diff --git a/Week_01/G20200343030577/LeetCode_26_577.go b/Week_01/G20200343030577/LeetCode_26_577.go new file mode 100644 index 00000000..5fefb198 --- /dev/null +++ b/Week_01/G20200343030577/LeetCode_26_577.go @@ -0,0 +1,74 @@ +/* + * @lc app=leetcode.cn id=26 lang=golang + * + * [26] 删除排序数组中的重复项 + * + * https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/description/ + * + * algorithms + * Easy (48.38%) + * Likes: 1328 + * Dislikes: 0 + * Total Accepted: 246K + * Total Submissions: 507K + * Testcase Example: '[1,1,2]' + * + * 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 + * + * 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 + * + * 示例 1: + * + * 给定数组 nums = [1,1,2], + * + * 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 + * + * 你不需要考虑数组中超出新长度后面的元素。 + * + * 示例 2: + * + * 给定 nums = [0,0,1,1,1,2,2,3,3,4], + * + * 函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。 + * + * 你不需要考虑数组中超出新长度后面的元素。 + * + * + * 说明: + * + * 为什么返回数值是整数,但输出的答案是数组呢? + * + * 请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。 + * + * 你可以想象内部操作如下: + * + * // nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝 + * int len = removeDuplicates(nums); + * + * // 在函数里修改输入数组对于调用者是可见的。 + * // 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。 + * for (int i = 0; i < len; i++) { + * print(nums[i]); + * } + * + * + */ + +// @lc code=start +func removeDuplicates(nums []int) int { + // 处理空集或者只有一个元素的集合 + if len(nums) <=1 { + return len(nums) + } + + k := 0 + for i:= 1;i< len(nums);i++{ + if nums[i] != nums[k] { + k++ + nums[k] = nums[i] + } + } + return k+1 +} +// @lc code=end + diff --git a/Week_01/G20200343030577/LeetCode_283_577.go b/Week_01/G20200343030577/LeetCode_283_577.go new file mode 100644 index 00000000..602a1a8d --- /dev/null +++ b/Week_01/G20200343030577/LeetCode_283_577.go @@ -0,0 +1,48 @@ +/* + * @lc app=leetcode.cn id=283 lang=golang + * + * [283] 移动零 + * + * https://leetcode-cn.com/problems/move-zeroes/description/ + * + * algorithms + * Easy (59.14%) + * Likes: 496 + * Dislikes: 0 + * Total Accepted: 107.1K + * Total Submissions: 180.4K + * Testcase Example: '[0,1,0,3,12]' + * + * 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 + * + * 示例: + * + * 输入: [0,1,0,3,12] + * 输出: [1,3,12,0,0] + * + * 说明: + * + * + * 必须在原数组上操作,不能拷贝额外的数组。 + * 尽量减少操作次数。 + * + * + */ + +// @lc code=start +func moveZeroes(nums []int) { + k := 0 + for i := 0;i Date: Sun, 16 Feb 2020 20:53:48 +0800 Subject: [PATCH 0200/1268] =?UTF-8?q?Rename=20=E7=A7=BB=E5=8A=A8=E9=9B=B6.?= =?UTF-8?q?java=20to=20move-zero.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../G20200343030437/move-zero.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Week_01/G20200343030437/\347\247\273\345\212\250\351\233\266.java" => Week_01/G20200343030437/move-zero.java (100%) diff --git "a/Week_01/G20200343030437/\347\247\273\345\212\250\351\233\266.java" b/Week_01/G20200343030437/move-zero.java similarity index 100% rename from "Week_01/G20200343030437/\347\247\273\345\212\250\351\233\266.java" rename to Week_01/G20200343030437/move-zero.java From 99bb95a6dbdd268cde182da9ec607c2ccdf5cd99 Mon Sep 17 00:00:00 2001 From: xiebor <37875140+xiebor@users.noreply.github.com> Date: Sun, 16 Feb 2020 20:54:28 +0800 Subject: [PATCH 0201/1268] Rename 3sum.java to three-sum.java --- Week_01/G20200343030437/{3sum.java => three-sum.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Week_01/G20200343030437/{3sum.java => three-sum.java} (100%) diff --git a/Week_01/G20200343030437/3sum.java b/Week_01/G20200343030437/three-sum.java similarity index 100% rename from Week_01/G20200343030437/3sum.java rename to Week_01/G20200343030437/three-sum.java From 51787a6e588cb6427f10bcd0846b254f55e69834 Mon Sep 17 00:00:00 2001 From: xinlanfeng Date: Sun, 16 Feb 2020 21:02:14 +0800 Subject: [PATCH 0202/1268] finish week1 --- Week_01/G20200343030599/LeetCode_01_599.js | 34 ++++++++++++++++ Week_01/G20200343030599/LeetCode_189_599.js | 38 +++++++++++++++++ Week_01/G20200343030599/LeetCode_21_599.js | 33 +++++++++++++++ Week_01/G20200343030599/LeetCode_26_599.js | 29 +++++++++++++ Week_01/G20200343030599/LeetCode_283_599.js | 45 +++++++++++++++++++++ Week_01/G20200343030599/LeetCode_66.599.js | 31 ++++++++++++++ Week_01/G20200343030599/LeetCode_88_599.js | 28 +++++++++++++ 7 files changed, 238 insertions(+) create mode 100644 Week_01/G20200343030599/LeetCode_01_599.js create mode 100644 Week_01/G20200343030599/LeetCode_189_599.js create mode 100644 Week_01/G20200343030599/LeetCode_21_599.js create mode 100644 Week_01/G20200343030599/LeetCode_26_599.js create mode 100644 Week_01/G20200343030599/LeetCode_283_599.js create mode 100644 Week_01/G20200343030599/LeetCode_66.599.js create mode 100644 Week_01/G20200343030599/LeetCode_88_599.js diff --git a/Week_01/G20200343030599/LeetCode_01_599.js b/Week_01/G20200343030599/LeetCode_01_599.js new file mode 100644 index 00000000..1bccc44b --- /dev/null +++ b/Week_01/G20200343030599/LeetCode_01_599.js @@ -0,0 +1,34 @@ +/* + * @lc app=leetcode.cn id=1 lang=javascript + * + * [1] 两数之和 + */ + +// @lc code=start +/** + * @param {number[]} nums + * @param {number} target + * @return {number[]} + */ +var twoSum = function (nums, target) { + //方法一:两重暴力循环 + /* + for (let i = 0; i < nums.length - 1; i++) { + for (let j = i + 1; j < nums.length; j++) { + if (nums[j] === target - nums[i]) return [i, j]; + } + } + */ + + //方法二:Hash表 + let temp = []; + + for (let i = 0; i < nums.length; i++) { + if (temp[nums[i]] !== undefined) { + return [temp[nums[i]], i] + } + temp[target - nums[i]] = i; + } + +}; +// @lc code=end \ No newline at end of file diff --git a/Week_01/G20200343030599/LeetCode_189_599.js b/Week_01/G20200343030599/LeetCode_189_599.js new file mode 100644 index 00000000..98242063 --- /dev/null +++ b/Week_01/G20200343030599/LeetCode_189_599.js @@ -0,0 +1,38 @@ +/* + * @lc app=leetcode.cn id=189 lang=javascript + * + * [189] 旋转数组 + */ + +// @lc code=start +/** + * @param {number[]} nums + * @param {number} k + * @return {void} Do not return anything, modify nums in-place instead. + */ +var rotate = function (nums, k) { + let len = nums.length + + //方法一:暴力求解 + /* + for (let i = 0; i < k; i++) { + let current = nums[len - 1]; + for (let j = 0; j < len; j++) { + [nums[j], current] = [current, nums[j]]; + } + } + */ + + //方法二:把数组尾部的元素删除后添加在数组头部 + /* + for (let i = 0; i < k; i++) { + nums.unshift(nums.pop()) + } + */ + + //方法三:找到数组旋转的索引位置 len - k % n + let reversePoint = len - k % len; + reversePoint !== 0 && (nums.splice(0, 0, ...nums.splice(reversePoint, k))) + +}; +// @lc code=end \ No newline at end of file diff --git a/Week_01/G20200343030599/LeetCode_21_599.js b/Week_01/G20200343030599/LeetCode_21_599.js new file mode 100644 index 00000000..0403d2eb --- /dev/null +++ b/Week_01/G20200343030599/LeetCode_21_599.js @@ -0,0 +1,33 @@ +/* + * @lc app=leetcode.cn id=21 lang=javascript + * + * [21] 合并两个有序链表 + */ + +// @lc code=start +/** + * Definition for singly-linked list. + * function ListNode(val) { + * this.val = val; + * this.next = null; + * } + */ +/** + * @param {ListNode} l1 + * @param {ListNode} l2 + * @return {ListNode} + */ +var mergeTwoLists = function (l1, l2) { + //使用递归 + if (!l1) return l2; + if (!l2) return l1; + + if (l1.val < l2.val) { + l1.next = mergeTwoLists(l1.next, l2); + return l1; + } else { + l2.next = mergeTwoLists(l1, l2.next); + return l2; + } +}; +// @lc code=end \ No newline at end of file diff --git a/Week_01/G20200343030599/LeetCode_26_599.js b/Week_01/G20200343030599/LeetCode_26_599.js new file mode 100644 index 00000000..c3a460c1 --- /dev/null +++ b/Week_01/G20200343030599/LeetCode_26_599.js @@ -0,0 +1,29 @@ +/* + * @lc app=leetcode.cn id=26 lang=javascript + * + * [26] 删除排序数组中的重复项 + */ + +// @lc code=start +/** + * @param {number[]} nums + * @return {number} + */ +var removeDuplicates = function (nums) { + + if (nums.length === 0) return 0; + + //双指针法:i指针用来遍历数组,j指针用来指向当前不重复数组的最后一项 + //注意审题:数组是已经排好序的数组,所以如果有重复元素,那么它们一定连续出现的 + //且不需要考虑数组中超出新长度后面的元素 + let j = 0; + for (let i = 1; i < nums.length; i++) { + if (nums[i] !== nums[j]) { + j++; + nums[j] = nums[i]; + } + } + + return j + 1; +}; +// @lc code=end \ No newline at end of file diff --git a/Week_01/G20200343030599/LeetCode_283_599.js b/Week_01/G20200343030599/LeetCode_283_599.js new file mode 100644 index 00000000..12076fdd --- /dev/null +++ b/Week_01/G20200343030599/LeetCode_283_599.js @@ -0,0 +1,45 @@ +/* + * @lc app=leetcode.cn id=283 lang=javascript + * + * [283] 移动零 + */ + +// @lc code=start +/** + * @param {number[]} nums + * @return {void} Do not return anything, modify nums in-place instead. + */ +var moveZeroes = function (nums) { + // 解法一: + // let len = nums.length; + // let end = len - 1; + + // for (let i = 0; i < len; i++) { + + // if (i >= end) break; + + // if (nums[i] === 0) { + // nums.splice(i, 1); + // i--; + // nums.push(0); + // end--; + // } + // } + + //解法二: + let j = 0; + let len = nums.length; + + for (let i = 0; i < len; i++) { + if (nums[i] !== 0) { + nums[j] = nums[i]; + + if (i !== j) { + nums[i] = 0; + } + + j++; + } + } +}; +// @lc code=end \ No newline at end of file diff --git a/Week_01/G20200343030599/LeetCode_66.599.js b/Week_01/G20200343030599/LeetCode_66.599.js new file mode 100644 index 00000000..21a1fd07 --- /dev/null +++ b/Week_01/G20200343030599/LeetCode_66.599.js @@ -0,0 +1,31 @@ +/* + * @lc app=leetcode.cn id=66 lang=javascript + * + * [66] 加一 + */ + +// @lc code=start +/** + * @param {number[]} digits + * @return {number[]} + */ +var plusOne = function (digits) { + const len = digits.length; + + //从末位开始 + for (let i = len - 1; i >= 0; i--) { + //数组的值 + 1 (末位 + 1) + digits[i]++; + + //末位和10取模,如果结果为0,则说明有进位,如果结果不为0,则说明没有进位可直接返回+1之后的数组 + digits[i] %= 10; + + if (digits[i] !== 0) return digits; + } + + //如果原数组+1后所有位都需要进位,则数组的长度需要扩充一位 + digits = [...Array(len + 1)].map(_ => 0); //声明一个长度为len+1的所有值为0的数组 + digits[0] = 1; + return digits; +}; +// @lc code=end \ No newline at end of file diff --git a/Week_01/G20200343030599/LeetCode_88_599.js b/Week_01/G20200343030599/LeetCode_88_599.js new file mode 100644 index 00000000..c2c852a3 --- /dev/null +++ b/Week_01/G20200343030599/LeetCode_88_599.js @@ -0,0 +1,28 @@ +/* + * @lc app=leetcode.cn id=88 lang=javascript + * + * [88] 合并两个有序数组 + */ + +// @lc code=start +/** + * @param {number[]} nums1 + * @param {number} m + * @param {number[]} nums2 + * @param {number} n + * @return {void} Do not return anything, modify nums1 in-place instead. + */ +var merge = function (nums1, m, nums2, n) { + // 双指针 + 从后往前 + let p1 = m - 1; + let p2 = n - 1; + let p = m + n - 1; + + while (p1 >= 0 && p2 >= 0) { + nums1[p--] = nums1[p1] > nums2[p2] ? nums1[p1--] : nums2[p2--]; + } + + //如果nums的m = 0 , 则把nums2中的所有值放到nums1中 + nums1.splice(0, p2 + 1, ...nums2.slice(0, p2 + 1)) +}; +// @lc code=end \ No newline at end of file From 01f7914b8a56eea94c815f7a62a55016163ad956 Mon Sep 17 00:00:00 2001 From: superau Date: Sun, 16 Feb 2020 21:03:15 +0800 Subject: [PATCH 0203/1268] correct the data --- Week_00/G20200343030007/LeetCode_007_11.js | 27 -------- Week_00/G20200343030007/LeetCode_007_26.js | 51 --------------- Week_00/G20200343030007/LeetCode_007_283.js | 47 -------------- Week_00/G20200343030007/NOTE.md | 70 +-------------------- 4 files changed, 1 insertion(+), 194 deletions(-) delete mode 100644 Week_00/G20200343030007/LeetCode_007_11.js delete mode 100644 Week_00/G20200343030007/LeetCode_007_26.js delete mode 100644 Week_00/G20200343030007/LeetCode_007_283.js diff --git a/Week_00/G20200343030007/LeetCode_007_11.js b/Week_00/G20200343030007/LeetCode_007_11.js deleted file mode 100644 index a1714bf1..00000000 --- a/Week_00/G20200343030007/LeetCode_007_11.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * @param {number[]} height - * @return {number} - * 盛水最多的容器 - * 双指针法 - */ -var maxArea = function(height) { - let maxArea = 0; - - for (let i = 0, j = height.length - 1; i < j;) { - const minHeight = height[i] < height[j] ? height[i++] : height[j--]; - const area = (j - i + 1) * minHeight; - maxArea = Math.max(maxArea, area); - } - - return maxArea; -}; - - - -/** - * 双指针紧逼法 - * 原理:最大盛水面积取决于短边的长度 - * 指针1:最左边 - * 指针2:最右边 - * 如果左指针高度 < 右指针高度,左边往里缩,反之亦然 - */ \ No newline at end of file diff --git a/Week_00/G20200343030007/LeetCode_007_26.js b/Week_00/G20200343030007/LeetCode_007_26.js deleted file mode 100644 index eced7439..00000000 --- a/Week_00/G20200343030007/LeetCode_007_26.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * @param {number[]} nums - * @return {number} - * 双指针法 - */ -var removeDuplicates = function (nums) { - if (nums.length <= 1) return nums.length; - // 定义慢指针 - let pos = 0; - - for (let i = 1; i < nums.length; i++) { - if (nums[i] !== nums[pos]) { - // 每次将 pos 指针对应位置的第二位作为不重复项 - nums[pos + 1] = nums[i]; - pos++; - } - } - - return pos + 1; -}; - - -// 预期:[1, 2, 3] -// var nums = [1, 1, 1, 2, 2, 3] -// 返回: 3 - -// const result = removeDuplicates(nums); -// console.log(nums, result); - -/** - * 优化一下 - */ -var removeDuplicates2 = function (nums) { - if (nums.length <= 1) return nums.length; - // 定义慢指针 - let pos = 0; - - for (let i = 1; i < nums.length; i++) { - // 会不会出现数组越界情况,不会,因为当前代码最大执行 5 次, ++pos 最大执行 5 次, - // 要是越界,pos = 6 ,但这一步时,for 循环已经结束 - if (nums[i] !== nums[pos]) nums[++pos] = nums[i]; - } - - return pos + 1; -}; - -var nums1 = [1, 2, 3, 4, 5, 6] -const result1 = removeDuplicates2(nums1); -console.log(nums1, result1); - - diff --git a/Week_00/G20200343030007/LeetCode_007_283.js b/Week_00/G20200343030007/LeetCode_007_283.js deleted file mode 100644 index 2604e618..00000000 --- a/Week_00/G20200343030007/LeetCode_007_283.js +++ /dev/null @@ -1,47 +0,0 @@ -/** - * @param {number[]} nums - * @return {void} Do not return anything, modify nums in-place instead. - * 双指针法 - */ -var moveZeroes = function(nums) { - if (nums.length <= 1) return; - // 慢指针 - let pos = 0; - // 将所有不为 0 的移到左边,并记录末尾所有 0 的第一个的位置 - for (let i = 1; i < nums.length; i++) { - if (nums[i] !== 0) nums[pos++] = nums[i]; - } - // 将末尾应该为 0 的置为 0 - while (pos < nums.length) { - nums[pos++] = 0; - } -} - -const nums = [0, 1, 0, 3, 12]; -moveZeroes(nums); -// 预期 [1, 3, 1, 0, 0, 0, 0] - -console.log(nums); - - -/** - * 双指针 - * 指针: - * 1. 将非 0 树放在前面 - * 2. 记录末尾 0 的开始位置 - * - * 第一步:将不为 0 的放到前面,记录指针变化 - * insertPos i nums - * 0 0 [0, 1, 0, 3, 12] - * 1 1 [1, 1, 0, 3, 12] - * 1 2 [1, 1, 0, 3, 12] - * 2 3 [1, 3, 0, 3, 12] - * 3 4 [1, 3, 12, 3, 12] - * - * 第二步:将末尾其它数据置为 0 - * insertPos nums - * 3 [1, 3, 12, 0, 12] - * 4 [1, 3, 12, 0, 0] - * - */ - diff --git a/Week_00/G20200343030007/NOTE.md b/Week_00/G20200343030007/NOTE.md index f63c2185..50de3041 100644 --- a/Week_00/G20200343030007/NOTE.md +++ b/Week_00/G20200343030007/NOTE.md @@ -1,69 +1 @@ -## 学习笔记 - -### 数据结构与算法理解 - -计算机程序语言都是重复,究极就是重复的,是有规律的,所以所有的算法是可以找规律,套模板的。 - -### 如何学习 - -- **刻意练习** - - 就像打游戏一样,补兵不行一直练补兵,技能不行一直练技能,大神都是每一步基础都很扎实,所以基本功是制胜法宝。 - -- **刷题** - - 1. 敢于承认自己刷题时,***想不出来,不会做*** 的问题,因为优秀的算法时前人总结多年的经验,我们不是圣人,我们只是学习者,记下优秀的思路技巧,并做到熟能生巧时最重要的。 - 2. 刷题只做一遍是不可以的,以为看会了,照着写出来了就等于会了,**大错特错**!这是基本功,是需要达到见到这个题就可以立马想到解法,并且迅速写出来,达到这样的境界,只做一遍是万万不可的。 - - 第一遍:思路看懂,程序做熟 - - 第二遍:第二天重复默写,加强记忆 - - 第三遍:周天再写一遍,加强记忆 - - 第四遍:第二周写一遍 - - 第五遍:面试前突击练习 - -- **总结** - - 人脑记不住琐碎的知识,但可以归纳总结为脑图,**树**的形式 - - 将学习的算法和数据结构知识总结为脑图,并在阶段性学习完毕后,看一下自己的算法数据机构地图添加了哪些树枝,还有哪些知识点没有添加。 - -- **工欲善其事必先利其器** - - - 优秀的 IDE 和插件 - - - 可以使用 vscode top tips 这种关键词查询 - - - 基本的代码规范 - - - 缩行,关键词后跟空格等 - - - **自顶向下的编写方法** - - 先写大体主干,再写细节方法。 - - 比如计算盛水最大面积的题目,先 getMinHeight (求最小高度),再 getArea(求面积),最后 getMaxArea(求最大面积)。先写出大概框架思路,再补足方法细节。这样就不会套进纠结方法细节的误区,导致整个算法没有实现。 - - - 代码编写时的指法 - - - 快速到达行头行尾 - - 以单词为单位左右移动 - - 向上向下移动当前行代码 - - 整段删除或复制 - -### 本周刷题总结 - -- **思路** - - - 基本思路 - - 如果做不出来,可以尝试大脑中最基本的解法,一步一步程序执行的那种,或者暴力解法 for 循环这种。 - - - 其它思路 - - 本周影响最深刻的是对于双指针的理解,精妙 - - - 快慢指针法 - - 移动零 - - 双指针紧逼法 - - 计算最大盛水面积 - - **真的是有套路可言!** \ No newline at end of file +学习笔记 \ No newline at end of file From d9f0908cf1e952d8f116f31e612636993c2920f2 Mon Sep 17 00:00:00 2001 From: xufei <1842070912@qq.com> Date: Sun, 16 Feb 2020 21:05:13 +0800 Subject: [PATCH 0204/1268] =?UTF-8?q?423=20=E7=AC=AC=E4=B8=80=E5=91=A8?= =?UTF-8?q?=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030423/LeetCode_189_423.java | 28 ++++++++++++++++ Week_01/G20200343030423/LeetCode_26_423.java | 33 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 Week_01/G20200343030423/LeetCode_189_423.java create mode 100644 Week_01/G20200343030423/LeetCode_26_423.java diff --git a/Week_01/G20200343030423/LeetCode_189_423.java b/Week_01/G20200343030423/LeetCode_189_423.java new file mode 100644 index 00000000..576db085 --- /dev/null +++ b/Week_01/G20200343030423/LeetCode_189_423.java @@ -0,0 +1,28 @@ +package G20200343030423; +import java.util.Arrays; + +public class LeetCode_189_423 { + + public static void main(String[] args) { + int[] a = {1,2,3,4,5,6,7}; + rotate(a, 3); + System.out.println(Arrays.toString(a)); + int[] b = {-1,-100,3,99}; + rotate(b, 2); + System.out.println(Arrays.toString(b)); + + } + + public static void rotate(int[] nums, int k) { + k = k % nums.length; + int[] b = new int[nums.length]; + for (int i = nums.length - k, j = 0; j < nums.length; j++, i++ ) { + b[j] = nums[i % nums.length]; + } + for (int i = 0; i < nums.length; i++) { + nums[i] = b[i]; + } + } + + +} diff --git a/Week_01/G20200343030423/LeetCode_26_423.java b/Week_01/G20200343030423/LeetCode_26_423.java new file mode 100644 index 00000000..5541ad09 --- /dev/null +++ b/Week_01/G20200343030423/LeetCode_26_423.java @@ -0,0 +1,33 @@ +package G20200343030423; + +import java.util.Arrays; + +public class LeetCode_26_423 { + + public static void main(String[] args) { + + int[] a = {1, 1, 2}; + printResult(a); + + int[] b = {0,0,1,1,1,2,2,3,3,4}; + printResult(b); + } + + private static void printResult(int[] a) { + int size = removeDuplicates(a); + System.out.println("left size: " + size); + System.out.println(Arrays.toString(a)); + } + + public static int removeDuplicates(int[] nums) { + if (nums.length == 0) return 0; + int i = 0; + for (int j = 1; j < nums.length; j++) { + if (nums[j] != nums[i]) { + i++; + nums[i] = nums[j]; + } + } + return i + 1; + } +} From bf3c740461069be93b22dfe49958dba9018a9f8d Mon Sep 17 00:00:00 2001 From: Lemon-Energy <343365473@qq.com> Date: Sun, 16 Feb 2020 21:11:23 +0800 Subject: [PATCH 0205/1268] 5-007-Week 01 --- Week_01/G20190282010007/NOTE.md | 17 ++++++++- Week_01/G20190282010007/leetcode_189_007.js | 23 ++++++++++++ Week_01/G20190282010007/leetcode_1_007.js | 26 ++++++++++++++ Week_01/G20190282010007/leetcode_21_007.js | 40 +++++++++++++++++++++ Week_01/G20190282010007/leetcode_283_007.js | 33 +++++++++++++++++ Week_01/G20190282010007/leetcode_88_007.js | 25 +++++++++++++ 6 files changed, 163 insertions(+), 1 deletion(-) create mode 100644 Week_01/G20190282010007/leetcode_189_007.js create mode 100644 Week_01/G20190282010007/leetcode_1_007.js create mode 100644 Week_01/G20190282010007/leetcode_21_007.js create mode 100644 Week_01/G20190282010007/leetcode_283_007.js create mode 100644 Week_01/G20190282010007/leetcode_88_007.js diff --git a/Week_01/G20190282010007/NOTE.md b/Week_01/G20190282010007/NOTE.md index 50de3041..043a10dd 100644 --- a/Week_01/G20190282010007/NOTE.md +++ b/Week_01/G20190282010007/NOTE.md @@ -1 +1,16 @@ -学习笔记 \ No newline at end of file +学习笔记 + +本周(week_01)的学习总结 + +可能因为平时工作中真的接触的太少算法与数据结构的内容, +学的有点吃力啊,主要还是没有什么太明确的概念,也就数组那一块还算ok, +其他的链表,跳表,栈,队列这些,听着有点意思,但是停下来自己思考的时候就 +懵逼了,这些是啥,怎么我平时都没有遇到过 + +通过本周的学习,让我发现我最大的问题就是没有基础,除了数组部分,其他的链表,跳表,栈,队列这些,听着还是有点懵,对于这些基础,我需要自己在课外进行额外的补充学习。 + +关于刷题部分,部分题目在做的时候,直接使用了JavaScript带有的方法,按老师所教的方法看解题之后,发现很多解题都并不涉及对应语言所自带的方便方法,即使不是JavaScript所写的解题代码,也大概还是能看懂的。 + + +最后总结一下,需要按照老师提出的刷题步骤,自我加强训练,额外对自己所欠缺的知识点进行补充。 +后端同学立志不做CURD Boy,前端也同样立志不能当个切图仔 diff --git a/Week_01/G20190282010007/leetcode_189_007.js b/Week_01/G20190282010007/leetcode_189_007.js new file mode 100644 index 00000000..b29234ed --- /dev/null +++ b/Week_01/G20190282010007/leetcode_189_007.js @@ -0,0 +1,23 @@ +// 题目:旋转数组 +/* + * 题目描述:给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 + * +*/ + +// 解题语言: JavaScript + +// 解题 +/** + * @param {number[]} nums + * @param {number} k + * @return {void} Do not return anything, modify nums in-place instead. + */ +var rotate = function(nums, k) { + for (let i = 1; i <= k; i++) { + // 每向右走一步,即将数组最末尾元素移动到数组最前方 + // Array.pop(), 移除数组最后一位元素,将数组长度-1,并返回所移除的元素值 + // Array.unshift(), 向数组的首位插入一个元素 + nums.unshift(nums.pop()) + } + return nums +}; \ No newline at end of file diff --git a/Week_01/G20190282010007/leetcode_1_007.js b/Week_01/G20190282010007/leetcode_1_007.js new file mode 100644 index 00000000..3b0190a5 --- /dev/null +++ b/Week_01/G20190282010007/leetcode_1_007.js @@ -0,0 +1,26 @@ +// 题目: 两数之和 +/** + * 题目描述: + * 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 + * 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 + */ + + // 解题语言: javaScript + + // 解题 + +/** + * @param {number[]} nums + * @param {number} target + * @return {number[]} + */ +var twoSum = function(nums, target) { + // 暴力解题,两重循环 + for(let i = 0; i < nums.length -1 ; i++) { + for(let j = i + 1; j < nums.length; j++) { + if (nums[j] === target - nums[i]) { + return [i, j] + } + } + } +}; \ No newline at end of file diff --git a/Week_01/G20190282010007/leetcode_21_007.js b/Week_01/G20190282010007/leetcode_21_007.js new file mode 100644 index 00000000..4ff095f0 --- /dev/null +++ b/Week_01/G20190282010007/leetcode_21_007.js @@ -0,0 +1,40 @@ +// 题目: 合并两个有序链表 +/** + * 题目描述: + * 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的 + */ + + // 解题语言: javaScript + + // 解题 + + /** + * Definition for singly-linked list. + * function ListNode(val) { + * this.val = val; + * this.next = null; + * } + */ +/** + * @param {ListNode} l1 + * @param {ListNode} l2 + * @return {ListNode} + */ +var mergeTwoLists = function(l1, l2) { + // 如果链表l1是空的,那么直接返回l2 + if(l1 === null){ + return l2; + } + // 如果链表l2是空的,那么直接返回l1 + if(l2 === null){ + return l1; + } + // 递归部分,重组有序的链表 + if(l1.val < l2.val){ + l1.next = mergeTwoLists(l1.next, l2); + return l1; + }else{ + l2.next = mergeTwoLists(l1, l2.next); + return l2; + } +}; \ No newline at end of file diff --git a/Week_01/G20190282010007/leetcode_283_007.js b/Week_01/G20190282010007/leetcode_283_007.js new file mode 100644 index 00000000..ab4d8c10 --- /dev/null +++ b/Week_01/G20190282010007/leetcode_283_007.js @@ -0,0 +1,33 @@ +// 题目: 两数之和 +/** + * 题目描述: + * 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 + */ + + // 解题语言: javaScript + + // 解题 + +/** + * @param {number[]} nums + * @return {void} Do not return anything, modify nums in-place instead. + */ +var moveZeroes = function(nums) { + // 标记0的下标位置 + let j = 0 + // 循环数组 + for (let i = 0; i < nums.length; i++) { + // 当前元素是否为零,为0则不做任何操作 + if (nums[i] != 0) { + // 当前元素不为零,判断上一个0的下标位置是否与当前元素下标位置相同 + if (i != j) { + // 当0的标记位与当前原始不同时,将两者交换 + // nums[j] = nums[i] + // nums[i] = 0 + // 尝试使用es6的交换方法 + [nums[j], nums[i]] = [nums[i], nums[j]] + } + j++ + } + } +}; \ No newline at end of file diff --git a/Week_01/G20190282010007/leetcode_88_007.js b/Week_01/G20190282010007/leetcode_88_007.js new file mode 100644 index 00000000..dbd5a521 --- /dev/null +++ b/Week_01/G20190282010007/leetcode_88_007.js @@ -0,0 +1,25 @@ +// 题目: 合并两个有序数组 +/** + * 题目描述: + * 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 + */ + + // 解题语言: javaScript + + // 解题 + +/** + * @param {number[]} nums1 + * @param {number} m + * @param {number[]} nums2 + * @param {number} n + * @return {void} Do not return anything, modify nums1 in-place instead. + */ +var merge = function(nums1, m, nums2, n) { + // 将nums2中的元素合并到nums1中 + for (var i = 0;i Date: Sun, 16 Feb 2020 21:17:30 +0800 Subject: [PATCH 0206/1268] =?UTF-8?q?=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030597/Solution.java | 28 +++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Week_01/G20200343030597/Solution.java diff --git a/Week_01/G20200343030597/Solution.java b/Week_01/G20200343030597/Solution.java new file mode 100644 index 00000000..90f42f4b --- /dev/null +++ b/Week_01/G20200343030597/Solution.java @@ -0,0 +1,28 @@ +package Week_01.G20200343030597; + +public class Solution { + public int[] plusOne(int[] digits) { + for (int i = digits.length-1; i >= 0; i-- ) { + digits[i]++; + digits[i] = digits[i] % 10; + System.out.println(digits[i]); + if(digits[i] != 0){ + return digits; + } + } + return {1,digits}; + } + public void moveZeroes(int[] nums) { + int j = 0; + int temp = 0; + for (int i = 0; i < nums.length; i++) { + if (nums[i] != 0){ + temp = nums[j]; + nums[j] = nums[i]; + nums[i] = temp; + j++; + } + } + } + +} From dfa68c1264c12085c0173fccfd74629f6945e45f Mon Sep 17 00:00:00 2001 From: yinhq Date: Sun, 16 Feb 2020 21:20:51 +0800 Subject: [PATCH 0207/1268] =?UTF-8?q?=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030597/Solution.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Week_01/G20200343030597/Solution.java b/Week_01/G20200343030597/Solution.java index 90f42f4b..96840a33 100644 --- a/Week_01/G20200343030597/Solution.java +++ b/Week_01/G20200343030597/Solution.java @@ -10,7 +10,9 @@ public int[] plusOne(int[] digits) { return digits; } } - return {1,digits}; + digits = new int[digits.length + 1]; + digits[0] = 1; + return digits; } public void moveZeroes(int[] nums) { int j = 0; From 119fe07a9e93f613c8e3c0aea3fc8f056eebb46a Mon Sep 17 00:00:00 2001 From: KevinHuang926 <71401686@qq.com> Date: Sun, 16 Feb 2020 21:27:32 +0800 Subject: [PATCH 0208/1268] 035-Week 01 --- Week_01/G20200343030035/LeetCode_42_035.py | 20 +++++++++++++++++++ Week_01/G20200343030035/LeetCode_66_035.py | 23 ++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 Week_01/G20200343030035/LeetCode_42_035.py create mode 100644 Week_01/G20200343030035/LeetCode_66_035.py diff --git a/Week_01/G20200343030035/LeetCode_42_035.py b/Week_01/G20200343030035/LeetCode_42_035.py new file mode 100644 index 00000000..5bd1725a --- /dev/null +++ b/Week_01/G20200343030035/LeetCode_42_035.py @@ -0,0 +1,20 @@ +# LeetCode #42 接雨水 +# 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 + + +class Solution: + def trap(self, block): + if not block or len(block) < 3: + return 0 + sum = 0 + left, right = 0, len(block) - 1 + l_max, r_max = block[left], block[right] + while left < right: + l_max, r_max = max(block[left], l_max), max(block[right], r_max) + if l_max <= r_max: + sum += l_max - block[left] + left += 1 + else: + sum += r_max - block[right] + right -= 1 + return sum \ No newline at end of file diff --git a/Week_01/G20200343030035/LeetCode_66_035.py b/Week_01/G20200343030035/LeetCode_66_035.py new file mode 100644 index 00000000..5f3649cb --- /dev/null +++ b/Week_01/G20200343030035/LeetCode_66_035.py @@ -0,0 +1,23 @@ +# LeetCode #66 加一 +# 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 +# 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 +# 你可以假设除了整数 0 之外,这个整数不会以零开头。 + + +class Solution: + def plusOne(self, digits): + carry = 0 + digits[len(digits)-1] += 1 + for i in range(len(digits)-1,-1,-1): + digits[i] += carry + if digits[i] > 9 : + carry = 1 + digits[i] = 0 + else: + carry = 0 + if carry == 1: + digits = [1] + digits + res = '' + for i in range(len(digits)-1,-1,-1): + res = str(digits[i]) + res + return(res) \ No newline at end of file From f54010c1ea2f9dbeec97bbcc0ab320caa07c721b Mon Sep 17 00:00:00 2001 From: lixudong <303001274@qq.com> Date: Sun, 16 Feb 2020 21:30:30 +0800 Subject: [PATCH 0209/1268] first week homework --- Week_00/G20200343030621/NOTE.md | 2 +- Week_01/G20200343030621/NOTE.md | 101 +++++++++++++++++- Week_01/G20200343030621/move-zero.js | 17 +++ .../remove-duplicates-from-sorted-array.js | 24 +++++ Week_01/G20200343030621/two-sum.js | 37 +++++++ 5 files changed, 179 insertions(+), 2 deletions(-) create mode 100644 Week_01/G20200343030621/move-zero.js create mode 100644 Week_01/G20200343030621/remove-duplicates-from-sorted-array.js create mode 100644 Week_01/G20200343030621/two-sum.js diff --git a/Week_00/G20200343030621/NOTE.md b/Week_00/G20200343030621/NOTE.md index 50de3041..4f6b8afb 100644 --- a/Week_00/G20200343030621/NOTE.md +++ b/Week_00/G20200343030621/NOTE.md @@ -1 +1 @@ -学习笔记 \ No newline at end of file +学习笔记 diff --git a/Week_01/G20200343030621/NOTE.md b/Week_01/G20200343030621/NOTE.md index 50de3041..a656511b 100644 --- a/Week_01/G20200343030621/NOTE.md +++ b/Week_01/G20200343030621/NOTE.md @@ -1 +1,100 @@ -学习笔记 \ No newline at end of file +学习笔记 + +# 算法 + +## 算法本质 + +寻找重复性 + +## 优化操作 + +空间换时间 + +# 数据结构 + +### 数组 Array + +优点: + +1. 方便读取数据 (读取数据时间复杂度都是 O(1)) +2. 操作起来方便(直接用下标修改即可) + +缺点: + +1. 除开首尾添加,需要增加数据的话时间复杂度比较高(O(n)) + +时间复杂度 + +- 首尾添加:O(1) +- 读取数据:O(1) +- 插入数据:O(n) +- 删除数据:O(n) + +### 链表 Linked List + +优点: + +1. 可以动态添加 + +缺点: + +1. 只能通过顺次指针访问,查询效率低(所以有了跳表) + +时间复杂度 + +- 首尾添加:O(1) +- 读取数据:O(n) +- 插入数据:O(1) +- 删除数据:O(1) + +### 跳表 + +暂时还不太理解,就是给链表增加维度,优化查找时间 + +### 栈 Stack + +> 特点:先入后出 类似于装羽毛球的圆筒 +> 以及洗碗时候的一堆碗 + +时间复杂度 + +- 插入数据:O(1) +- 删除数据:O(1) + +### 队列 Queue + +> 特点:先入后出 类似于排队 + +时间复杂度 + +- 插入数据:O(1) +- 删除数据:O(1) + +### 双端队列: Deque:Double-end Queue + +> 队列跟栈的结合,实战用的比较多 + +时间复杂度 + +- 插入数据:O(1) +- 删除数据:O(1) +- 查询数据:O(n) + +### 优先队列:Priority Queue + +> 按照元素的优先级取出 例如最大值最小值 +> 实现的数据结构比较多样 + +时间复杂度 + +- 插入数据:O(1) +- 删除数据:O(1) +- 取出数据:O(logN) + +## 本周总结 + +重点是练习遍历,双指针,快慢指针 + +## 自我评价 + +对时间复杂度的理解还不够,还需要多锻炼双指针这种之前用得少的写法,对于链表、栈、队列、优先队列、双端队列这些基本没有接触过 diff --git a/Week_01/G20200343030621/move-zero.js b/Week_01/G20200343030621/move-zero.js new file mode 100644 index 00000000..644c7b52 --- /dev/null +++ b/Week_01/G20200343030621/move-zero.js @@ -0,0 +1,17 @@ +/** + * @param {number[]} nums + * @return {void} Do not return anything, modify nums in-place instead. + */ +// 双指针解法 +var moveZeroes = function(nums) { + let zeroAtIndex = 0; + for (let i = 0; i < nums.length; i++) { + if (nums[i] != 0) { + if (i != zeroAtIndex) { + nums[zeroAtIndex] = nums[i]; + nums[i] = 0; + } + zeroAtIndex++; + } + } +}; diff --git a/Week_01/G20200343030621/remove-duplicates-from-sorted-array.js b/Week_01/G20200343030621/remove-duplicates-from-sorted-array.js new file mode 100644 index 00000000..64365580 --- /dev/null +++ b/Week_01/G20200343030621/remove-duplicates-from-sorted-array.js @@ -0,0 +1,24 @@ +/* +给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 + +不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 + +来源:力扣(LeetCode) +链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array +*/ + +// 双指针解法,由于是排序好的数组,就看他左右两边 + +/** + * @param {number[]} nums + * @return {number} + */ +var removeDuplicates = function(nums) { + let p = 0; + for (let q = 1; q < nums.length; q++) { + if (nums[q] !== nums[p]) { + nums[++p] = nums[q]; + } + } + return p + 1; +}; diff --git a/Week_01/G20200343030621/two-sum.js b/Week_01/G20200343030621/two-sum.js new file mode 100644 index 00000000..07ec5ad5 --- /dev/null +++ b/Week_01/G20200343030621/two-sum.js @@ -0,0 +1,37 @@ +// 1.暴力解法 +// 时间复杂度O(n^2) +/** + * @param {number[]} nums + * @param {number} target + * @return {number[]} + */ +var twoSum = function(nums, target) { + let res = []; + for (let i = 0; i < nums.length - 1; i++) { + for (let j = i + 1; j < nums.length; j++) { + if (nums[i] + nums[j] == target) { + res.push(i, j); + } + } + } + return res; +}; + +// 2.哈希解法 +// 时间复杂度O(n) +/** + * @param {number[]} nums + * @param {number} target + * @return {number[]} + */ + +twoSum = function(nums, target) { + var hashObj = {}; + for (let i = 0; i < nums.length; i++) { + var diff = target - nums[i]; + if (hashObj[diff] != undefined) { + return [hashObj[diff], i]; + } + hashObj[nums[i]] = i; + } +}; From e6759d23aefa907b9efc5cc91aecd4c9d81b65c4 Mon Sep 17 00:00:00 2001 From: headplan Date: Sun, 16 Feb 2020 21:32:01 +0800 Subject: [PATCH 0210/1268] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E5=91=A8=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030457/moveZeroes.php | 20 ++++++++++++++++++++ Week_01/G20200343030457/twoSum.php | 22 ++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 Week_01/G20200343030457/moveZeroes.php create mode 100644 Week_01/G20200343030457/twoSum.php diff --git a/Week_01/G20200343030457/moveZeroes.php b/Week_01/G20200343030457/moveZeroes.php new file mode 100644 index 00000000..8e991182 --- /dev/null +++ b/Week_01/G20200343030457/moveZeroes.php @@ -0,0 +1,20 @@ + Date: Sun, 16 Feb 2020 21:32:54 +0800 Subject: [PATCH 0211/1268] first commit --- .../LeetCode_21_G20200343030553.java | 46 +++++++++++++++++++ .../LeetCode_42_G20200343030553.java | 20 ++++++++ 2 files changed, 66 insertions(+) create mode 100644 Week_01/G20200343030553/LeetCode_21_G20200343030553.java create mode 100644 Week_01/G20200343030553/LeetCode_42_G20200343030553.java diff --git a/Week_01/G20200343030553/LeetCode_21_G20200343030553.java b/Week_01/G20200343030553/LeetCode_21_G20200343030553.java new file mode 100644 index 00000000..3bd1aba6 --- /dev/null +++ b/Week_01/G20200343030553/LeetCode_21_G20200343030553.java @@ -0,0 +1,46 @@ +class Solution { + // public ListNode mergeTwoLists(ListNode l1, ListNode l2) { + // // 复杂度 time O(n) space O(1) + // ListNode dummy = new ListNode(-1); + // ListNode head = dummy; + // ListNode a1 = l1; + // ListNode a2 = l2; + // while(a1!=null && a2!=null){ + // if(a1.val <= a2.val){ + // dummy.next = a1; + // a1 = a1.next; + // }else{ + // dummy.next = a2; + // a2 = a2.next; + // } + // dummy = dummy.next; + // } + + // // while(a1!=null){ + // // dummy.next = a1; + // // a1 = a1.next; + // // dummy = dummy.next; + // // } + // // while(a2!=null){ + // // dummy.next = a2; + // // a2 = a2.next; + // // dummy = dummy.next; + // // } + // // dummy.next = null; + // //优化 + // dummy.next = (a1 !=null) ? a1:a2; + // return head.next; + // } + + public ListNode mergeTwoLists(ListNode l1, ListNode l2){ + if(l1 == null) return l2; + if(l2 == null) return l1; + if(l1.val < l2.val){ + l1.next = mergeTwoLists(l1.next, l2); + return l1; + }else{ + l2.next = mergeTwoLists(l2.next, l1); + return l2; + } + } +} \ No newline at end of file diff --git a/Week_01/G20200343030553/LeetCode_42_G20200343030553.java b/Week_01/G20200343030553/LeetCode_42_G20200343030553.java new file mode 100644 index 00000000..9217feb2 --- /dev/null +++ b/Week_01/G20200343030553/LeetCode_42_G20200343030553.java @@ -0,0 +1,20 @@ +class Solution { + public int trap(int[] height) { + int sum = 0; + + for(int i=1;i=0;j--){ + maxl = Math.max(maxl, height[j]); + } + for(int j=i;j Date: Sun, 16 Feb 2020 21:33:20 +0800 Subject: [PATCH 0212/1268] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E6=88=90=E5=8A=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rotateArray189/Solution.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Week_00/G20200343030375/rotateArray189/Solution.java diff --git a/Week_00/G20200343030375/rotateArray189/Solution.java b/Week_00/G20200343030375/rotateArray189/Solution.java new file mode 100644 index 00000000..39c69c0b --- /dev/null +++ b/Week_00/G20200343030375/rotateArray189/Solution.java @@ -0,0 +1,17 @@ +package G20200343030375.rotateArray189; + +/** + * 第一种实现方式 + * 暴力实现 + */ +class Solution { + public void rotate(int[] nums, int k) { + for(int i=1;i<=k;++i){ + int temp = nums[nums.length-1]; + for(int j = nums.length-1;j>0;j--){ + nums[j] = nums[j-1]; + } + nums[0] = temp; + } + } +} From 3752ad720d28a128bfa5632cf0f62298d9277a4a Mon Sep 17 00:00:00 2001 From: majiancheng Date: Sun, 16 Feb 2020 21:40:08 +0800 Subject: [PATCH 0213/1268] =?UTF-8?q?[=E5=85=B6=E4=BB=96]=E8=AF=B4?= =?UTF-8?q?=E6=98=8E=EF=BC=9A015-Week=2001=20[=E5=BD=B1=E5=93=8D]015-Week?= =?UTF-8?q?=2001?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030015/LeetCode_21_015.java | 79 ++++++++++++++++++++ Week_01/G20200343030015/LeetCode_88_015.java | 50 +++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 Week_01/G20200343030015/LeetCode_21_015.java create mode 100644 Week_01/G20200343030015/LeetCode_88_015.java diff --git a/Week_01/G20200343030015/LeetCode_21_015.java b/Week_01/G20200343030015/LeetCode_21_015.java new file mode 100644 index 00000000..d06e0473 --- /dev/null +++ b/Week_01/G20200343030015/LeetCode_21_015.java @@ -0,0 +1,79 @@ +package G20200343030015.week_01; + +/** + * Created by majiancheng on 2020/2/16. + */ +public class LeetCode_21_015 { + + public ListNode mergeTwoLists(ListNode l1, ListNode l2) { + ListNode preHead = new ListNode(-1); + + ListNode prev = preHead; + while (l1 != null && l2 != null) { + if (l1.val <= l2.val) { + prev.next = l1; + l1 = l1.next; + } else { + prev.next = l2; + l2 = l2.next; + } + + prev = prev.next; + } + + if (l1 != null) { + prev.next = l1; + } else { + prev.next = l2; + } + + return preHead.next; + } + + public static void main(String[] args) { + ListNode l1 = new ListNode(1); + ListNode l1Head = l1; + for (int i = 2; i < 5; i++) { + l1.next = new ListNode(i); + l1 = l1.next; + } + + ListNode l2 = new ListNode(2); + ListNode l2Head = l2; + for (int i = 3; i < 5; i++) { + l2.next = new ListNode(i); + l2 = l2.next; + } + + ListNode newHead = new LeetCode_21_015().mergeTwoLists(l1Head, l2Head); + while (newHead != null) { + System.out.print(newHead.val + ", "); + newHead = newHead.next; + } + + } +} + +class ListNode { + + int val; + + ListNode next; + + ListNode(int x) { + val = x; + } +} + +/** + * 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。  + *

+ * 示例: + *

+ * 输入:1->2->4, 1->3->4 + * 输出:1->1->2->3->4->4 + *

+ * 来源:力扣(LeetCode) + * 链接:https://leetcode-cn.com/problems/merge-two-sorted-lists + * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 + */ diff --git a/Week_01/G20200343030015/LeetCode_88_015.java b/Week_01/G20200343030015/LeetCode_88_015.java new file mode 100644 index 00000000..6df4cef1 --- /dev/null +++ b/Week_01/G20200343030015/LeetCode_88_015.java @@ -0,0 +1,50 @@ +package G20200343030015.week_01; + +import java.util.Arrays; + +/** + * Created by majiancheng on 2020/2/16. + */ +public class LeetCode_88_015 { + + public void merge(int[] nums1, int m, int[] nums2, int n) { + int[] copy_nums1 = Arrays.copyOf(nums1, m); + + int p = 0; + int p1 = 0; + int p2 = 0; + while (p1 < copy_nums1.length && p2 < nums2.length) { + nums1[p++] = (copy_nums1[p1] < nums2[p2]) ? copy_nums1[p1++] : nums2[p2++]; + } + + while (p1 < copy_nums1.length) { + nums1[p++] = copy_nums1[p1++]; + } + + while (p2 < nums2.length) { + nums1[p++] = nums2[p2++]; + } + + } +} + +/** + * 88. 合并两个有序数组 + * 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 + *

+ * 说明: + *

+ * 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 + * 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 + * 示例: + *

+ * 输入: + * nums1 = [1,2,3,0,0,0], m = 3 + * nums2 = [2,5,6], n = 3 + *

+ * 输出: [1,2,2,3,5,6] + *

+ * 来源:力扣(LeetCode) + * 链接:https://leetcode-cn.com/problems/merge-sorted-array + * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 + */ From 0cefd90c6fe4670a4bcec105045efe1eb97a7e80 Mon Sep 17 00:00:00 2001 From: bjmajiancheng Date: Sun, 16 Feb 2020 21:42:16 +0800 Subject: [PATCH 0214/1268] Delete Week_01.iml --- Week_01/Week_01.iml | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 Week_01/Week_01.iml diff --git a/Week_01/Week_01.iml b/Week_01/Week_01.iml deleted file mode 100644 index d520dd6e..00000000 --- a/Week_01/Week_01.iml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file From 0c4082ef3a626d34d166321e1beb75d4245c0de8 Mon Sep 17 00:00:00 2001 From: lemon Date: Sun, 16 Feb 2020 21:42:43 +0800 Subject: [PATCH 0215/1268] 363-Week 01 --- Week_01/G20200343030363/LeetCode_189_363.java | 62 +++++++++++++ Week_01/G20200343030363/LeetCode_21_363.java | 81 ++++++++++++++++ Week_01/G20200343030363/LeetCode_26_363.java | 39 ++++++++ Week_01/G20200343030363/LeetCode_42_363.java | 49 ++++++++++ Week_01/G20200343030363/LeetCode_641_363.java | 93 +++++++++++++++++++ Week_01/G20200343030363/LeetCode_66_363.java | 35 +++++++ 6 files changed, 359 insertions(+) create mode 100644 Week_01/G20200343030363/LeetCode_189_363.java create mode 100644 Week_01/G20200343030363/LeetCode_21_363.java create mode 100644 Week_01/G20200343030363/LeetCode_26_363.java create mode 100644 Week_01/G20200343030363/LeetCode_42_363.java create mode 100644 Week_01/G20200343030363/LeetCode_641_363.java create mode 100644 Week_01/G20200343030363/LeetCode_66_363.java diff --git a/Week_01/G20200343030363/LeetCode_189_363.java b/Week_01/G20200343030363/LeetCode_189_363.java new file mode 100644 index 00000000..c7de028b --- /dev/null +++ b/Week_01/G20200343030363/LeetCode_189_363.java @@ -0,0 +1,62 @@ +package cn.geet.week1; + +/** + * + * 旋转数组 + * + * @author lemon + * @version 1.0.0 + * @Description TODO + * @createTime 2020年02月14日 16:43:00 + */ +public class LeetCode_189_363 { + + /** + * Rotate. + * + * @param nums + * the nums + * @param k + * the k + */ + public void rotate(int[] nums, int k) { + + // 三种解决方式 要求使用空间复杂度为 O(1) 的原地算法 + + // 1、暴力解法 + + // 2、使用额外数组 时间O(n) 空间O(n) + // int[] tempArr = new int[nums.length]; + // for (int i = 0; i < nums.length; i++) { + // tempArr[(i + k) % nums.length] = nums[i]; + // } + // + // for (int i = 0; i < nums.length; i++) { + // nums[i] = tempArr[i]; + // } + + // 3、使用环状数组 + + + // 4、使用反转 + k = k % nums.length; + reverse(nums, 0, nums.length - 1); + reverse(nums, 0, k - 1); + reverse(nums, k, nums.length - 1); + } + + private void reverse(int[] nums, int start, int end) { + while (start < end) { + int temp = nums[start]; + nums[start] = nums[end]; + nums[end] = temp; + start++; + end--; + } + } + + public static void main(String[] args) { + LeetCode_189_363 temp = new LeetCode_189_363(); + temp.rotate(new int[] {1, 2, 3, 4, 5, 6, 7}, 3); + } +} diff --git a/Week_01/G20200343030363/LeetCode_21_363.java b/Week_01/G20200343030363/LeetCode_21_363.java new file mode 100644 index 00000000..475f556b --- /dev/null +++ b/Week_01/G20200343030363/LeetCode_21_363.java @@ -0,0 +1,81 @@ +package cn.geet.week1; + +/** + * @author lemon + * @version 1.0.0 + * @Description TODO + * @createTime 2020年02月16日 08:42:00 + */ +public class LeetCode_21_363 { + + /** + * Merge two lists list node. 递归方式 + * + * @param node1 + * the node 1 + * @param node2 + * the node 2 + * @return the list node + */ + public ListNode mergeTwoLists(ListNode node1, ListNode node2) { + if (null == node1) { + return node2; + } else if (null == node2) { + return node1; + } else if ((int)node1.val < (int)node2.val) { + node1.next = mergeTwoLists(node1.next, node2); + return node1; + } else { + node2.next = mergeTwoLists(node1, node2.next); + return node2; + } + } + + /** + * Merge two lists 2 list node. 迭代方式 + * + * @param node1 + * the node 1 + * @param node2 + * the node 2 + * @return the list node + */ + public ListNode mergeTwoLists2(ListNode node1, ListNode node2) { + + ListNode prehead = new ListNode(-1); + ListNode prev = prehead; + + while (node1 != null && node2 != null) { + if ((int)node1.val > (int)node2.val) { + prev.next = node2; + node2 = node2.next; + } else { + prev.next = node1; + node1 = node1.next; + } + prev = prev.next; + } + + // 一个节点为空了, 另外一个node直接加在后面 + prev.next = node1 == null ? node2 : node1; + return prehead.next; + } + + public static void main(String[] args) { + LeetCode_21_363 temp = new LeetCode_21_363(); + + ListNode node1 = new ListNode(1); + node1.next = new ListNode(2); + node1.next.next = new ListNode(4); + + ListNode node2 = new ListNode(1); + node2.next = new ListNode(3); + node2.next.next = new ListNode(5); + + ListNode lastNode = temp.mergeTwoLists(node1, node2); + while (lastNode != null) { + System.out.println(lastNode.val); + lastNode = lastNode.next; + } + } +} diff --git a/Week_01/G20200343030363/LeetCode_26_363.java b/Week_01/G20200343030363/LeetCode_26_363.java new file mode 100644 index 00000000..1f62f050 --- /dev/null +++ b/Week_01/G20200343030363/LeetCode_26_363.java @@ -0,0 +1,39 @@ +package cn.geet.week1; + +/** + * @author lemon + * @version 1.0.0 + * @Description TODO + * @createTime 2020年02月14日 16:09:00 + */ +public class LeetCode_26_363 { + + /** + * Remove duplicates int. 不考虑新数组长度后面的数字 + * + * @param nums + * the nums + * @return the int + */ + public int removeDuplicates(int[] nums) { + + if (nums == null || (null != nums && nums.length == 0)) { + return 0; + } + + int index = 0; + for (int i = 1; i < nums.length; i++) { + if (nums[i] != nums[index]) { + index++; + nums[index] = nums[i]; + } + } + return index + 1; + } + + public static void main(String[] args) { + LeetCode_26_363 temp = new LeetCode_26_363(); + int result = temp.removeDuplicates(new int[] {0, 0, 1, 1, 1, 2, 2, 3, 3, 4}); + System.out.println(result); + } +} diff --git a/Week_01/G20200343030363/LeetCode_42_363.java b/Week_01/G20200343030363/LeetCode_42_363.java new file mode 100644 index 00000000..1894ebc6 --- /dev/null +++ b/Week_01/G20200343030363/LeetCode_42_363.java @@ -0,0 +1,49 @@ +package cn.geet.week1; + +/** + * + * 接雨水 + * + * @author lemon + * @version 1.0.0 + * @Description TODO + * @createTime 2020年02月16日 11:33:00 + * + */ +public class LeetCode_42_363 { + + /** + * Trap int. 按列求和, 暴力解法 O(n^2) + * + * @param height + * the height + * @return the int + */ + public int trap(int[] height) { + int sum = 0; + for (int i = 1; i < height.length - 1; i++) { + + int max_left = 0; + int max_right = 0; + + // 找出左边最高 + for (int j = 0; j < i; j++) { + if (height[j] > max_left) { + max_left = height[j]; + } + } + + // 找出右边最高 + for (int k = i + 1; k < height.length; k++) { + if (height[k] > max_right) { + max_right = height[k]; + } + } + int min = Math.min(max_left, max_right); + if (min > height[i]) { + sum = sum + (min - height[i]); + } + } + return sum; + } +} diff --git a/Week_01/G20200343030363/LeetCode_641_363.java b/Week_01/G20200343030363/LeetCode_641_363.java new file mode 100644 index 00000000..d30fecbb --- /dev/null +++ b/Week_01/G20200343030363/LeetCode_641_363.java @@ -0,0 +1,93 @@ +package cn.geet.week1; + +/** + * leetcode 641 循环双端队列 + * + * @author lemon + * @version 1.0.0 + * @Description TODO + * @createTime 2020年02月15日 13:23:00 + */ +public class LeetCode_641_363 { + + /** + * 双端队列 是栈和队列的组合模式, 可以两边同时操作 + */ + private int capacity; + private int[] arr; + private int head = 0; + private int tail = 0; + + /** Initialize your data structure here. Set the size of the deque to be k. */ + public LeetCode_641_363(int k) { + capacity = k + 1; + arr = new int[capacity]; + } + + /** Adds an item at the front of Deque. Return true if the operation is successful. */ + public boolean insertFront(int value) { + + // 判断队列是否满 + if (isFull()) { + return false; + } + head = (head - 1 + capacity) % capacity; + arr[head] = value; + return true; + } + + /** Adds an item at the rear of Deque. Return true if the operation is successful. */ + public boolean insertLast(int value) { + if (isFull()) { + return false; + } + arr[tail] = value; + tail = (tail + 1) % capacity; + return true; + } + + /** Deletes an item from the front of Deque. Return true if the operation is successful. */ + public boolean deleteFront() { + if (isEmpty()) { + return false; + } + head = (head + 1) % capacity; + return true; + } + + /** Deletes an item from the rear of Deque. Return true if the operation is successful. */ + public boolean deleteLast() { + if (isEmpty()) { + return false; + } + tail = (tail - 1 + capacity) % capacity; + return true; + } + + /** Get the front item from the deque. */ + public int getFront() { + if (isEmpty()) { + return -1; + } + return arr[head]; + } + + /** Get the last item from the deque. */ + public int getRear() { + if (isEmpty()) { + return -1; + } + return arr[(tail - 1 + capacity) % capacity]; + } + + /** Checks whether the circular deque is empty or not. */ + public boolean isEmpty() { + return head == tail; + } + + /** Checks whether the circular deque is full or not. */ + public boolean isFull() { + return head == (tail + 1) % capacity; + } + +} diff --git a/Week_01/G20200343030363/LeetCode_66_363.java b/Week_01/G20200343030363/LeetCode_66_363.java new file mode 100644 index 00000000..a0257d56 --- /dev/null +++ b/Week_01/G20200343030363/LeetCode_66_363.java @@ -0,0 +1,35 @@ +package cn.geet.week1; + +/** + * @author lemon + * @version 1.0.0 + * @Description TODO + * @createTime 2020年02月16日 10:16:00 + */ +public class LeetCode_66_363 { + + /** + * Plus one int [ ]. 重点在进位 + * + * @param digits + * the digits + * @return the int [ ] + */ + public int[] plusOne(int[] digits) { + + for (int i = digits.length - 1; i >= 0; i--) { + digits[i]++; + digits[i] = digits[i] % 10; + + // 没有进位就直接返回 + if (digits[i] != 0) { + return digits; + } + } + + // 有进位 + digits = new int[digits.length + 1]; + digits[0] = 1; + return digits; + } +} From ad1782705ecb9a171d6d49026144d51900d68798 Mon Sep 17 00:00:00 2001 From: wenjing <84336951@qq.com> Date: Sun, 16 Feb 2020 21:55:17 +0800 Subject: [PATCH 0216/1268] =?UTF-8?q?575=E6=8F=90=E4=BA=A4=E7=AC=AC?= =?UTF-8?q?=E4=B8=80=E5=91=A8=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030575/LeetCode_1_575.swift | 21 ++++++++++++++ .../G20200343030575/LeetCode_283_575.swift | 29 +++++++++++++++++++ Week_01/G20200343030575/LeetCode_66_575.swift | 27 +++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 Week_01/G20200343030575/LeetCode_1_575.swift create mode 100644 Week_01/G20200343030575/LeetCode_283_575.swift create mode 100644 Week_01/G20200343030575/LeetCode_66_575.swift diff --git a/Week_01/G20200343030575/LeetCode_1_575.swift b/Week_01/G20200343030575/LeetCode_1_575.swift new file mode 100644 index 00000000..805ba4d4 --- /dev/null +++ b/Week_01/G20200343030575/LeetCode_1_575.swift @@ -0,0 +1,21 @@ +/* + * @lc app=leetcode.cn id=1 lang=swift + * + * [1] 两数之和 + */ + +// @lc code=start +class Solution { + func twoSum(_ nums: [Int], _ target: Int) -> [Int] { + for i in 0.. 0 else { + return + } + + var notZeroIndex = 0 + for index in 0.. [Int] { + var result = digits + for i in (0.. Date: Sun, 16 Feb 2020 22:01:00 +0800 Subject: [PATCH 0217/1268] =?UTF-8?q?=20=E7=AC=AC=E4=B8=80=E5=91=A8?= =?UTF-8?q?=E7=9A=84=E4=BD=9C=E4=B8=9A=20=20431-Week-01?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_00/G20200343030431/LeetCode_026_431.java | 21 +++++++++++++++++++ Week_00/G20200343030431/LeetCode_088_431.java | 15 +++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 Week_00/G20200343030431/LeetCode_026_431.java create mode 100644 Week_00/G20200343030431/LeetCode_088_431.java diff --git a/Week_00/G20200343030431/LeetCode_026_431.java b/Week_00/G20200343030431/LeetCode_026_431.java new file mode 100644 index 00000000..153b2ed7 --- /dev/null +++ b/Week_00/G20200343030431/LeetCode_026_431.java @@ -0,0 +1,21 @@ +package FistWork; +// 1 遍历数组,找到重复的元素--java中有现成的函数吧 +// 2 删除重复元素,返回新数组 +// 3 思路尝试不通,估使用(copy)的是leetcode上的解法 +public class Solution01 { + public int removeDuplicates(int[] nums) { + if (nums == null || nums.length == 1) { + return nums.length; + } + int i = 0, j = 1; + while (j < nums.length) { + if (nums[i] == nums[j]) { + j++; + } else { + i++; + nums[i] = nums[j]; + } + } + return i + 1; + } +} diff --git a/Week_00/G20200343030431/LeetCode_088_431.java b/Week_00/G20200343030431/LeetCode_088_431.java new file mode 100644 index 00000000..624c537f --- /dev/null +++ b/Week_00/G20200343030431/LeetCode_088_431.java @@ -0,0 +1,15 @@ +package FistWork; +// 自己思路: 分别遍历数组1 ,数组2 , 合并到一起组成数组3, 在遍历一次,排序,成数组4 +// 最终还是使用(copy代码)leetCode的代码 +public class Solution02 { + public void merge(int[] nums1,int m , int[] nums2, int n){ + int len1 = m - 1; + int len2 = n - 1; + int len = m + n - 1; + while(len1 >= 0 && len2 >= 0){ + nums1[len--] = nums1[len1] > nums2[len2] ? nums1[len1--] : nums2[len2--]; + System.arraycopy(nums2,0,nums1,0,len2+1); + } + } + +} From ee0fe1ecb0961ed44531edbaf51a99ae69ceddc5 Mon Sep 17 00:00:00 2001 From: zhouxu Date: Sun, 16 Feb 2020 22:01:38 +0800 Subject: [PATCH 0218/1268] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E5=91=A8=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E4=BD=9C=E4=B8=9A=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030589/LeetCode_1_589.go | 26 +++++++++++++++++++++ Week_01/G20200343030589/LeetCode_283_589.go | 20 ++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 Week_01/G20200343030589/LeetCode_1_589.go create mode 100644 Week_01/G20200343030589/LeetCode_283_589.go diff --git a/Week_01/G20200343030589/LeetCode_1_589.go b/Week_01/G20200343030589/LeetCode_1_589.go new file mode 100644 index 00000000..e0c82740 --- /dev/null +++ b/Week_01/G20200343030589/LeetCode_1_589.go @@ -0,0 +1,26 @@ +/* + * @lc app=leetcode.cn id=1 lang=golang + * + * [1] 两数之和 + */ + +// @lc code=start +func twoSum(nums []int, target int) []int { + result := []int{0,0} + for i := 0; i < len(nums); i++ { + isResult := false + temp := target - nums[i] + for j := 0; j < len(nums); j++ { + if (temp == nums[j] && i != j){ + result[0]=i + result[1]=j + isResult = true + break + } + } + if isResult{ + break + } + } + return result +} \ No newline at end of file diff --git a/Week_01/G20200343030589/LeetCode_283_589.go b/Week_01/G20200343030589/LeetCode_283_589.go new file mode 100644 index 00000000..019f53cf --- /dev/null +++ b/Week_01/G20200343030589/LeetCode_283_589.go @@ -0,0 +1,20 @@ +/* + * @lc app=leetcode.cn id=283 lang=golang + * + * [283] 移动零 + */ + +// @lc code=start +func moveZeroes(nums []int) { + j := 0 + for i := 0; i < len(nums); i++ { + if nums[i]!=0 { + if i != j{ + noZero := nums[i] + nums[i] = nums[j] + nums[j] = noZero + } + j++ + } + } +} \ No newline at end of file From 1761ef04a95ebc5d228b93ae978c85b39527be6a Mon Sep 17 00:00:00 2001 From: JiangChenn <34124734+JiangChenn@users.noreply.github.com> Date: Sun, 16 Feb 2020 22:05:50 +0800 Subject: [PATCH 0219/1268] Add files via upload --- Week_01/G20200343030559/LeetCode_1_559.java | 23 +++++++++++++++++++ Week_01/G20200343030559/LeetCode_283_559.java | 17 ++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 Week_01/G20200343030559/LeetCode_1_559.java create mode 100644 Week_01/G20200343030559/LeetCode_283_559.java diff --git a/Week_01/G20200343030559/LeetCode_1_559.java b/Week_01/G20200343030559/LeetCode_1_559.java new file mode 100644 index 00000000..8815c0c1 --- /dev/null +++ b/Week_01/G20200343030559/LeetCode_1_559.java @@ -0,0 +1,23 @@ +package jc.demo; + +import java.util.HashMap; +import java.util.Map; + +public class LeetCode_1_559 { + public int[] twoSum(int[] nums, int target) { + //有且仅有两个数 + int[] subscript = new int[2]; + Map map = new HashMap<>(); + for(int i=0;i 0) { + nums[i - count] = nums[i]; + nums[i] = 0; + } + + } + } +} From b8a75c11de7cfa8643be25a013d17c8c9a2c65a7 Mon Sep 17 00:00:00 2001 From: fengxuezhi Date: Sun, 16 Feb 2020 22:06:27 +0800 Subject: [PATCH 0220/1268] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E5=91=A8=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\350\275\254\346\225\260\347\273\204.java" | 81 ++++++++++++++++ ...\351\207\215\345\244\215\351\241\271.java" | 95 +++++++++++++++++++ Week_01/G20200343030601/NOTE.md | 81 +++++++++++++++- 3 files changed, 256 insertions(+), 1 deletion(-) create mode 100644 "Week_01/G20200343030601/189.\346\227\213\350\275\254\346\225\260\347\273\204.java" create mode 100644 "Week_01/G20200343030601/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.java" diff --git "a/Week_01/G20200343030601/189.\346\227\213\350\275\254\346\225\260\347\273\204.java" "b/Week_01/G20200343030601/189.\346\227\213\350\275\254\346\225\260\347\273\204.java" new file mode 100644 index 00000000..66065feb --- /dev/null +++ "b/Week_01/G20200343030601/189.\346\227\213\350\275\254\346\225\260\347\273\204.java" @@ -0,0 +1,81 @@ +/* + * @lc app=leetcode.cn id=189 lang=java + * + * [189] 旋转数组 + * + * https://leetcode-cn.com/problems/rotate-array/description/ + * + * algorithms + * Easy (40.41%) + * Likes: 487 + * Dislikes: 0 + * Total Accepted: 97.4K + * Total Submissions: 240.9K + * Testcase Example: '[1,2,3,4,5,6,7]\n3' + * + * 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 + * + * 示例 1: + * + * 输入: [1,2,3,4,5,6,7] 和 k = 3 + * 输出: [5,6,7,1,2,3,4] + * 解释: + * 向右旋转 1 步: [7,1,2,3,4,5,6] + * 向右旋转 2 步: [6,7,1,2,3,4,5] + * 向右旋转 3 步: [5,6,7,1,2,3,4] + * + * + * 示例 2: + * + * 输入: [-1,-100,3,99] 和 k = 2 + * 输出: [3,99,-1,-100] + * 解释: + * 向右旋转 1 步: [99,-1,-100,3] + * 向右旋转 2 步: [3,99,-1,-100] + * + * 说明: + * + * + * 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。 + * 要求使用空间复杂度为 O(1) 的 原地 算法。 + * + * + */ + +// @lc code=start +class Solution { + public void rotate(int[] nums, int k) { + k = k % nums.length; + if (0 == nums.length || 0 == k) { + return; + } + + // int currentPos = nums.length - 1; + // int origialLastValue = nums[currentPos]; + // int nextPos = currentPos; + // do { + // currentPos = nextPos; + // nextPos = (nextPos - k) < 0 ? nextPos - k + nums.length : nextPos - k; + // nums[currentPos] = nums[nextPos]; + // } while (nextPos != nums.length - 1); + + // nums[currentPos] = origialLastValue; + + + int count = 0; + for (int startPos = 0; count < nums.length; startPos++) { + int currentPos = startPos; + int preValue = nums[startPos]; + do { + int nextPos = (currentPos + k) % nums.length; + int temp = nums[nextPos]; + nums[nextPos] = preValue; + preValue = temp; + currentPos = nextPos; + count++; + } while(currentPos != startPos); + } + } +} +// @lc code=end + diff --git "a/Week_01/G20200343030601/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.java" "b/Week_01/G20200343030601/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.java" new file mode 100644 index 00000000..426d6797 --- /dev/null +++ "b/Week_01/G20200343030601/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.java" @@ -0,0 +1,95 @@ +import java.util.Deque; + +import javax.sound.sampled.SourceDataLine; + +/* + * @lc app=leetcode.cn id=26 lang=java + * + * [26] 删除排序数组中的重复项 + * + * https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/description/ + * + * algorithms + * Easy (48.50%) + * Likes: 1328 + * Dislikes: 0 + * Total Accepted: 245.9K + * Total Submissions: 506.8K + * Testcase Example: '[1,1,2]' + * + * 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 + * + * 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 + * + * 示例 1: + * + * 给定数组 nums = [1,1,2], + * + * 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 + * + * 你不需要考虑数组中超出新长度后面的元素。 + * + * 示例 2: + * + * 给定 nums = [0,0,1,1,1,2,2,3,3,4], + * + * 函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。 + * + * 你不需要考虑数组中超出新长度后面的元素。 + * + * + * 说明: + * + * 为什么返回数值是整数,但输出的答案是数组呢? + * + * 请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。 + * + * 你可以想象内部操作如下: + * + * // nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝 + * int len = removeDuplicates(nums); + * + * // 在函数里修改输入数组对于调用者是可见的。 + * // 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。 + * for (int i = 0; i < len; i++) { + * print(nums[i]); + * } + * + * + */ + +// @lc code=start +class Solution { + public int removeDuplicates(int[] nums) { + if (nums.length == 0) { + return 0; + } + + int lastValue = nums[0]; + int lastPos = 0; + for (int i = 1; i < nums.length; ++i) { + if (nums[i] != lastValue) { + lastValue = nums[i]; + nums[++lastPos] = lastValue; + } + } + return lastPos + 1; + + Deque deque = new LinkedList(); + deque.addFirst("a"); + deque.addLast("b"); + deque.addLast("c"); + System.out.println(deque); + + String str = deque.peekFirst(); + System.out.println(str); + System.out.println(deque); + + while (deque.size() > 0){ + System.out.println(deque.removeFirst()); + } + System.out.println(deque); + } +} +// @lc code=end + diff --git a/Week_01/G20200343030601/NOTE.md b/Week_01/G20200343030601/NOTE.md index 50de3041..e1f6be78 100644 --- a/Week_01/G20200343030601/NOTE.md +++ b/Week_01/G20200343030601/NOTE.md @@ -1 +1,80 @@ -学习笔记 \ No newline at end of file +# 学习笔记(第一周) + +**学号:** G20200343030601 + +**姓名:** 冯学智 + +**微信:** SDMrFeng + +## 1. 用add first或add last这套新的API改写Deque的代码 + + Deque deque = new LinkedList(); + deque.addFirst("a"); + deque.addLast("b"); + deque.addLast("c"); + System.out.println(deque); + + String str = deque.peekFirst(); + System.out.println(str); + System.out.println(deque); + + while (deque.size() > 0){ + System.out.println(deque.removeFirst()); + } + System.out.println(deque); + +## 2. 分析Queue源码 + +java中Queue是实现了Collection的接口,包括以下接口函数: + +- boolean add(E e) + + 向队列中添加一个元素。一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,调用 add() 方法就会抛出一个 unchecked 异常。 + +- boolean offer(E e) + 向队列中添加一个元素。一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,调用 offer() 方法会返回 false。 + +- E remove() + + 从队列中删除第一个元素。如果队列元素为空,调用remove() 的行为与 Collection 接口的版本相似会抛出异常。 + +- E poll() + + 从队列中删除第一个元素。如果队列元素为空,调用poll() 方法时只是返回 null。因此新的方法更适合容易出现异常条件的情况。 + +- E element() + + element()用于在队列的头部查询元素。与 remove() 方法类似,在队列为空时, element() 抛出一个异常。 + +- E peek() + + peek() 用于在队列的头部查询元素。与 poll() 方法类似,在队列为空时,peek() 返回 null。 + +## 3. 分析Priority Queue源码 + +PriorityQueue实现了AbstractQueue,PriorityQueue内部由最小堆实现,也就是说每次执行add或是remove之后,总是让最小的元素移动到根,但是,使用迭代器进行访问时,不会保证一个递增的顺序。为了维持最小堆,队列的元素类型必须实现Comparable接口,或者是在构造队列的时候提供一个元素类型的比较器(Comparator),所以元素不能为空。队列的访问操作poll, remove, peek, and element访问的是队头元素,在这里也就是根元素,也就是最小的元素。实现的主要函数包括以下: + +- 构造函数 + + PriorityQueue的构造函数大致分为两类,一种是确定数组初始化大小和Comparator,另一种是由Collection对象构造 + +- add/offer + + add通过offer实现。这个函数干了这几件事情:检查为空,增加修改次数,需要的情况下扩展,增加大小,赋值,向上调整堆,返回真。 + 这里的关键是SiftUp函数:将要插入的节点与父节点进行比较,如果更小,就将父节点往下,然后继续向上比较,如果大于等于,就放在当前的位置。 + +- remove()/poll() + + 删除并返回最小的队头元素后,将数组末位的元素放到队头,然后SiftDown,基本于上面相反。删除并返回最小的队头元素后,将数组末位的元素放到队头,然后SiftDown,基本于上面相反。 + +## 4. 个人第一周学习总结 + +- 对数据结构掌握没有形成体系,这一周下来,感觉之前自己脑袋里的知识混乱不堪;可以想象接下来几周学习复杂数据结构时,不堪一击的样子。 + +- 刷Leetcode题没有套路,以前做过几道Leetcode题目,稍微用时快一些就沾沾自喜,根本没有get到刷题的精髓。没有形成做题的思考套路、不知道看别人的题解、submit通过即结束,没有复盘和反思总结。 + +- 没有阅读源码的习惯,也不知道从哪里开始阅读如何阅读。以及Review别人代码或让高手review自己代码的习惯,正是覃超老师预习周给讲到的feedback。 + +- 将课程中涉及到的题目整理到excel中,按照五遍刷题法进行复习提炼。 + +- 来训练营的目的掌握课上内容不是目的,做完作业也不是目的,最重要的是掌握思维模式、把知识形成体系、提炼学习套路。 \ No newline at end of file From 5ba48d7c8e0e529edde997073c59b85a9d7667a0 Mon Sep 17 00:00:00 2001 From: Lovice Date: Sun, 16 Feb 2020 22:07:03 +0800 Subject: [PATCH 0221/1268] add 66 641 --- Week_00/G20200343030491/LeetCode_283_491.py | 7 ++ Week_01/G20200343030491/LeetCode_641_491.py | 84 +++++++++++++++++++++ Week_01/G20200343030491/LeetCode_66_491.py | 21 ++++++ 3 files changed, 112 insertions(+) create mode 100644 Week_01/G20200343030491/LeetCode_641_491.py create mode 100644 Week_01/G20200343030491/LeetCode_66_491.py diff --git a/Week_00/G20200343030491/LeetCode_283_491.py b/Week_00/G20200343030491/LeetCode_283_491.py index 90bba491..8a582acb 100644 --- a/Week_00/G20200343030491/LeetCode_283_491.py +++ b/Week_00/G20200343030491/LeetCode_283_491.py @@ -27,4 +27,11 @@ def move_zero(nums): j += 1 nums[j:] = [0]*(len(nums)-j) + return nums + +def move_zero_removal(nums): + for i in range(nums.count(0)): + nums.remove(0) + nums.append(0) + return nums \ No newline at end of file diff --git a/Week_01/G20200343030491/LeetCode_641_491.py b/Week_01/G20200343030491/LeetCode_641_491.py new file mode 100644 index 00000000..e9393adf --- /dev/null +++ b/Week_01/G20200343030491/LeetCode_641_491.py @@ -0,0 +1,84 @@ + +class MyCircularDeque: + + def __init__(self, k: int): + """ + Initialize your data structure here. Set the size of the deque to be k. + """ + self.list = [] + self.length = k + self.current = 0 + + def insertFront(self, value: int) -> bool: + """ + Adds an item at the front of Deque. Return true if the operation is successful. + """ + if self.isFull(): + return False + else: + self.list.insert(0,value) + self.current += 1 + return True + + + def insertLast(self, value: int) -> bool: + """ + Adds an item at the rear of Deque. Return true if the operation is successful. + """ + if self.isFull(): + return False + else: + self.list.append(value) + self.current += 1 + return True + + def deleteFront(self) -> bool: + """ + Deletes an item from the front of Deque. Return true if the operation is successful. + """ + if not self.isEmpty(): + self.list.pop(0) + self.current -= 1 + return True + else: + return False + + + def deleteLast(self) -> bool: + """ + Deletes an item from the rear of Deque. Return true if the operation is successful. + """ + if not self.isEmpty(): + self.list.pop() + self.current -= 1 + return True + else: + return False + + + def getFront(self) -> int: + """ + Get the front item from the deque. + """ + return -1 if self.isEmpty() else self.list[0] + + + def getRear(self) -> int: + """ + Get the last item from the deque. + """ + return -1 if self.isEmpty() else self.list[-1] + + + def isEmpty(self) -> bool: + """ + Checks whether the circular deque is empty or not. + """ + return self.current==0 + + + def isFull(self) -> bool: + """ + Checks whether the circular deque is full or not. + """ + return True if self.current>=self.length else False \ No newline at end of file diff --git a/Week_01/G20200343030491/LeetCode_66_491.py b/Week_01/G20200343030491/LeetCode_66_491.py new file mode 100644 index 00000000..2b63807a --- /dev/null +++ b/Week_01/G20200343030491/LeetCode_66_491.py @@ -0,0 +1,21 @@ +import math + +def plusOneRec(digits): + if not digits: + digits = [0] + if digits[-1] != 9: + digits[-1] += 1 + return digits + return plusOneRec(digits[:len(digits)-1]) + [0] + +def plusOne(digits): + n = len(digits) + for i in range(n): + if digits[n-i-1]<9: + digits[n-i-1] += 1 + return digits + digits[n-i-1] = 0 + + digits[0] = 1 + digits.append(0) + return digits \ No newline at end of file From 5ba04ee506ea15e8b00d398eea51ea871ac46402 Mon Sep 17 00:00:00 2001 From: zhchzh <278799636@qq.com> Date: Sun, 16 Feb 2020 22:11:56 +0800 Subject: [PATCH 0222/1268] 587-week-01 --- .../main/java/com/work/LeetCode_1_587.java | 59 +++++++++++++++++++ .../main/java/com/work/LeetCode_26_587.java | 40 +++++++++++++ .../main/java/com/work/LeetCode_283_587.java | 49 +++++++++++++++ 3 files changed, 148 insertions(+) create mode 100644 Week_01/G20200343030587/src/main/java/com/work/LeetCode_1_587.java create mode 100644 Week_01/G20200343030587/src/main/java/com/work/LeetCode_26_587.java create mode 100644 Week_01/G20200343030587/src/main/java/com/work/LeetCode_283_587.java diff --git a/Week_01/G20200343030587/src/main/java/com/work/LeetCode_1_587.java b/Week_01/G20200343030587/src/main/java/com/work/LeetCode_1_587.java new file mode 100644 index 00000000..038d3d11 --- /dev/null +++ b/Week_01/G20200343030587/src/main/java/com/work/LeetCode_1_587.java @@ -0,0 +1,59 @@ +package com.work; + +import java.util.HashMap; +import java.util.Map; + +/** + * 两数之和 + * + * 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 + * + * 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 + * + * 示例: + * + * 给定 nums = [2, 7, 11, 15], target = 9 + * + * 因为 nums[0] + nums[1] = 2 + 7 = 9 + * 所以返回 [0, 1] + * + * 来源:力扣(LeetCode) + * 链接:https://leetcode-cn.com/problems/two-sum + * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 + */ + +public class LeetCode_1_587 { + public int[] twoSum(int[] nums, int target) { + //暴力法 + // for(int i = 0; i < nums.length; i++) { + // for(int j = i + 1; j < nums.length; j++) { + // if(nums[i] + nums[j] == target) { + // return new int[]{i,j}; + // } + // } + // } + //hashmap 二次循环 + // Map map = new HashMap(); + // for(int i = 0; i < nums.length; i++) { + // map.put(nums[i], i); + // } + // for(int i = 0; i < nums.length; i++) { + // Integer num = map.get(target - nums[i]); + // if(num != null && num != i) { + // return new int[]{i,num}; + // } + //} + + //hashmap 一次循环 + Map map = new HashMap<>(); + for(int i = 0; i < nums.length; i++) { + Integer val = map.get(target - nums[i]); + if(val != null && val.intValue() != i){ + return new int[]{i,val}; + } + map.put(nums[i], i); + } + + throw new IllegalArgumentException("No two sum solution"); + } +} diff --git a/Week_01/G20200343030587/src/main/java/com/work/LeetCode_26_587.java b/Week_01/G20200343030587/src/main/java/com/work/LeetCode_26_587.java new file mode 100644 index 00000000..89af71c5 --- /dev/null +++ b/Week_01/G20200343030587/src/main/java/com/work/LeetCode_26_587.java @@ -0,0 +1,40 @@ +package com.work; + +/** + * + * 删除排序数组中的重复项 + * + * 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 + * + * 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 + * + * 示例 1: + * + * 给定数组 nums = [1,1,2], + * + * 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 + * + * 你不需要考虑数组中超出新长度后面的元素。 + * 示例 2: + * + * 给定 nums = [0,0,1,1,1,2,2,3,3,4], + * + * 函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。 + * + * 你不需要考虑数组中超出新长度后面的元素。 + * + * 来源:力扣(LeetCode) + * 链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array + * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 + */ +public class LeetCode_26_587 { + public int removeDuplicates(int[] nums) { + int j = 0; + for (int i = 1; i < nums.length; i++) { + if (nums[j] != nums[i]){ + if (++j != i) nums[j] = nums[i]; + } + } + return j + 1; + } +} diff --git a/Week_01/G20200343030587/src/main/java/com/work/LeetCode_283_587.java b/Week_01/G20200343030587/src/main/java/com/work/LeetCode_283_587.java new file mode 100644 index 00000000..bc4a46c6 --- /dev/null +++ b/Week_01/G20200343030587/src/main/java/com/work/LeetCode_283_587.java @@ -0,0 +1,49 @@ +package com.work; + +/** + * 移动零 + * + * 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 + * + * 示例: + * + * 输入: [0,1,0,3,12] + * 输出: [1,3,12,0,0] + * 说明: + * + * 必须在原数组上操作,不能拷贝额外的数组。 + * 尽量减少操作次数。 + * + * 来源:力扣(LeetCode) + * 链接:https://leetcode-cn.com/problems/move-zeroes + * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 + */ + +public class LeetCode_283_587 { + //一次循环 + public void moveZeroes(int[] nums) { + for (int i = 0,j=0 ; i < nums.length; i++) { + if(nums[i] != 0){ + nums[j] = nums[i]; + if(i != j) { + nums[i] = 0; + } + j++; + } + } + } + + //二次循环 + public void moveZeroes2(int[] nums) { + int j = 0; + for (int i = 0; i < nums.length; i++) { + if(nums[i] != 0){ + nums[j++] = nums[i]; + } + } + + for (int i = j; i < nums.length; i++) { + nums[i] = 0; + } + } +} From 443791495a69613fff554107dde06bfa19a73ebe Mon Sep 17 00:00:00 2001 From: Wang Yanjun Date: Sun, 16 Feb 2020 22:19:10 +0800 Subject: [PATCH 0223/1268] [INIT] week_01 homework --- Week_01/G20200343030001/Leetcode_001.java | 35 +++++++++++++++++++ Week_01/G20200343030001/Leetcode_021.java | 41 ++++++++++++++++++++++ Week_01/G20200343030001/Leetcode_026.java | 35 +++++++++++++++++++ Week_01/G20200343030001/Leetcode_189.java | 42 +++++++++++++++++++++++ Week_01/G20200343030001/Leetcode_283.java | 31 +++++++++++++++++ Week_01/G20200343030001/ListNode.java | 10 ++++++ Week_01/G20200343030001/RamdomArray.java | 23 +++++++++++++ 7 files changed, 217 insertions(+) create mode 100644 Week_01/G20200343030001/Leetcode_001.java create mode 100644 Week_01/G20200343030001/Leetcode_021.java create mode 100644 Week_01/G20200343030001/Leetcode_026.java create mode 100644 Week_01/G20200343030001/Leetcode_189.java create mode 100644 Week_01/G20200343030001/Leetcode_283.java create mode 100644 Week_01/G20200343030001/ListNode.java create mode 100644 Week_01/G20200343030001/RamdomArray.java diff --git a/Week_01/G20200343030001/Leetcode_001.java b/Week_01/G20200343030001/Leetcode_001.java new file mode 100644 index 00000000..ff3a74a4 --- /dev/null +++ b/Week_01/G20200343030001/Leetcode_001.java @@ -0,0 +1,35 @@ +package Week_01; + +import java.util.HashMap; + +public class Leetcode_001 { + // 暴力法 + public int[] twoSum(int[] nums, int target) { + for (int i = 0; i < nums.length - 1; i++) { + for (int j = i + 1; j < nums.length; j++) { + if (nums[i] + nums[j] == target) { + return new int[] {i, j}; + } + } + } + + throw new IllegalArgumentException("No two sum solution"); + } + + // hash表法,一次遍历过程中完成hash表构建和查找元素功能,善用target + public int[] twoSum1(int[] nums, int target) { + HashMap index = new HashMap(); + + for (int i = 0; i < nums.length; i++) { + int idx = nums[i]; + + if (index.containsKey(target - idx)) { + return new int[] {index.get(target - idx), i}; + } + + index.put(idx, i); + } + + throw new IllegalArgumentException("No two sum solution"); + } +} diff --git a/Week_01/G20200343030001/Leetcode_021.java b/Week_01/G20200343030001/Leetcode_021.java new file mode 100644 index 00000000..88d18960 --- /dev/null +++ b/Week_01/G20200343030001/Leetcode_021.java @@ -0,0 +1,41 @@ +package Week_01; + +public class Leetcode_021 { + public ListNode mergeTwoLists(ListNode l1, ListNode l2) { + if (l1 == null) { + return l2; + } + + if (l2 == null) { + return l1; + } + + ListNode res = new ListNode(0); + ListNode p = l1, q = l2, cur = res; + + while (p != null && q != null) { + int x = p.val; + int y = q.val; + + if (x <= y) { + cur.next = new ListNode(x); + cur = cur.next; + p = p.next; + } else { + cur.next = new ListNode(y); + cur = cur.next; + q = q.next; + } + } + + if (p == null) { + cur.next = q; + } + + if (q == null) { + cur.next = p; + } + + return res.next; + } +} diff --git a/Week_01/G20200343030001/Leetcode_026.java b/Week_01/G20200343030001/Leetcode_026.java new file mode 100644 index 00000000..d473a710 --- /dev/null +++ b/Week_01/G20200343030001/Leetcode_026.java @@ -0,0 +1,35 @@ +package Week_01; + +import java.util.Arrays; + +public class Leetcode_026 { + public int removeDuplicates(int[] nums) { + if (nums == null || nums.length == 0) { + return 0; + } + + int i = 0, j = 1; + + while (j < nums.length) { + if (nums[j] != nums[i]) { + nums[++i] = nums[j]; + } + + j++; + } + + return i + 1; + } + + public static void main(String[] args) { + RamdomArray ramdomArray = new RamdomArray(); + Leetcode_026 solution = new Leetcode_026(); + + for (int i = 0 ; i < 15; i++) { + int[] array = ramdomArray.generate(i, 10); + Arrays.sort(array); + + System.out.println(Arrays.toString(array) + "\t" +solution.removeDuplicates(array)); + } + } +} diff --git a/Week_01/G20200343030001/Leetcode_189.java b/Week_01/G20200343030001/Leetcode_189.java new file mode 100644 index 00000000..b38be8fa --- /dev/null +++ b/Week_01/G20200343030001/Leetcode_189.java @@ -0,0 +1,42 @@ +package Week_01; + +import java.util.Arrays; + +public class Leetcode_189 { + public static void main(String[] args) { + RamdomArray ramdomArray = new RamdomArray(); + Leetcode_189 solution = new Leetcode_189(); + + for (int i = 0; i < 10; i++) { + int[] arr = ramdomArray.generate(i, 100); + int k = (int)(Math.random() * 10); + + System.out.print(Arrays.toString(arr) + "\t" + k + "\t"); + + solution.rotate(arr, k); + + System.out.println(Arrays.toString(arr)); + } + } + + public void rotate(int[] nums, int k) { + if(nums == null || nums.length == 0){ + return; + } + + int len = nums.length; + k = k % len; + + reverse(nums, 0, len-1); + reverse(nums, k, len-1); + reverse(nums, 0, k-1); + } + + public static void reverse(int[] arr, int i, int j) { + while (i < j) { + int temp = arr[i]; + arr[i++] = arr[j]; + arr[j--] = temp; + } + } +} diff --git a/Week_01/G20200343030001/Leetcode_283.java b/Week_01/G20200343030001/Leetcode_283.java new file mode 100644 index 00000000..c5b27470 --- /dev/null +++ b/Week_01/G20200343030001/Leetcode_283.java @@ -0,0 +1,31 @@ +package Week_01; + +import java.util.Arrays; + +public class Leetcode_283 { + public void moveZeroes(int[] nums) { + int j = 0; + + for (int i = 0; i < nums.length; ++i) { + if (nums[i] != 0) { + nums[j] = nums[i]; + + if (i != j) { + nums[i] = 0; + } + + j++; + } + } + } + + public static void main(String[] args) { + int[] arr = { 0, 0, 1, 100, 3, 12}; + + System.out.println(Arrays.toString(arr)); + + new Leetcode_283().moveZeroes(arr); + + System.out.println(Arrays.toString(arr)); + } +} diff --git a/Week_01/G20200343030001/ListNode.java b/Week_01/G20200343030001/ListNode.java new file mode 100644 index 00000000..ec557f8d --- /dev/null +++ b/Week_01/G20200343030001/ListNode.java @@ -0,0 +1,10 @@ +package Week_01; + +public class ListNode { + int val; + ListNode next; + + public ListNode(int val) { + this.val = val; + } +} diff --git a/Week_01/G20200343030001/RamdomArray.java b/Week_01/G20200343030001/RamdomArray.java new file mode 100644 index 00000000..345da3c1 --- /dev/null +++ b/Week_01/G20200343030001/RamdomArray.java @@ -0,0 +1,23 @@ +package Week_01; + +/** + * 测试用随机数组生成器 + * + * @author wyj + * @date 2020/2/11 + */ +public class RamdomArray { + public int[] generate(int len, int max) { + if (len <= 0) { + return new int[0]; + } + + int[] arr = new int[len]; + + for (int i = 0; i < len; i++) { + arr[i] = (int)(Math.random() * max); + } + + return arr; + } +} From f974db85afda10dab63b7f19183820eb6e6ed81b Mon Sep 17 00:00:00 2001 From: XuNan <41865662@qq.com> Date: Sun, 16 Feb 2020 22:20:51 +0800 Subject: [PATCH 0224/1268] 439-week 01 --- ...\346\225\260\344\271\213\345\222\214.java" | 60 ++++++ ...\350\275\254\346\225\260\347\273\204.java" | 116 +++++++++++ ...\345\272\217\351\223\276\350\241\250.java" | 88 +++++++++ ...\351\207\215\345\244\215\351\241\271.java" | 96 +++++++++ ...\347\247\273\345\212\250\351\233\266.java" | 72 +++++++ ...\347\253\257\351\230\237\345\210\227.java" | 186 ++++++++++++++++++ .../66.\345\212\240\344\270\200.java" | 53 +++++ ...\345\272\217\346\225\260\347\273\204.java" | 82 ++++++++ Week_01/G20200343030439/ListNode.java | 9 + 9 files changed, 762 insertions(+) create mode 100644 "Week_01/G20200343030439/1.\344\270\244\346\225\260\344\271\213\345\222\214.java" create mode 100644 "Week_01/G20200343030439/189.\346\227\213\350\275\254\346\225\260\347\273\204.java" create mode 100644 "Week_01/G20200343030439/21.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\351\223\276\350\241\250.java" create mode 100644 "Week_01/G20200343030439/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.java" create mode 100644 "Week_01/G20200343030439/283.\347\247\273\345\212\250\351\233\266.java" create mode 100644 "Week_01/G20200343030439/641.\350\256\276\350\256\241\345\276\252\347\216\257\345\217\214\347\253\257\351\230\237\345\210\227.java" create mode 100644 "Week_01/G20200343030439/66.\345\212\240\344\270\200.java" create mode 100644 "Week_01/G20200343030439/88.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\346\225\260\347\273\204.java" create mode 100644 Week_01/G20200343030439/ListNode.java diff --git "a/Week_01/G20200343030439/1.\344\270\244\346\225\260\344\271\213\345\222\214.java" "b/Week_01/G20200343030439/1.\344\270\244\346\225\260\344\271\213\345\222\214.java" new file mode 100644 index 00000000..ec00aef6 --- /dev/null +++ "b/Week_01/G20200343030439/1.\344\270\244\346\225\260\344\271\213\345\222\214.java" @@ -0,0 +1,60 @@ +/* + * @lc app=leetcode.cn id=1 lang=java + * + * [1] 两数之和 + * + * https://leetcode-cn.com/problems/two-sum/description/ + * + * algorithms + * Easy (47.26%) + * Likes: 7328 + * Dislikes: 0 + * Total Accepted: 762.6K + * Total Submissions: 1.6M + * Testcase Example: '[2,7,11,15]\n9' + * + * 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 + * + * 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 + * + * 示例: + * + * 给定 nums = [2, 7, 11, 15], target = 9 + * + * 因为 nums[0] + nums[1] = 2 + 7 = 9 + * 所以返回 [0, 1] + * + * + */ + +// @lc code=start +class Solution { + // 暴力 + public static int[] twoSum(int[] nums, int target) { + for (int i = 0; i < nums.length; i++) { + for (int j = i + 1; j < nums.length; j++) { + if (nums[j] == target - nums[i]) { + return new int[] { i, j }; + } + } + } + throw new IllegalArgumentException("无"); + +} + +// 哈希表 +public static int[] twoSum2(int[] nums, int target) { + Map map = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + int numB = target - nums[i]; + if (map.containsKey(numB)) { + return new int[] { map.get(numB), i }; + } + map.put(nums[i], i); + } + throw new IllegalArgumentException("无"); + +} +} +// @lc code=end + diff --git "a/Week_01/G20200343030439/189.\346\227\213\350\275\254\346\225\260\347\273\204.java" "b/Week_01/G20200343030439/189.\346\227\213\350\275\254\346\225\260\347\273\204.java" new file mode 100644 index 00000000..cf88f6f7 --- /dev/null +++ "b/Week_01/G20200343030439/189.\346\227\213\350\275\254\346\225\260\347\273\204.java" @@ -0,0 +1,116 @@ +/* + * @lc app=leetcode.cn id=189 lang=java + * + * [189] 旋转数组 + * + * https://leetcode-cn.com/problems/rotate-array/description/ + * + * algorithms + * Easy (39.94%) + * Likes: 483 + * Dislikes: 0 + * Total Accepted: 96.6K + * Total Submissions: 239.1K + * Testcase Example: '[1,2,3,4,5,6,7]\n3' + * + * 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 + * + * 示例 1: + * + * 输入: [1,2,3,4,5,6,7] 和 k = 3 + * 输出: [5,6,7,1,2,3,4] + * 解释: + * 向右旋转 1 步: [7,1,2,3,4,5,6] + * 向右旋转 2 步: [6,7,1,2,3,4,5] + * 向右旋转 3 步: [5,6,7,1,2,3,4] + * + * + * 示例 2: + * + * 输入: [-1,-100,3,99] 和 k = 2 + * 输出: [3,99,-1,-100] + * 解释: + * 向右旋转 1 步: [99,-1,-100,3] + * 向右旋转 2 步: [3,99,-1,-100] + * + * 说明: + * + * + * 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。 + * 要求使用空间复杂度为 O(1) 的 原地 算法。 + * + * + */ + +// @lc code=start +class Solution { + + public static void main(String[] args) { + int[] nums = { 0, 1, 2, 3, 4, 5 }; + rotate(nums, 2); + for (int i = 0; i < nums.length; i++) { + System.out.println(nums[i]); + } + } + + // 方法 1:暴力 + public static void rotate(int[] nums, int k) { + int temp; + int previouse; + + for (int i = 0; i < k; i++) { + previouse = nums[nums.length - 1]; + for (int j = 0; j < nums.length; j++) { + temp = nums[j]; + nums[j] = previouse; + previouse = temp; + } + } +} + +// 方法 2:使用额外的数组 +public static void rotate2(int[] nums, int k) { + int[] newNums = new int[nums.length]; + for (int i = 0; i < nums.length; i++) { + newNums[(i + k) % nums.length] = nums[i]; + } + for (int i = 0; i < nums.length; i++) { + nums[i] = newNums[i]; + } +} + +// 方法 3:使用环状替换 +public static void rotate3(int[] nums, int k) { + k = k % nums.length; + int count = 0; + for (int i = 0; count < nums.length; i++) { + int current = i; + int prev = nums[i]; + do { + int next = (current + k) % nums.length; + int temp = nums[next]; + nums[next] = prev; + prev = temp; + current = next; + count++; + } while (i != current); + } +} +// 方法 4:使用反转 +public static void rotate4(int[] nums, int k) { + k %= nums.length; + reverse(nums, 0, nums.length - 1); + reverse(nums, 0, k - 1); + reverse(nums, k, nums.length - 1); +} +public static void reverse(int[] nums, int start, int end) { + while (start < end) { + int temp = nums[start]; + nums[start] = nums[end]; + nums[end] = temp; + start++; + end--; + } +} +} +// @lc code=end diff --git "a/Week_01/G20200343030439/21.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\351\223\276\350\241\250.java" "b/Week_01/G20200343030439/21.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\351\223\276\350\241\250.java" new file mode 100644 index 00000000..3dfdae23 --- /dev/null +++ "b/Week_01/G20200343030439/21.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\351\223\276\350\241\250.java" @@ -0,0 +1,88 @@ +/* + * @lc app=leetcode.cn id=21 lang=java + * + * [21] 合并两个有序链表 + * + * https://leetcode-cn.com/problems/merge-two-sorted-lists/description/ + * + * algorithms + * Easy (58.94%) + * Likes: 852 + * Dislikes: 0 + * Total Accepted: 181.4K + * Total Submissions: 304.3K + * Testcase Example: '[1,2,4]\n[1,3,4]' + * + * 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。  + * + * 示例: + * + * 输入:1->2->4, 1->3->4 + * 输出:1->1->2->3->4->4 + * + * + */ + +// @lc code=start +/** + * Definition for singly-linked list. public class ListNode { int val; ListNode + * next; ListNode(int x) { val = x; } } + */ +class Solution { + + public static void main(String[] args) { + ListNode l1 = new ListNode(1); + ListNode l12 = new ListNode(2); + ListNode l13 = new ListNode(4); + l1.next = l12; + l12.next = l13; + + ListNode l2 = new ListNode(1); + ListNode l22 = new ListNode(3); + ListNode l23 = new ListNode(4); + l2.next = l22; + l22.next = l23; + + ListNode result = mergeTwoLists(l1, l2); + while (result != null) { + System.out.println(result.val); + result = result.next; + } + } + + // 方法 1:递归 + public static ListNode mergeTwoLists(ListNode l1, ListNode l2) { + if (l1 == null) { + return l2; + } else if (l2 == null) { + return l1; + } else if (l1.val < l2.val) { + l1.next = mergeTwoLists(l1.next, l2); + return l1; + } else { + l2.next = mergeTwoLists(l1, l2.next); + return l2; + } + + } + + // 方法 2:迭代 + public static ListNode mergeTwoLists2(ListNode l1, ListNode l2) { + ListNode prehead = new ListNode(-1); + + ListNode prev = prehead; + while (l1 != null && l2 != null) { + if (l1.val <= l2.val) { + prev.next = l1; + l1 = l1.next; + } else { + prev.next = l2; + l2 = l2.next; + } + prev = prev.next; + } + prev.next = l1 == null ? l2 : l1; + return prehead.next; + } +} +// @lc code=end diff --git "a/Week_01/G20200343030439/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.java" "b/Week_01/G20200343030439/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.java" new file mode 100644 index 00000000..0d4c21d9 --- /dev/null +++ "b/Week_01/G20200343030439/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.java" @@ -0,0 +1,96 @@ +/* + * @lc app=leetcode.cn id=26 lang=java + * + * [26] 删除排序数组中的重复项 + * + * https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/description/ + * + * algorithms + * Easy (47.86%) + * Likes: 1324 + * Dislikes: 0 + * Total Accepted: 244K + * Total Submissions: 503.6K + * Testcase Example: '[1,1,2]' + * + * 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 + * + * 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 + * + * 示例 1: + * + * 给定数组 nums = [1,1,2], + * + * 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 + * + * 你不需要考虑数组中超出新长度后面的元素。 + * + * 示例 2: + * + * 给定 nums = [0,0,1,1,1,2,2,3,3,4], + * + * 函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。 + * + * 你不需要考虑数组中超出新长度后面的元素。 + * + * + * 说明: + * + * 为什么返回数值是整数,但输出的答案是数组呢? + * + * 请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。 + * + * 你可以想象内部操作如下: + * + * // nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝 + * int len = removeDuplicates(nums); + * + * // 在函数里修改输入数组对于调用者是可见的。 + * // 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。 + * for (int i = 0; i < len; i++) { + * print(nums[i]); + * } + * + * + */ + +// @lc code=start +class Solution12 { + public static void main(String[] args) { + int[] nums = { 0, 0, 1, 1, 2, 2 }; + int result = removeDuplicates2(nums); + System.out.println(result); + for (int i = 0; i < result; i++) { + System.out.println(nums[i]); + } + } + + public static int removeDuplicates(int[] nums) { + if (nums.length == 0) + return 0; + int i = 0; + for (int j = 1; j < nums.length; j++) { + if (nums[j] != nums[i]) { + i++; + nums[i] = nums[j]; + } + } + return i + 1; + } + + public static int removeDuplicates2(int[] nums) { + if (nums.length == 0) + return 0; + int i = 0; + int j = 1; + while (j < nums.length) { + if (nums[i] != nums[j]) { + i++; + nums[i] = nums[j]; + } + j++; + } + return i + 1; + } +} +// @lc code=end diff --git "a/Week_01/G20200343030439/283.\347\247\273\345\212\250\351\233\266.java" "b/Week_01/G20200343030439/283.\347\247\273\345\212\250\351\233\266.java" new file mode 100644 index 00000000..844ca200 --- /dev/null +++ "b/Week_01/G20200343030439/283.\347\247\273\345\212\250\351\233\266.java" @@ -0,0 +1,72 @@ +/* + * @lc app=leetcode.cn id=283 lang=java + * + * [283] 移动零 + * + * https://leetcode-cn.com/problems/move-zeroes/description/ + * + * algorithms + * Easy (58.54%) + * Likes: 496 + * Dislikes: 0 + * Total Accepted: 107K + * Total Submissions: 180.4K + * Testcase Example: '[0,1,0,3,12]' + * + * 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 + * + * 示例: + * + * 输入: [0,1,0,3,12] + * 输出: [1,3,12,0,0] + * + * 说明: + * + * + * 必须在原数组上操作,不能拷贝额外的数组。 + * 尽量减少操作次数。 + * + * + */ + +// @lc code=start +class Solution { + + public static void moveZeroes(int[] nums) { + int zeroeCount = 0; + int[] tempNums = new int[nums.length]; + int tempIndex = 0; + for (int i = 0; i < nums.length; i++) { + if (nums[i] == 0) { + zeroeCount++; + } else { + tempNums[tempIndex] = nums[i]; + tempIndex++; + } + } + for (int i = 0; i < nums.length; i++) { + if (i < nums.length - zeroeCount) { + nums[i] = tempNums[i]; + } + else{ + nums[i]=0; + } + } + } + + // 快慢指针 + public static void moveZeroes2(int[] nums) { + int slow = 0; + for (int i = 0; i < nums.length; i++) { + if (nums[i] != 0) { + int temp = nums[slow]; + nums[slow] = nums[i]; + nums[i] = temp; + slow++; + + } + } + } +} +// @lc code=end + diff --git "a/Week_01/G20200343030439/641.\350\256\276\350\256\241\345\276\252\347\216\257\345\217\214\347\253\257\351\230\237\345\210\227.java" "b/Week_01/G20200343030439/641.\350\256\276\350\256\241\345\276\252\347\216\257\345\217\214\347\253\257\351\230\237\345\210\227.java" new file mode 100644 index 00000000..d7c9d929 --- /dev/null +++ "b/Week_01/G20200343030439/641.\350\256\276\350\256\241\345\276\252\347\216\257\345\217\214\347\253\257\351\230\237\345\210\227.java" @@ -0,0 +1,186 @@ +/* + * @lc app=leetcode.cn id=641 lang=java + * + * [641] 设计循环双端队列 + * + * https://leetcode-cn.com/problems/design-circular-deque/description/ + * + * algorithms + * Medium (48.50%) + * Likes: 23 + * Dislikes: 0 + * Total Accepted: 4.5K + * Total Submissions: 9.2K + * Testcase Example: '["MyCircularDeque","insertLast","insertLast","insertFront","insertFront","getRear","isFull","deleteLast","insertFront","getFront"]\n[[3],[1],[2],[3],[4],[],[],[],[4],[]]' + * + * 设计实现双端队列。 + * 你的实现需要支持以下操作: + * + * + * MyCircularDeque(k):构造函数,双端队列的大小为k。 + * insertFront():将一个元素添加到双端队列头部。 如果操作成功返回 true。 + * insertLast():将一个元素添加到双端队列尾部。如果操作成功返回 true。 + * deleteFront():从双端队列头部删除一个元素。 如果操作成功返回 true。 + * deleteLast():从双端队列尾部删除一个元素。如果操作成功返回 true。 + * getFront():从双端队列头部获得一个元素。如果双端队列为空,返回 -1。 + * getRear():获得双端队列的最后一个元素。 如果双端队列为空,返回 -1。 + * isEmpty():检查双端队列是否为空。 + * isFull():检查双端队列是否满了。 + * + * + * 示例: + * + * MyCircularDeque circularDeque = new MycircularDeque(3); // 设置容量大小为3 + * circularDeque.insertLast(1); // 返回 true + * circularDeque.insertLast(2); // 返回 true + * circularDeque.insertFront(3); // 返回 true + * circularDeque.insertFront(4); // 已经满了,返回 false + * circularDeque.getRear(); // 返回 2 + * circularDeque.isFull(); // 返回 true + * circularDeque.deleteLast(); // 返回 true + * circularDeque.insertFront(4); // 返回 true + * circularDeque.getFront(); // 返回 4 + * + * + * + * + * 提示: + * + * + * 所有值的范围为 [1, 1000] + * 操作次数的范围为 [1, 1000] + * 请不要使用内置的双端队列库。 + * + * + */ + +// @lc code=start +class MyCircularDeque { + + ListNode dequeFirst; + ListNode dequeLast; + int maxLength; + int currentLength; + + /** Initialize your data structure here. Set the size of the deque to be k. */ + public MyCircularDeque(int k) { + currentLength = 0; + maxLength = k; + dequeFirst = new ListNode(0); + dequeLast = new ListNode(0); + } + + /** + * Adds an item at the front of Deque. Return true if the operation is + * successful. + */ + public boolean insertFront(int value) { + if (currentLength == maxLength) { + return false; + } + ListNode node = new ListNode(value); + if (isEmpty()) { + dequeFirst.next = node; + node.previous =dequeFirst; + node.next = dequeLast; + dequeLast.previous = node; + } else { + node.next = dequeFirst.next; + node.previous = dequeFirst; + node.next.previous = node; + dequeFirst.next=node; + } + currentLength++; + return true; + } + + /** + * Adds an item at the rear of Deque. Return true if the operation is + * successful. + */ + public boolean insertLast(int value) { + if (currentLength == maxLength) { + return false; + } + ListNode node = new ListNode(value); + if (isEmpty()) { + dequeLast.previous = node; + node.previous =dequeFirst; + node.next = dequeLast; + dequeFirst.next = node; + } else { + node.previous = dequeLast.previous; + node.next = dequeLast; + node.previous.next = node; + dequeLast.previous = node; + } + currentLength++; + return true; + } + + /** + * Deletes an item from the front of Deque. Return true if the operation is + * successful. + */ + public boolean deleteFront() { + if (currentLength == 0) { + return false; + } + if (!isEmpty()) { + dequeFirst.next = dequeFirst.next.next; + dequeFirst.next.previous = null; + dequeFirst.next.previous = dequeFirst; + currentLength--; + return true; + } + return false; + } + + /** + * Deletes an item from the rear of Deque. Return true if the operation is + * successful. + */ + public boolean deleteLast() { + if (currentLength == 0) { + return false; + } + if (!isEmpty()) { + dequeLast.previous = dequeLast.previous.previous; + dequeLast.previous.next = null; + dequeLast.previous.next = dequeLast; + currentLength--; + return true; + } + return false; + } + + /** Get the front item from the deque. */ + public int getFront() { + return isEmpty() ? -1 : dequeFirst.next.val; + } + + /** Get the last item from the deque. */ + public int getRear() { + return isEmpty() ? -1 : dequeLast.previous.val; + } + + /** Checks whether the circular deque is empty or not. */ + public boolean isEmpty() { + return currentLength == 0; + } + + /** Checks whether the circular deque is full or not. */ + public boolean isFull() { + return maxLength == currentLength; + } +} + +/** + * Your MyCircularDeque object will be instantiated and called as such: + * MyCircularDeque obj = new MyCircularDeque(k); boolean param_1 = + * obj.insertFront(value); boolean param_2 = obj.insertLast(value); boolean + * param_3 = obj.deleteFront(); boolean param_4 = obj.deleteLast(); int param_5 + * = obj.getFront(); int param_6 = obj.getRear(); boolean param_7 = + * obj.isEmpty(); boolean param_8 = obj.isFull(); + */ +// @lc code=end diff --git "a/Week_01/G20200343030439/66.\345\212\240\344\270\200.java" "b/Week_01/G20200343030439/66.\345\212\240\344\270\200.java" new file mode 100644 index 00000000..f967b081 --- /dev/null +++ "b/Week_01/G20200343030439/66.\345\212\240\344\270\200.java" @@ -0,0 +1,53 @@ +/* + * @lc app=leetcode.cn id=66 lang=java + * + * [66] 加一 + * + * https://leetcode-cn.com/problems/plus-one/description/ + * + * algorithms + * Easy (42.34%) + * Likes: 425 + * Dislikes: 0 + * Total Accepted: 118K + * Total Submissions: 274.7K + * Testcase Example: '[1,2,3]' + * + * 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 + * + * 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 + * + * 你可以假设除了整数 0 之外,这个整数不会以零开头。 + * + * 示例 1: + * + * 输入: [1,2,3] + * 输出: [1,2,4] + * 解释: 输入数组表示数字 123。 + * + * + * 示例 2: + * + * 输入: [4,3,2,1] + * 输出: [4,3,2,2] + * 解释: 输入数组表示数字 4321。 + * + * + */ + +// @lc code=start +class Solution { + public int[] plusOne(int[] digits) { + for (int i = digits.length - 1; i >= 0; i--) { + digits[i] = (digits[i] + 1) % 10; + if (digits[i] != 0) { + return digits; + } + } + digits = new int[digits.length + 1]; + digits[0] = 1; + return digits; + } +} +// @lc code=end + diff --git "a/Week_01/G20200343030439/88.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\346\225\260\347\273\204.java" "b/Week_01/G20200343030439/88.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\346\225\260\347\273\204.java" new file mode 100644 index 00000000..f84df2b9 --- /dev/null +++ "b/Week_01/G20200343030439/88.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\346\225\260\347\273\204.java" @@ -0,0 +1,82 @@ +import java.util.Arrays; + +/* + * @lc app=leetcode.cn id=88 lang=java + * + * [88] 合并两个有序数组 + * + * https://leetcode-cn.com/problems/merge-sorted-array/description/ + * + * algorithms + * Easy (46.05%) + * Likes: 417 + * Dislikes: 0 + * Total Accepted: 108.4K + * Total Submissions: 232.6K + * Testcase Example: '[1,2,3,0,0,0]\n3\n[2,5,6]\n3' + * + * 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 + * + * 说明: + * + * + * 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 + * 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 + * + * + * 示例: + * + * 输入: + * nums1 = [1,2,3,0,0,0], m = 3 + * nums2 = [2,5,6], n = 3 + * + * 输出: [1,2,2,3,5,6] + * + */ + +// @lc code=start +class Solution { + // 使用类库方法 + public static void merge(int[] nums1, int m, int[] nums2, int n) { + System.arraycopy(nums2, 0, nums1, m, n); + Arrays.sort(nums1); +} + +// 双指针 / 从前往后 +public static void merge2(int[] nums1, int m, int[] nums2, int n) { + int[] nums1_copy = new int[m]; + System.arraycopy(nums1, 0, nums1_copy, 0, m); + int p1 = 0; + int p2 = 0; + + int p = 0; + + while (p1 < m && p2 < n) { + nums1[p++] = nums1_copy[p1] < nums2[p2] ? nums1_copy[p1++] : nums2[p2++]; + } + + if (p1 < m) { + System.arraycopy(nums1_copy, p1, nums1, p, m - p1); + } else if (p2 < n) { + System.arraycopy(nums2, p2, nums1, p, n - p2); + } +} + +// 方法三 : 双指针 / 从后往前 +public static void merge3(int[] nums1, int m, int[] nums2, int n) { + int p1 = m - 1; + int p2 = n - 1; + + int p = m + n - 1; + while (p1 >= 0 && p2 >= 0) { + nums1[p--] = nums1[p1] > nums2[p2] ? nums1[p1--] : nums2[p2--]; + } + if (p2 >= 0){ + for (int i = 0; i <= p2; i++){ + nums1[i] = nums2[i]; + } + } +} +} +// @lc code=end + diff --git a/Week_01/G20200343030439/ListNode.java b/Week_01/G20200343030439/ListNode.java new file mode 100644 index 00000000..f84b6bd0 --- /dev/null +++ b/Week_01/G20200343030439/ListNode.java @@ -0,0 +1,9 @@ +public class ListNode { + int val; + ListNode previous; + ListNode next; + + ListNode(int x) { + val = x; + } +} \ No newline at end of file From 6a8f40fa8fe4f13cbd14b8a3ccd6b2de97c86ffc Mon Sep 17 00:00:00 2001 From: Willsgao <43256529+Willsgao@users.noreply.github.com> Date: Sun, 16 Feb 2020 22:22:42 +0800 Subject: [PATCH 0225/1268] first first push --- Week_01/G20200343030417/417-week01/NOTE.md | 1 + .../417-week01/circle_deque.py | 56 +++++++++++++++++++ .../G20200343030417/417-week01/mergelist.py | 21 +++++++ 3 files changed, 78 insertions(+) create mode 100644 Week_01/G20200343030417/417-week01/NOTE.md create mode 100644 Week_01/G20200343030417/417-week01/circle_deque.py create mode 100644 Week_01/G20200343030417/417-week01/mergelist.py diff --git a/Week_01/G20200343030417/417-week01/NOTE.md b/Week_01/G20200343030417/417-week01/NOTE.md new file mode 100644 index 00000000..50de3041 --- /dev/null +++ b/Week_01/G20200343030417/417-week01/NOTE.md @@ -0,0 +1 @@ +学习笔记 \ No newline at end of file diff --git a/Week_01/G20200343030417/417-week01/circle_deque.py b/Week_01/G20200343030417/417-week01/circle_deque.py new file mode 100644 index 00000000..f1eddb79 --- /dev/null +++ b/Week_01/G20200343030417/417-week01/circle_deque.py @@ -0,0 +1,56 @@ +# 设计实现双段队列 +# import collections + +class MyCircularDeque: + def __init__(self,k:int): + self.k = k + self.q = [] + + # 前端插入 + def insertFront(self,value:int) -> bool: + if len(self.q) < self.k: + self.q.insert(0,value) + return True + return False + + # 后端插入 + def insertLast(self,value:int) -> bool: + if len(self.q) < self.k: + self.q += [value] + return True + return False + + # 前段删除 + def deleteFront(self) -> bool: + if self.q: + self.q.pop(0) + return True + return False + + # 后端删除 + def deleteLast(self) -> bool: + if self.q: + self.q.pop() + return True + return False + + # 获取前端数据 + def getFront(self) -> int: + if self.q: + return self.q[0] + return -1 + + # 获取后端数据 + def getRear(self) -> int: + if self.q: + return self.q[-1] + return -1 + + # 判断是否已空 + def isEmpty(self) -> bool: + return len(self.q) == 0 + + # 判断是否已满 + def isFull(self) -> bool: + return len(self.q) == self.k + diff --git a/Week_01/G20200343030417/417-week01/mergelist.py b/Week_01/G20200343030417/417-week01/mergelist.py new file mode 100644 index 00000000..9ab75598 --- /dev/null +++ b/Week_01/G20200343030417/417-week01/mergelist.py @@ -0,0 +1,21 @@ +# 合并两个有序链表 +# 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 + +# Definition for singly-linked list. +# class ListNode: +# def __init__(self, x): +# self.val = x +# self.next = None + +class Solution: + def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: + if not l1: + return l2 + elif not l2: + return l1 + elif l1.val < l2.val: + l1.next = self.mergeTwoLists(l1.next,l2) + return l1 + else: + l2.next = self.mergeTwoLists(l1,l2.next) + return l2 \ No newline at end of file From 7633f6445b57aeb3cf46146e02ad2177d6e8548c Mon Sep 17 00:00:00 2001 From: Wang Yanjun Date: Sun, 16 Feb 2020 22:25:47 +0800 Subject: [PATCH 0226/1268] [FIX] correct file name --- .../{Leetcode_001.java => Leetcode_001_001.java} | 2 +- .../{Leetcode_021.java => Leetcode_021_001.java} | 2 +- .../{Leetcode_026.java => Leetcode_026_001.java} | 4 ++-- .../{Leetcode_189.java => Leetcode_189_001.java} | 4 ++-- .../{Leetcode_283.java => Leetcode_283_001.java} | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) rename Week_01/G20200343030001/{Leetcode_001.java => Leetcode_001_001.java} (96%) rename Week_01/G20200343030001/{Leetcode_021.java => Leetcode_021_001.java} (96%) rename Week_01/G20200343030001/{Leetcode_026.java => Leetcode_026_001.java} (88%) rename Week_01/G20200343030001/{Leetcode_189.java => Leetcode_189_001.java} (91%) rename Week_01/G20200343030001/{Leetcode_283.java => Leetcode_283_001.java} (87%) diff --git a/Week_01/G20200343030001/Leetcode_001.java b/Week_01/G20200343030001/Leetcode_001_001.java similarity index 96% rename from Week_01/G20200343030001/Leetcode_001.java rename to Week_01/G20200343030001/Leetcode_001_001.java index ff3a74a4..66d146c9 100644 --- a/Week_01/G20200343030001/Leetcode_001.java +++ b/Week_01/G20200343030001/Leetcode_001_001.java @@ -2,7 +2,7 @@ import java.util.HashMap; -public class Leetcode_001 { +public class Leetcode_001_001 { // 暴力法 public int[] twoSum(int[] nums, int target) { for (int i = 0; i < nums.length - 1; i++) { diff --git a/Week_01/G20200343030001/Leetcode_021.java b/Week_01/G20200343030001/Leetcode_021_001.java similarity index 96% rename from Week_01/G20200343030001/Leetcode_021.java rename to Week_01/G20200343030001/Leetcode_021_001.java index 88d18960..4dcb4728 100644 --- a/Week_01/G20200343030001/Leetcode_021.java +++ b/Week_01/G20200343030001/Leetcode_021_001.java @@ -1,6 +1,6 @@ package Week_01; -public class Leetcode_021 { +public class Leetcode_021_001 { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if (l1 == null) { return l2; diff --git a/Week_01/G20200343030001/Leetcode_026.java b/Week_01/G20200343030001/Leetcode_026_001.java similarity index 88% rename from Week_01/G20200343030001/Leetcode_026.java rename to Week_01/G20200343030001/Leetcode_026_001.java index d473a710..29bdff94 100644 --- a/Week_01/G20200343030001/Leetcode_026.java +++ b/Week_01/G20200343030001/Leetcode_026_001.java @@ -2,7 +2,7 @@ import java.util.Arrays; -public class Leetcode_026 { +public class Leetcode_026_001 { public int removeDuplicates(int[] nums) { if (nums == null || nums.length == 0) { return 0; @@ -23,7 +23,7 @@ public int removeDuplicates(int[] nums) { public static void main(String[] args) { RamdomArray ramdomArray = new RamdomArray(); - Leetcode_026 solution = new Leetcode_026(); + Leetcode_026_001 solution = new Leetcode_026_001(); for (int i = 0 ; i < 15; i++) { int[] array = ramdomArray.generate(i, 10); diff --git a/Week_01/G20200343030001/Leetcode_189.java b/Week_01/G20200343030001/Leetcode_189_001.java similarity index 91% rename from Week_01/G20200343030001/Leetcode_189.java rename to Week_01/G20200343030001/Leetcode_189_001.java index b38be8fa..b4fc8ef7 100644 --- a/Week_01/G20200343030001/Leetcode_189.java +++ b/Week_01/G20200343030001/Leetcode_189_001.java @@ -2,10 +2,10 @@ import java.util.Arrays; -public class Leetcode_189 { +public class Leetcode_189_001 { public static void main(String[] args) { RamdomArray ramdomArray = new RamdomArray(); - Leetcode_189 solution = new Leetcode_189(); + Leetcode_189_001 solution = new Leetcode_189_001(); for (int i = 0; i < 10; i++) { int[] arr = ramdomArray.generate(i, 100); diff --git a/Week_01/G20200343030001/Leetcode_283.java b/Week_01/G20200343030001/Leetcode_283_001.java similarity index 87% rename from Week_01/G20200343030001/Leetcode_283.java rename to Week_01/G20200343030001/Leetcode_283_001.java index c5b27470..3c0edf37 100644 --- a/Week_01/G20200343030001/Leetcode_283.java +++ b/Week_01/G20200343030001/Leetcode_283_001.java @@ -2,7 +2,7 @@ import java.util.Arrays; -public class Leetcode_283 { +public class Leetcode_283_001 { public void moveZeroes(int[] nums) { int j = 0; @@ -24,7 +24,7 @@ public static void main(String[] args) { System.out.println(Arrays.toString(arr)); - new Leetcode_283().moveZeroes(arr); + new Leetcode_283_001().moveZeroes(arr); System.out.println(Arrays.toString(arr)); } From b8b39f2a137d17f43837c361383d30219ab1e567 Mon Sep 17 00:00:00 2001 From: dailybird Date: Sun, 16 Feb 2020 22:26:46 +0800 Subject: [PATCH 0227/1268] 501-Week 01 --- Week_01/G20200343030501/LeetCode_1_501.go | 20 +++++++++++++++++ Week_01/G20200343030501/LeetCode_66_501.go | 25 ++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 Week_01/G20200343030501/LeetCode_1_501.go create mode 100644 Week_01/G20200343030501/LeetCode_66_501.go diff --git a/Week_01/G20200343030501/LeetCode_1_501.go b/Week_01/G20200343030501/LeetCode_1_501.go new file mode 100644 index 00000000..308b892e --- /dev/null +++ b/Week_01/G20200343030501/LeetCode_1_501.go @@ -0,0 +1,20 @@ +package G20200343030501 + +func twoSum(nums []int, target int) []int { + indexMap := make(map[int]int) + for index, value := range nums { + completion := target - value + completionIndex, exist := indexMap[completion] + if exist { + if index > completionIndex { + return []int{completionIndex, index} + } else { + return []int{index, completionIndex} + } + } else { + indexMap[value] = index + continue + } + } + return []int{0, 0} +} \ No newline at end of file diff --git a/Week_01/G20200343030501/LeetCode_66_501.go b/Week_01/G20200343030501/LeetCode_66_501.go new file mode 100644 index 00000000..62779e4b --- /dev/null +++ b/Week_01/G20200343030501/LeetCode_66_501.go @@ -0,0 +1,25 @@ +package G20200343030501 + +func plusOne(digits []int) []int { + len := len(digits) + addEnd := 1 + i := len - 1 + for ; i >= 0; i-- { + currentNum := digits[i] + if currentNum + addEnd == 10 { + addEnd = 1 + digits[i] = 0 + } else { + digits[i] += 1 + addEnd = 0 + break + } + } + var result []int + if i == -1 && addEnd == 1 { + result = append([]int{1}, digits...) + } else { + result = digits + } + return result +} From a8ddc382199e31190d3ed04c6fb53db974f5f42e Mon Sep 17 00:00:00 2001 From: Xiangyida Date: Sun, 16 Feb 2020 22:33:13 +0800 Subject: [PATCH 0228/1268] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E5=91=A8=201.=20Tw?= =?UTF-8?q?oSum:=20=E5=8F=8C=E6=8C=87=E9=92=88=E9=81=8D=E5=8E=86-->O(n^2);?= =?UTF-8?q?=20HashMap-->O(n);=202.=20MoveZeros:=20=E4=B8=A4=E6=AC=A1?= =?UTF-8?q?=E9=81=8D=E5=8E=86=20-->O(2n);=20=E4=BD=BF=E7=94=A8=E5=93=A8?= =?UTF-8?q?=E5=85=B5=E8=8A=82=E7=82=B9=EF=BC=8C=E4=BA=A4=E6=8D=A2=E5=85=83?= =?UTF-8?q?=E7=B4=A0=E4=BD=8D=E7=BD=AE-->O(n);?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030541/MoveZeros.java | 28 +++++++++++++++++++ Week_01/G20200343030541/TwoSum.java | 37 ++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 Week_01/G20200343030541/MoveZeros.java create mode 100644 Week_01/G20200343030541/TwoSum.java diff --git a/Week_01/G20200343030541/MoveZeros.java b/Week_01/G20200343030541/MoveZeros.java new file mode 100644 index 00000000..335b13c1 --- /dev/null +++ b/Week_01/G20200343030541/MoveZeros.java @@ -0,0 +1,28 @@ +public class MoveZeros { + // 两次遍历解法 + public void solution1(int[] nums) { + int visited = 0; + // 移动非零元素 + for (int i =0; i < nums.length; ++i) { + if(nums[i] != 0) { + nums[visited++] = nums[i]; + } + } + // 将剩余空间填充为0 + for (int i=visited; i < nums.length; ++i) { + nums[i] = 0; + } + } + + // 一次遍历 + public void solution2(int[] nums) { + int pivot = 0; + for (int i=0; i < nums.length; i++) { + if (nums[i] != 0) { + int temp = nums[i]; + nums[i] = nums[pivot]; + nums[pivot++] = temp; + } + } + } +} diff --git a/Week_01/G20200343030541/TwoSum.java b/Week_01/G20200343030541/TwoSum.java new file mode 100644 index 00000000..0d26e6fb --- /dev/null +++ b/Week_01/G20200343030541/TwoSum.java @@ -0,0 +1,37 @@ +import java.util.HashMap; +import java.util.Map; + +public class TwoSum { + public int[] twoSumSolution1(int[] nums, int target) { + for (int i = 0; i< nums.length; i++) { + for (int j = i + 1; j < nums.length; j++) { + if ( nums[i] + nums[j] == target) { + return new int[] {i, j}; + } + } + } + throw new IllegalArgumentException("No two sum solution"); + } + + public int[] twoSumSolution2(int[] nums, int target) { + Map map = new HashMap<>(); + for(int i=0; i < nums.length; i++) { + int remaining = target - nums[i]; + if (map.containsKey(remaining)) { + return new int[] {map.get(remaining), i}; + } + map.put(nums[i], i); + } + throw new IllegalArgumentException("No two sum solution"); + } + + public static void main(String[] args) { + TwoSum test = new TwoSum(); + int[] nums = {1,2,3,4,5,6}; + int target = 3; + int[] result = test.twoSumSolution2(nums, target); + for (int aResult : result) { + System.out.println(aResult); + } + } +} From 9bd859e790742ff89332f29b51888c943664d871 Mon Sep 17 00:00:00 2001 From: onceabu Date: Sun, 16 Feb 2020 22:35:30 +0800 Subject: [PATCH 0229/1268] Add files via upload --- Week_01/G20200343030573/LeetCode_26_573.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Week_01/G20200343030573/LeetCode_26_573.py diff --git a/Week_01/G20200343030573/LeetCode_26_573.py b/Week_01/G20200343030573/LeetCode_26_573.py new file mode 100644 index 00000000..780cb080 --- /dev/null +++ b/Week_01/G20200343030573/LeetCode_26_573.py @@ -0,0 +1,12 @@ +class Solution(object): + def removeDuplicates(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + x = 1 + for i in range(len(nums) - 1): + if (nums[i] != nums[i + 1]): + nums[x] = nums[i + 1] + x += 1 + return (x) From 004c75b2f4b6edf5067357e44ca22c2391510cbd Mon Sep 17 00:00:00 2001 From: huangshazsw Date: Sun, 16 Feb 2020 22:36:28 +0800 Subject: [PATCH 0230/1268] Add files via upload week00-633-leetcode --- Week_00/G20200343030633/leetcode_189.py | 43 +++++++++++++ Week_00/G20200343030633/leetcode_21.py | 86 +++++++++++++++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 Week_00/G20200343030633/leetcode_189.py create mode 100644 Week_00/G20200343030633/leetcode_21.py diff --git a/Week_00/G20200343030633/leetcode_189.py b/Week_00/G20200343030633/leetcode_189.py new file mode 100644 index 00000000..4c7dd9cc --- /dev/null +++ b/Week_00/G20200343030633/leetcode_189.py @@ -0,0 +1,43 @@ +# 暴力 loop K ,每次把末尾换到头位 +#不知道为啥leetcode 执行的时候可以,提交后就超出限制 +def baolirotate(nums, k): + length = len(nums) + for _ in range(k): + previous = nums[length - 1] + for j in range(length): + temp = nums[j] + nums[j] = previous + previous = temp + + +# 环状替换 +def rotate(nums, n): + length = len(nums) + k = n % length + count = 0 + start = 0 + while count < length: + current = start + prev = nums[start] + print('count:', count) + while True: + next = (current + k) % length + temp = nums[next] + nums[next] = prev + prev = temp + current = next + count += 1 + if start == current: + break + start += 1 + + + +a = [1, 2, 3, 4, 5, 6] +k = 2 +print('原始:', a) + +# rotate(a, k) +baolirotate(a, k) + +print('移动', k, '位后:', a) diff --git a/Week_00/G20200343030633/leetcode_21.py b/Week_00/G20200343030633/leetcode_21.py new file mode 100644 index 00000000..a0504978 --- /dev/null +++ b/Week_00/G20200343030633/leetcode_21.py @@ -0,0 +1,86 @@ +# 数组暴力算法: + +# def mergeTwoLists(l1, l2): +# k = 0 +# for i in range(len(l1)): +# for j in range(k, len(l2)): +# if l2[j] > l1[i]: +# l2.insert(j, l1[i]) +# k += 1 +# break +# if j == (len(l2) - 1): +# l2.append(l1[i]) +# return l2 +# +# +# l1 = [1, 2, 3, 4] +# l2 = [1, 3, 4, 5] +# +# l3 = mergeTwoLists(l1, l2) +# +# print('reuslt:', l3) + + +# 链表暴力:递归 +class ListNode(object): + def __init__(self, x): + self.val = x + self.next = None + + def deepcopy(self): + nl = ListNode(self.val) + nl.next = self.next + return nl + + +list1 = ListNode(1) +list1.next = ListNode(2) +list1.next.next = ListNode(4) + +list2 = ListNode(1) +list2.next = ListNode(3) +list2.next.next = ListNode(4) + + +class Solution: + # 递归 + def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: + if l1 is None: + return l2 + elif l2 is None: + return l1 + elif l1.val < l2.val: + l1.next = self.mergeTwoLists(l1.next, l2) + return l1 + else: + l2.next = self.mergeTwoLists(l1, l2.next) + return l2 + + # 迭代 + def mergeTwoLists2(self, l1: ListNode, l2: ListNode) -> ListNode: + prehead = ListNode(-1) + + prev = prehead + while l1 and l2: + if l1.val <= l2.val: + prev.next = l1 + l1 = l1.next + else: + prev.next = l2 + l2 = l2.next + prev = prev.next + + # exactly one of l1 and l2 can be non-null at this point, so connect + # the non-null list to the end of the merged list. + prev.next = l1 if l1 is not None else l2 + + return prehead.next + + +s = Solution() +l = s.mergeTwoLists2(list1, list2) + +while l.next is not None: + print(l.val) + l = l.next +print(l.val) From fc2997f96abc46e3bda9fc7f80cc60ddb830d229 Mon Sep 17 00:00:00 2001 From: XuNan <41865662@qq.com> Date: Sun, 16 Feb 2020 22:37:10 +0800 Subject: [PATCH 0231/1268] 439-week 01 --- .../G20200343030439/LeetCode_189_439.java | 0 .../G20200343030439/LeetCode_1_439.java | 25 +--------- .../G20200343030439/LeetCode_21_439.java | 0 .../G20200343030439/LeetCode_26_439.java | 0 .../G20200343030439/LeetCode_283_439.java | 0 .../G20200343030439/LeetCode_641_439.java | 47 ------------------- .../G20200343030439/LeetCode_66_439.java | 0 .../G20200343030439/LeetCode_88_439.java | 0 8 files changed, 1 insertion(+), 71 deletions(-) rename "Week_01/G20200343030439/189.\346\227\213\350\275\254\346\225\260\347\273\204.java" => Week_01/G20200343030439/LeetCode_189_439.java (100%) rename "Week_01/G20200343030439/1.\344\270\244\346\225\260\344\271\213\345\222\214.java" => Week_01/G20200343030439/LeetCode_1_439.java (54%) rename "Week_01/G20200343030439/21.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\351\223\276\350\241\250.java" => Week_01/G20200343030439/LeetCode_21_439.java (100%) rename "Week_01/G20200343030439/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.java" => Week_01/G20200343030439/LeetCode_26_439.java (100%) rename "Week_01/G20200343030439/283.\347\247\273\345\212\250\351\233\266.java" => Week_01/G20200343030439/LeetCode_283_439.java (100%) rename "Week_01/G20200343030439/641.\350\256\276\350\256\241\345\276\252\347\216\257\345\217\214\347\253\257\351\230\237\345\210\227.java" => Week_01/G20200343030439/LeetCode_641_439.java (65%) rename "Week_01/G20200343030439/66.\345\212\240\344\270\200.java" => Week_01/G20200343030439/LeetCode_66_439.java (100%) rename "Week_01/G20200343030439/88.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\346\225\260\347\273\204.java" => Week_01/G20200343030439/LeetCode_88_439.java (100%) diff --git "a/Week_01/G20200343030439/189.\346\227\213\350\275\254\346\225\260\347\273\204.java" b/Week_01/G20200343030439/LeetCode_189_439.java similarity index 100% rename from "Week_01/G20200343030439/189.\346\227\213\350\275\254\346\225\260\347\273\204.java" rename to Week_01/G20200343030439/LeetCode_189_439.java diff --git "a/Week_01/G20200343030439/1.\344\270\244\346\225\260\344\271\213\345\222\214.java" b/Week_01/G20200343030439/LeetCode_1_439.java similarity index 54% rename from "Week_01/G20200343030439/1.\344\270\244\346\225\260\344\271\213\345\222\214.java" rename to Week_01/G20200343030439/LeetCode_1_439.java index ec00aef6..d3653d6f 100644 --- "a/Week_01/G20200343030439/1.\344\270\244\346\225\260\344\271\213\345\222\214.java" +++ b/Week_01/G20200343030439/LeetCode_1_439.java @@ -1,30 +1,7 @@ /* * @lc app=leetcode.cn id=1 lang=java * - * [1] 两数之和 - * - * https://leetcode-cn.com/problems/two-sum/description/ - * - * algorithms - * Easy (47.26%) - * Likes: 7328 - * Dislikes: 0 - * Total Accepted: 762.6K - * Total Submissions: 1.6M - * Testcase Example: '[2,7,11,15]\n9' - * - * 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 - * - * 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 - * - * 示例: - * - * 给定 nums = [2, 7, 11, 15], target = 9 - * - * 因为 nums[0] + nums[1] = 2 + 7 = 9 - * 所以返回 [0, 1] - * - * + * [1] 两数之和 */ // @lc code=start diff --git "a/Week_01/G20200343030439/21.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\351\223\276\350\241\250.java" b/Week_01/G20200343030439/LeetCode_21_439.java similarity index 100% rename from "Week_01/G20200343030439/21.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\351\223\276\350\241\250.java" rename to Week_01/G20200343030439/LeetCode_21_439.java diff --git "a/Week_01/G20200343030439/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.java" b/Week_01/G20200343030439/LeetCode_26_439.java similarity index 100% rename from "Week_01/G20200343030439/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.java" rename to Week_01/G20200343030439/LeetCode_26_439.java diff --git "a/Week_01/G20200343030439/283.\347\247\273\345\212\250\351\233\266.java" b/Week_01/G20200343030439/LeetCode_283_439.java similarity index 100% rename from "Week_01/G20200343030439/283.\347\247\273\345\212\250\351\233\266.java" rename to Week_01/G20200343030439/LeetCode_283_439.java diff --git "a/Week_01/G20200343030439/641.\350\256\276\350\256\241\345\276\252\347\216\257\345\217\214\347\253\257\351\230\237\345\210\227.java" b/Week_01/G20200343030439/LeetCode_641_439.java similarity index 65% rename from "Week_01/G20200343030439/641.\350\256\276\350\256\241\345\276\252\347\216\257\345\217\214\347\253\257\351\230\237\345\210\227.java" rename to Week_01/G20200343030439/LeetCode_641_439.java index d7c9d929..97311451 100644 --- "a/Week_01/G20200343030439/641.\350\256\276\350\256\241\345\276\252\347\216\257\345\217\214\347\253\257\351\230\237\345\210\227.java" +++ b/Week_01/G20200343030439/LeetCode_641_439.java @@ -4,53 +4,6 @@ * [641] 设计循环双端队列 * * https://leetcode-cn.com/problems/design-circular-deque/description/ - * - * algorithms - * Medium (48.50%) - * Likes: 23 - * Dislikes: 0 - * Total Accepted: 4.5K - * Total Submissions: 9.2K - * Testcase Example: '["MyCircularDeque","insertLast","insertLast","insertFront","insertFront","getRear","isFull","deleteLast","insertFront","getFront"]\n[[3],[1],[2],[3],[4],[],[],[],[4],[]]' - * - * 设计实现双端队列。 - * 你的实现需要支持以下操作: - * - * - * MyCircularDeque(k):构造函数,双端队列的大小为k。 - * insertFront():将一个元素添加到双端队列头部。 如果操作成功返回 true。 - * insertLast():将一个元素添加到双端队列尾部。如果操作成功返回 true。 - * deleteFront():从双端队列头部删除一个元素。 如果操作成功返回 true。 - * deleteLast():从双端队列尾部删除一个元素。如果操作成功返回 true。 - * getFront():从双端队列头部获得一个元素。如果双端队列为空,返回 -1。 - * getRear():获得双端队列的最后一个元素。 如果双端队列为空,返回 -1。 - * isEmpty():检查双端队列是否为空。 - * isFull():检查双端队列是否满了。 - * - * - * 示例: - * - * MyCircularDeque circularDeque = new MycircularDeque(3); // 设置容量大小为3 - * circularDeque.insertLast(1); // 返回 true - * circularDeque.insertLast(2); // 返回 true - * circularDeque.insertFront(3); // 返回 true - * circularDeque.insertFront(4); // 已经满了,返回 false - * circularDeque.getRear(); // 返回 2 - * circularDeque.isFull(); // 返回 true - * circularDeque.deleteLast(); // 返回 true - * circularDeque.insertFront(4); // 返回 true - * circularDeque.getFront(); // 返回 4 - * - * - * - * - * 提示: - * - * - * 所有值的范围为 [1, 1000] - * 操作次数的范围为 [1, 1000] - * 请不要使用内置的双端队列库。 - * * */ diff --git "a/Week_01/G20200343030439/66.\345\212\240\344\270\200.java" b/Week_01/G20200343030439/LeetCode_66_439.java similarity index 100% rename from "Week_01/G20200343030439/66.\345\212\240\344\270\200.java" rename to Week_01/G20200343030439/LeetCode_66_439.java diff --git "a/Week_01/G20200343030439/88.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\346\225\260\347\273\204.java" b/Week_01/G20200343030439/LeetCode_88_439.java similarity index 100% rename from "Week_01/G20200343030439/88.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\346\225\260\347\273\204.java" rename to Week_01/G20200343030439/LeetCode_88_439.java From cac002e2be8c52f81fbd17736766119c72b2580c Mon Sep 17 00:00:00 2001 From: XuNan <41865662@qq.com> Date: Sun, 16 Feb 2020 22:42:00 +0800 Subject: [PATCH 0232/1268] 439-week 01 --- Week_01/G20200343030439/LeetCode_189_439.java | 40 +------------- Week_01/G20200343030439/LeetCode_1_439.java | 3 ++ Week_01/G20200343030439/LeetCode_21_439.java | 21 +------- Week_01/G20200343030439/LeetCode_26_439.java | 52 +------------------ Week_01/G20200343030439/LeetCode_283_439.java | 27 +--------- Week_01/G20200343030439/LeetCode_66_439.java | 33 +----------- Week_01/G20200343030439/LeetCode_88_439.java | 30 +---------- 7 files changed, 9 insertions(+), 197 deletions(-) diff --git a/Week_01/G20200343030439/LeetCode_189_439.java b/Week_01/G20200343030439/LeetCode_189_439.java index cf88f6f7..9132c804 100644 --- a/Week_01/G20200343030439/LeetCode_189_439.java +++ b/Week_01/G20200343030439/LeetCode_189_439.java @@ -1,45 +1,7 @@ /* * @lc app=leetcode.cn id=189 lang=java * - * [189] 旋转数组 - * - * https://leetcode-cn.com/problems/rotate-array/description/ - * - * algorithms - * Easy (39.94%) - * Likes: 483 - * Dislikes: 0 - * Total Accepted: 96.6K - * Total Submissions: 239.1K - * Testcase Example: '[1,2,3,4,5,6,7]\n3' - * - * 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 - * - * 示例 1: - * - * 输入: [1,2,3,4,5,6,7] 和 k = 3 - * 输出: [5,6,7,1,2,3,4] - * 解释: - * 向右旋转 1 步: [7,1,2,3,4,5,6] - * 向右旋转 2 步: [6,7,1,2,3,4,5] - * 向右旋转 3 步: [5,6,7,1,2,3,4] - * - * - * 示例 2: - * - * 输入: [-1,-100,3,99] 和 k = 2 - * 输出: [3,99,-1,-100] - * 解释: - * 向右旋转 1 步: [99,-1,-100,3] - * 向右旋转 2 步: [3,99,-1,-100] - * - * 说明: - * - * - * 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。 - * 要求使用空间复杂度为 O(1) 的 原地 算法。 - * - * + * [189] 旋转数组 */ // @lc code=start diff --git a/Week_01/G20200343030439/LeetCode_1_439.java b/Week_01/G20200343030439/LeetCode_1_439.java index d3653d6f..031892c2 100644 --- a/Week_01/G20200343030439/LeetCode_1_439.java +++ b/Week_01/G20200343030439/LeetCode_1_439.java @@ -1,3 +1,6 @@ +import java.util.HashMap; +import java.util.Map; + /* * @lc app=leetcode.cn id=1 lang=java * diff --git a/Week_01/G20200343030439/LeetCode_21_439.java b/Week_01/G20200343030439/LeetCode_21_439.java index 3dfdae23..b3566d42 100644 --- a/Week_01/G20200343030439/LeetCode_21_439.java +++ b/Week_01/G20200343030439/LeetCode_21_439.java @@ -1,26 +1,7 @@ /* * @lc app=leetcode.cn id=21 lang=java * - * [21] 合并两个有序链表 - * - * https://leetcode-cn.com/problems/merge-two-sorted-lists/description/ - * - * algorithms - * Easy (58.94%) - * Likes: 852 - * Dislikes: 0 - * Total Accepted: 181.4K - * Total Submissions: 304.3K - * Testcase Example: '[1,2,4]\n[1,3,4]' - * - * 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。  - * - * 示例: - * - * 输入:1->2->4, 1->3->4 - * 输出:1->1->2->3->4->4 - * - * + * [21] 合并两个有序链表 */ // @lc code=start diff --git a/Week_01/G20200343030439/LeetCode_26_439.java b/Week_01/G20200343030439/LeetCode_26_439.java index 0d4c21d9..e515793b 100644 --- a/Week_01/G20200343030439/LeetCode_26_439.java +++ b/Week_01/G20200343030439/LeetCode_26_439.java @@ -1,57 +1,7 @@ /* * @lc app=leetcode.cn id=26 lang=java * - * [26] 删除排序数组中的重复项 - * - * https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/description/ - * - * algorithms - * Easy (47.86%) - * Likes: 1324 - * Dislikes: 0 - * Total Accepted: 244K - * Total Submissions: 503.6K - * Testcase Example: '[1,1,2]' - * - * 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 - * - * 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 - * - * 示例 1: - * - * 给定数组 nums = [1,1,2], - * - * 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 - * - * 你不需要考虑数组中超出新长度后面的元素。 - * - * 示例 2: - * - * 给定 nums = [0,0,1,1,1,2,2,3,3,4], - * - * 函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。 - * - * 你不需要考虑数组中超出新长度后面的元素。 - * - * - * 说明: - * - * 为什么返回数值是整数,但输出的答案是数组呢? - * - * 请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。 - * - * 你可以想象内部操作如下: - * - * // nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝 - * int len = removeDuplicates(nums); - * - * // 在函数里修改输入数组对于调用者是可见的。 - * // 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。 - * for (int i = 0; i < len; i++) { - * print(nums[i]); - * } - * - * + * [26] 删除排序数组中的重复项 */ // @lc code=start diff --git a/Week_01/G20200343030439/LeetCode_283_439.java b/Week_01/G20200343030439/LeetCode_283_439.java index 844ca200..d6bb70ac 100644 --- a/Week_01/G20200343030439/LeetCode_283_439.java +++ b/Week_01/G20200343030439/LeetCode_283_439.java @@ -1,32 +1,7 @@ /* * @lc app=leetcode.cn id=283 lang=java * - * [283] 移动零 - * - * https://leetcode-cn.com/problems/move-zeroes/description/ - * - * algorithms - * Easy (58.54%) - * Likes: 496 - * Dislikes: 0 - * Total Accepted: 107K - * Total Submissions: 180.4K - * Testcase Example: '[0,1,0,3,12]' - * - * 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 - * - * 示例: - * - * 输入: [0,1,0,3,12] - * 输出: [1,3,12,0,0] - * - * 说明: - * - * - * 必须在原数组上操作,不能拷贝额外的数组。 - * 尽量减少操作次数。 - * - * + * [283] 移动零 */ // @lc code=start diff --git a/Week_01/G20200343030439/LeetCode_66_439.java b/Week_01/G20200343030439/LeetCode_66_439.java index f967b081..bda08c37 100644 --- a/Week_01/G20200343030439/LeetCode_66_439.java +++ b/Week_01/G20200343030439/LeetCode_66_439.java @@ -1,38 +1,7 @@ /* * @lc app=leetcode.cn id=66 lang=java * - * [66] 加一 - * - * https://leetcode-cn.com/problems/plus-one/description/ - * - * algorithms - * Easy (42.34%) - * Likes: 425 - * Dislikes: 0 - * Total Accepted: 118K - * Total Submissions: 274.7K - * Testcase Example: '[1,2,3]' - * - * 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 - * - * 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 - * - * 你可以假设除了整数 0 之外,这个整数不会以零开头。 - * - * 示例 1: - * - * 输入: [1,2,3] - * 输出: [1,2,4] - * 解释: 输入数组表示数字 123。 - * - * - * 示例 2: - * - * 输入: [4,3,2,1] - * 输出: [4,3,2,2] - * 解释: 输入数组表示数字 4321。 - * - * + * [66] 加一 */ // @lc code=start diff --git a/Week_01/G20200343030439/LeetCode_88_439.java b/Week_01/G20200343030439/LeetCode_88_439.java index f84df2b9..d54e413c 100644 --- a/Week_01/G20200343030439/LeetCode_88_439.java +++ b/Week_01/G20200343030439/LeetCode_88_439.java @@ -3,35 +3,7 @@ /* * @lc app=leetcode.cn id=88 lang=java * - * [88] 合并两个有序数组 - * - * https://leetcode-cn.com/problems/merge-sorted-array/description/ - * - * algorithms - * Easy (46.05%) - * Likes: 417 - * Dislikes: 0 - * Total Accepted: 108.4K - * Total Submissions: 232.6K - * Testcase Example: '[1,2,3,0,0,0]\n3\n[2,5,6]\n3' - * - * 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 - * - * 说明: - * - * - * 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 - * 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 - * - * - * 示例: - * - * 输入: - * nums1 = [1,2,3,0,0,0], m = 3 - * nums2 = [2,5,6], n = 3 - * - * 输出: [1,2,2,3,5,6] - * + * [88] 合并两个有序数组 */ // @lc code=start From f6706087fa9e80a26b57d8eeb73dee8699e7bb4c Mon Sep 17 00:00:00 2001 From: zhouxu Date: Sun, 16 Feb 2020 22:42:31 +0800 Subject: [PATCH 0233/1268] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E5=91=A8=E5=AD=A6?= =?UTF-8?q?=E4=B9=A0=E6=80=BB=E7=BB=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030589/NOTE.md | 4 +++- Week_01/G20200343030589/week01.jpg | Bin 0 -> 182701 bytes 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 Week_01/G20200343030589/week01.jpg diff --git a/Week_01/G20200343030589/NOTE.md b/Week_01/G20200343030589/NOTE.md index 50de3041..95200073 100644 --- a/Week_01/G20200343030589/NOTE.md +++ b/Week_01/G20200343030589/NOTE.md @@ -1 +1,3 @@ -学习笔记 \ No newline at end of file +学习笔记 +第一周的学习笔记总结为脑图如下: +![](week01.jpg) \ No newline at end of file diff --git a/Week_01/G20200343030589/week01.jpg b/Week_01/G20200343030589/week01.jpg new file mode 100644 index 0000000000000000000000000000000000000000..398d72638a2fba9850a5b970d20748b0320cf76d GIT binary patch literal 182701 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

iqUWvPQ-44g zd|=OuyRX{H#FsAUymc>lArP^7L3%mQ_g7*46`_Ux&`w=V7cNaP+|f=oo@RX@?=+UA zKsGG|dLYRKmi22-7qCX@3g*7!hf&phf>Tu58ot@ma1^a=>o`6U~BjG zl>=aE$sUA+af5{#nECbb%89=PAzezt7lAz9a?HFZyY~b3WxKZ*=sCPu+1E9-M_w|A zl%*AI!v(%dYsjN3-43fEcTq+F%~Y#)sh@o(*;MT@h(~DVldfd=FWN{F1i-zsrnbpq zA*r2g)v(8|>y`1cht=|TC+3V$YLR_kOILb>4iu8v)sH=t!tU-AWd7!kZ<9rj^SLQ^ zaN)gke5%~}l3XP7jNZ>$I_oT?h0{$33+XGi>N1Dp2l7c&@Znsq)AkKGE$NO@y3|K2 zI}f$!nJDjaRj!O>jWYsF6*t>!6HY`hkX{4}*_h~wgh|h0*xXJCg-QiK`NB6!;%oV? zU871uXM7a4KA6b*1c zsQhT#e3j}!+V2&Pd-H&H?f*)E?f=ff`5$*>O49TTapKmJ{rJZjiLG}~vkLjz8qK@j z#a2(!LTAEx>0Sm$MqKlR1EHa2kSAjgy1ChvyTFMZ;>4ixRxaZ!CB`;JkvDEB9qE4q z@2i7@+W}#Y2w}(}3$h4{7F34H-*!y(-SlN0oC$4vBG=U; zDXRZ?-~SYN{o}a&<9hi^==b0KIta}#12UNb3&al#2k+LH%afkT5wdE!_xOwxd-hb- z^=VW%g8})=UlN%A!pDEEBkgZLq|F9!v3Hik=z-NKGC_GjDO>-OuPak*V&XO=(36Gg z%zox8ffw8o4GLj|T*+Ut{e?JF#JPF0644z<$8@t8uvqK}=T3N%cyk)t5c4Gfh~J=F ze586=?t)`$qg>b)=Wj$T#A|;6DEMCdOT|Vk+r&PY^)9Mwh_AP^7Cu;3Nl}zDbbBB6 ziK_Ya1=AMM_%?eO6 ztVv#0*^n{uV5eDhLymyC5Z$_DNk`lgx^yKq{;dPAgU87k`zs03j1N*~`Bmo;?p0v- zu#KW285PZ*=HH>5K&2Ee(~Z;b(iv3dbM)9g1t^!4nc;!)mIlNai?Kbc3V28&Md*hbxMy@fUP+U+-OEGe?Oc^#<@NWM zUaymk+vlZK6E&TlmUwxyXg`8~M&?u0;S&@tqHqg5#&1lgUsD0k^dg^IYjU@=;KwPZ z%P0R{iRoLB&jFCDZ=$_3P1m$sd)7EQq~H^fdT$_-0?9~b%$>6&8e;ZYeg?NF#~lu8 z&He#x*Dgs#y^}ZM<#lqMhdwTlT!st6XV>ak`w{1Ch)Z3FPyJtti|vej&-j8l++Svh zm5lpbTez&x@06S^`Uoomr1=bzq+yrwvAswJPhgc(fE&h+$62=zbXH5Z`ozrIgjF!V zF`h_Y-9hWd-e z8?==fn&nz9X;koz^HwWQTr!zAzO;FAbi1x?M(Rs`hz8s6jfynqYqv)j`F2kP(W<<$E~3YiWT$Mx}~qQ=?G3s{I#I6dp0p#ve+sl_p)E4dCTpU zYeB&`yam>x-+|Gsg9~Wp9QFD_GqB(Uzt?4Q^|aC=chqkMavy!dj<5~N-0q3`Bp^fk zZRIBz)WPV!MgybOP{@sH*+f;?j#hXEw~v!y9>Jwwn2y-}yF}0G4lgDYi*CHO_E2(% zF%oM_VctYj^jf^NbsWEWqeH`zZ^tA-c4fszMI$D`%xNnlEF=N9|L?y(f>;GCiIoHc zVonXr85ffQ1PO}at2U4NgUzDsy=D{N@18s9uM)|*_!{K>71ot{&54QCl{gB7lgXoH z^4={iY`0`5kS#DvE`?fO{gzZ$5AO9uW_^Z+bH6xF7C%RmUy^h$3#A3q#T#J;cQ26i zeqMvA;X1pTtNl}>3S@A5sLEn!>K#93A4;BJ-Oz0jh1#?%z0lYgUQGKSdT!T?q(!#C zm3Ah#(UCN4f2b)=qps;+$Lr-V$XVYZ95AOxJ#REvc%jE4Cr7WigQ%P9N#y~)AgdMQ z6Ti5#3|FNH2Kp=+8cas`=NpUGNgV#MvT~i%eY1K z39Ozcg8MtJbWZLm5dCRMw@*7wveb_nO)tp4d3dYqm5MOC3Np3R1HnR>3+TkXN1zq) z*-`s#YjL?}f_>%>6W?p(8@BxcU9vh_(Ii@It|m6*i7;KaM*`^^m9{wGSssc6&IhHv zYWw7;VW?~I;%V8hkm8b&PxR7XlLvz&+*Cl|+h{=Ag-o$N>W2``A%LThm-w;}7YD`a z;yL#hHRR=7MokW26GC%dlQ68u8=CP;uY8K+r-0CdpV&}TpHD0pFblhl#|v>J_EKnP z3Jlms?>5y2?KNB$8o1mxTq9=t>GoSaRSk>px^NT945I!igpC4rv*$92DNw;p6!zN- zAR2$>UYNHm&wk&tWbYC{1!MxHm~ftSKal**2bA0YOQ>f5yxjgDc}@5CIP`yqVX)%? z@ec^^i&=|=ivX(;J6xdQgrcD1U`4fo)0}H_#3JY9lL&9V8BtivNbjDI*7k5&X4gqw z!f`RdiCBS`$8{T+VC0?Spj=>k_MK4wwQv}u5$ znRFFs??48?kxG#B8rEMMb}7YGH)H6@^`skF#m_xiM>D<*#hCbxu?YVU_TD?JskUA7 z20@T6y%(t}RXT!+NCy!t^b!^6gd!k80-;E60t$*k6r@Rs^eVk0AibA_Vxc74IJA*lOkYmRN!10P#hajyTu!l|0 z!Zt3@bsYI`zb~$-_Yd%r7yB3(YExQuhg#}m2ffAmEVcC>EUFoLQri@egRtqg2w}rZ zM@8azgCq}h$Net^G33pD_`r2Kba%*dZhJ?vF>!hwebM$fJPxqI?QEHpPM;2;xtk@B zka9Z(YrwH=!G)RklZMEd0AijQ3Xj3x-zjN2um-VRu11N5Ue8~xggyuAhc>x!DHr*2Lk#2AcWSST1txI2O z!4ojkW2bSPr+55er`qqBYA;2peu=+iYNu&By-L+4B&ZdJeus%|!LGo{3r^T%NnpGh zDOQi9;ZFQJTE|6-t$xq0g%%3$og{Z03;?x?pe#{`?l;+`s~GT4_x5ixCZ3Z-==b-i zH3>5?2hH#g?J1CaDxh@CgBrQs97%kWP0@cyo;$U)g5q4-WfjVRfh0N!3t;kE| zY5Jela(K>585+z;6%yVo{->z>e?VpYaVU+PPe=?M&1#rf)L;1hUE!tch}BH76s-F5 zitu|Y+;^VxJ-s(U5d8DO{^`ZZf=jPee;z%z{m{zv{Ioy4e1XvN0d<}+3@nR(e?ZB9 zIyI)$b1y79QGfqVU@EHy4F@d8;7Y;DCRay~E`E!|TlhULbo7v;e01LXI;4smgs1;) z;Pl^X%KT^j-hVHGKBRNidFAU4=&c3SzQ<%YRMh+o_f%LFTbzak5e}{B@}r*?ay4nb`0k!N6$FOQ<6*1OR-?%7 z@tdiPe1ni55ll^@)J0u^86;Mb&JfWmKti@1D$of>YGI=y%%a4PN5KHiJS1g*~EN3)Iz?pHOXuIi%CI~{Jb zaK)=WxnLj>@TGV^V~ZV|%nXKx2u7paWFwD)mZ0HMU^oRwyxTiSE;hAY_dJGT=##f| zB%*h*{u|YjCr*#)_$gQm8-}BQEro(Q&Gc#(!)6w{sN(7RuE@zGBei+t+wc}f;zt5{_qv4_WtKnVy)bSzj|HUE0pu}j4{Jj zXE@F6St}lK9pvS=aK4j9kW7(Mi8qNx$|I?Y$?P1mv6IdN zfOwqj7NSb19r^GgfeBRXvD<`NjSB=*9* z`7GWk%R$kBYHQhQ=h3x+`F<6|E#X zTSkfWyrx+A+*Hz>$9-N!u(KulM`VaHNgX(g!w9%RIZtItJd;o?KajV)6xS?i2XW;( zNj)9OTv#n{wAV}=dh+%@i{|n+tfXpZPGG0)tMcn(ZIUX1I;{GQ2Mw6(kzqdijY6pJ z?8L{q9`4J!x_aWFkma0aQ7G5|nf|FzvC>mY84;y7s$|+9eD3(ddfK1L5oofzm)_nT zR2=kUYbAAk3K3;~-TsPD$L2%%#!#{q%u}H8PtW;N37exO7o}(IJJ>SRMSv0Uf2p3- zC;j?UQONz%OOX>Zrc0W~h)b0{#H4H|kX+rf*!|SUych@lQ=R!AD8V_+;Itz;F{B&) z%d}-T?IY;@{YPNiI|`!2Z?epNa5m`B1wDp?(uy|0PfRhtytn|b6^ZyJH6P+<30vR| zj(0uhEw#!O4dTTZmlh@u#W^fo zXyz7`C6Oh-l+cq>gir z8|SR!=dCYS`V{e+B3c#PT#BK+@9tB8&MYJqumt+pS{R!c`~z^M!XR&bb}_bK(SBxj zq1E}=HoZuxm*e}|lmkcq${I!Xi_&o>R8I57&qJ)N5UrCMG0UnW0?m7qYeb0;?B+~lbM0L7Z6r}&p5HtyArP3-5_*;ty- z_Pe)t&N=RCi|J9P0aLvhu$ttaM3dI1usG5saAU+k_ez7Q1Q<3?+TWoJF;7MklNk!q z4WzJIvaiG5u0`I7c;LH#H4cD+=5wo37eSg3F&F^(VhL2X32=NRU6&EpNgqL5%T{y9 z2MEgcdu;Cu?0**&IF%+nz@s~tq6KN28C)|Nwu@KZ1iN9^rq&vwKquRs*_)EqCCM4A zD)%(P#xm6`%Yq;1AbFR)<^&fkX zP#7v>+vGAXYtsdz8KAQwI7~znynv)}f~h)@Y|mI!h?Uh)L*3t2B))9j^9zc7Niq=7svhRd~CYP^XqhsK|#BuNNvI)}cb{QOMpH!hun zE;3`<%;tv}~8PS7D1;uj%-)vo7J*ODhrekd{)tRYlQbc6yc(@HR&3T%%pzSEQ)a3Y0q5iF3A?D=X`EhQ*JX|RpXe)6caE{_745|Ku__pT>Zfb z`wB!Ih%9h}aE$qZ*|k!i#z?mbRNZS$A_2m|WwSs1s#OdwN1he9a-N0tE&Hl-ULYpA zSsd)EDFK?;B^JP<^$AZvqV|~8MuT(Awv6BO`|Ph(clz829aqvXiQ0|G^}i5V7v-_d zt>2Gi$1`=JlUk~$z@{lZ6CZHU8gl-$Bb?Yix;(w1QfVtYx1CdEt{tR5j?JT7i{{4U zwz!~@npsb>A)IbY%o-*dA%4tN*8XplMO#|@Av#s}k)4gfIO_heS9k`9xnwq0C*%QA z?WF8f!_}U4w4_-G;n3bJOgN)E7=X-H8}Z;U4{$P-9!-V#^tU;^$m;UfpE1B5E8cwKjA%+$Z1J&CwK0gezo3(v> zG4K#Z`_m-PjU)3Hv$bu9FW>DiGy3bV&e93*-}lW{pFqv>t~kBNLqVSMIEb4wz-`^_ zy1Jhcy;&mCnAH1u@Tm8pxT{%;?sp<-ns4>_SxNQjfNR7!(mG*ji|H7)kr<5M!M3y& z`Uwim&CUKa%z%iGU}&wBy1N762f18pGolYV&hVy;QCFDEx)Wp5x*h}UQ0HBw=Gjy? z*@qgi+`|oL(L|P;ch#mJnVSY{vfCzDK)&TP-#jS{Q2{!ZYonXFfoSc~GFdSKXT0Bn z#GSEHA)AdExF=jDKb_8T{(b%uZRCAjZ=cCJbgW=?bj%8%2`Z5m*#Q);h1y+!>#JwA zkm(A1F}g{G}8y=(Z~ zMmZP9;OiCbSBQl-`%Nyn-SzPaYjm-^E+MEa@4g5E)!yKs5zT^&Krz-Sj5^LgSQ=NC zar5P@n#^YIeNTrP$KfN*WQeIy`22$;wlZ_|Y>W=_`4WFM`aH=EkbMtWe5uB_bP6(U zSa&T{ZxuxmLI(MZZKzqu2ruP7-B*QtxIZ=dOX)tX3?tKL zSrf->=eoT2x>zFWY9>`rdDy_4>wu2$Ri=cdOE?tGEMnvO1bhbx4fc?|(43^Xs#I^c z=(HC~#y#Ydz_%P>%hbMrBFvN9s$8dSdzOdjcBm zOX|W=%VnB_PYwjR!E_^}OBKLhGHd60)Q!o96y+`4EFxah5rWsAZ^aG-;_219`x!gx z9+~3WzhOXveCYqu`Q7+`9KHS@7fhf#SC4w->opYC1CjeLFocrdpoypSgxCo`**LI| z(&UlNK0#9b0rzn)wpIPA#LEjd>!W^3;nXUV#SyK+fYwV9uaTDoy{*e)zCUAM2bUWBfgu7%DzAcuRI`?JX`Qy}=r+v~nEY*#G%&l}dc+5SI0}MXai~3nnu{l2^A~K(1nU*PD17p= z$%dd{hEK{UG$;V%2~|d)@7_$rcucx0E4yy-=>@^qu=ojI&4uvjLqu6sIGo8m5k5cP!P1 zX3?+Byx;AG(09k-DW^SbM|IV;;R}wAw4*894~yT*UP}`5Q1}+{cOKl9M;nKvWZbtn z*eT6>NBk;Dfk5keV`vfz==WBg_RlK$rG*De&Q*xl05ybL;>rSSa zLyUEln>Zn7;Ibt$V*`z2J6mrYyYjv`Zx68I^=`<4I2QX{t8z4YsX93pa?uqka7tkf zFtwS3=t`w)x3&qMds6V!Jh;kNflBd$C9ePCJ?f(N-hT?28$h8g`M>AD3vD&xg zfQsgx=xWUQpVluoV&D#NW9;abY5%Hlxwu2$kL26vK`1#QLa*W^`&1Z_+?kQ$GRc9W zal-FMEUG-0#q4hkK0G>Cda&}vRal?+akU0fx>7E+*(?l0MBD)kj&Il_at)0+@1UZx zsadS`9?MLyJAJn7eI@#!_ML@@%dCx;YTvO4F@H?sc4^4hrE^s%N;|QP7);X@0u_UD zpgfCYpNBLD^+Pps+lcImWmGjiik`%a_wAX5FU94+Vg;E=oY>&Ya~*fsIg>oHQd#M> z4w4=PzE$Dkg;f8t*b;HT4eAkd0d|LF_$>xr`wV@;yQ-#!+GAU}zEw;9;d6eAS5gu? z%3R6!sH3G?oU^pB5*_dmSQO}VlSOK|gWe;0HvyK)=7#!_f{|@|UeIxjHXxC(MTk)Ar zp-qu`GD{~Q6alkwg`6d{v>N+r;Sb`PEP_6euHqy2my(c zej8CtGfr9R1Du-s4uUCCj$}A_%7W-vLA6T8f4;M02vp;s%$7eUcNL#Bi;j41Qz~?n z$K~!szQ#VGb|@H#(ohfE5Uf%z%|l*3dDr5!4%+^Tfn1YOMHIVLTi%a!+$pIuy#eX+ z#6*~L`W>fJ@I1?7_b!qw)*RR;IIN(-dnlG`Qc7`&(Y={#Dj#om(xj}C**WVOwe+a6 zPQamu! z%Wz&Irg!!I>Z9WC)S0JaAy)xcf-jK_bl$X3SZYzKJay|4HStWbo3YCqzda1Uy5i@n zeP}Ki)BpU|!Ilg}T!DBqPlDiLB&ahEvAu7zp%v`xO6)C}R7_=0=a5!O|M^UX^3m7OLk!kA zUTG;BMICYlX$V9tXGwHhED8VxB?h>QrOyZ1UnaymDe)GctxNpy{05nK;-?pPzAVWw zeL~vdhdZu;$=)X!Af_zW_3roC{hnAE_IK6My^Ud2dg+`(GW>z`^}~f2-IGiRFEEAm z3T>8@=oxWV-#EQIrBwVTCI!+LSTNs47D$Q=Oz`OyNjtb@6xJrtqTw2%2GFc9%?c8o z@YI_NB{uGvvY~phJT4xOGO>Qg5~KF#ZdMGWlYh8hTpueQ|C9QwARioF(&Fkh6W8A_ zT3cH?-ekb%)BT>ASy3(gW8pFx6&W8njBgf^(V967B7@@zNOOX07xm{c4c8*8=^ku+ zVu&$>?i{Yx1xI1RKr7#``n0`S>^Iq%=)T^qlWeF9(^*78 z4^M6TPCSo&><3^9)<~dC56I>@_Ip13Bt^Gh{MgSX)Y1Z=R#RPnVL6=SJhg+=IVK0n zes0{G@DB>|iZPwD8Z0&Txpp+8iL<#^o8;6We*Xs-S@CjFuMpqVcZ)3vyl;C56t5RU zg85>xWr!ASe0Pg;&UuVtxe>~xU;BLcy)SEKx5G2IFPMDM1W+qZkvT|yaOu7|R)QFv z>q4<<_~TC0?Zbx_M@qgmz>Vyqwk?vT4V0%}bjf~!3CgG{5iPdvuF#}APBVP(Dx%T`9>0%}IY%Dd91fL(u+CczV%?d}b~yw? zV>Bcl6wGXJTtQw)zEd~0-8|G%U;pL_F@$MY$UKdgFc=iw2BIbNS3v)p56&IN=vMB^ za|?~>2@F&T9eyUg9P~=~d~xr)lJy%UoIbqgR@4WP->^(HNMSrIQHenkYZ9ele5?iN zS)}8La6PRCf-KXxWR9>$=Z|KecCIc4$OdKQ)I7Ry@ z3jrO`bmsJeQLax3;^V<%TU zNTw7}C!piujv0pI)pVj6px>LZO>Apoyl|j8pjhfs#`7(%H7#Tsp<#Hr=Cy2_Y^btz zSqg3`Hd7**Bq>l+K5e6g@}ZP*Y)r>-37c6Op8vwA`^8i0akp?4ubf8EM?m5BX8@exd~|Da z)N_pjqj4k(d#tTI)}#=eL}!!#B+13FftdyWU6V5WTmjMvUsH_N>+wOFf5O|pSwThC zf*gvfNk1bv$Hcxg+qe5I<+~4-d|5fD5HR25rfAO_UL^SVrVM2;%DiWLDx!g3B`ND#MD<+>+T(0xEif1VlTy0faL?MF+8+WEOU^yECO!&=a z!SMbePQv$bf4W3n^&+t}R!cYe;kCer}Y|Xo1L}E-&660xBc> za9J4WAEP>&9KLClbJv5&b1mRr7Fi13TWp-nE~V0P!P;ZGBl|PcYc4=zhAwhifr}TnrfkRddbqGv6~& zozen98z{yPu@BRa5{cQuR?pm)PvQ^(3EH7v3$=U>63{mxX9@B^1hEs~D_()|0JXiK zHviQY!81wEZ3|JfX%YB(*X{SL&SG4 zs%08mbOj_eKT?<<5Ez5AoJWn6;!eh06WA#u$!n71H!&d;K;J3j=@1MgbjCOmlHTMX z7MVB}&!!s{Dke(aN_Fp!&2zlX7vkH)#++&y{@8NY`e|HG6)C7Tz6%ESJvVojw*rw1 zoVRKTRP}6(CNCkm?q?1eE#3z`*65VTzjZb9_(*>xT{+H-F^RU~Q?C$Sle!#}j&enZ zok{^I5)sW}$cy9BRhU>o2Cuy4k+si^aG9LCzL(iHS%IYg!?h0+akHBiP)H zM7f%r0q*D}n|y@`fnB)~<@#OR*bb)jJwjxg{Z8OhZ=+y$BI6PktO@N4(B*YZ?wngQ zd-%>I+X>Ur*;ERK#0KhHjebwHyQmGB2!W`qLVt@46k zbVs&y1%CXh<5U*w$@^c&uDSIB*7YgM3gj7P4Co9Ir8QK|=Px19KUSbKJ^GN4Qd|qW z)dpudMx38hXW`m->B)Rn&b9d~<`gM<_xPDwzURb!`5Tn>4>0Zjf)9%SVXyB$w}pTJ zqHC50H{p0?r`=BbP$k29GeoMAp{=fJ@`8!Hevf~g_C4R381@5pWY)1Zl9qsq2gg=S zBp2XP(cE_!D@g#u-jt!4m|bxHP~Orm@|(jIFl6}ct>9ekFNkMKV{4tL zmTvmo`U6w?7akvjjXQ77c8|U*#+1q`$v}16M0EV+U;LGeecjyy>1-C-(>hn&MG757 zzDBgM^AR~zE~d=S^<369dw!LQw(mfn(%Ygo4{7%&<8X9w}mECO1EY zhEDh7#ZE^9K0bdwvxdK-@S0Gr8T6LrVN>|H#RBJTKcd=5c8lA%HMWz@?FG-N3wms= zoWkCJ<>$TU-XSjusJ}KoHy!pmJ1*_z&ojuHAg@aQAt<5^6ZcnSVAW&W8KiS>%I%`NZJ0#mJI44$(CMM;tylU0O~yBg%W z9vsy2JgdQ1zKR?iVUW~K`chuZoRt!J-8Yh3X?N#i z{77|U9NLY)__p_xkdq{jm-;K=vh}qJ_chFar~;$#N9N1)^88u1BadwVykED6>6XjB zubK8w-#^zYv>Y1jw*PmTt^YG~no$2?d7S@T!T(SG{QrXi?7uqNB*9^**w-dr?3P|v z$i>gb>iVNXAlPEvb~B1A>f4j5a(zNkQuf@U>tom1 z7o5Z?1veE|SY547W$L9=MO7r}JJ9CPD*V=LAq@SL-`BwIJn(!TL%d&m3_}kMi#We- znc@vBGie9i<)^%e(UqH(_?DQ>YPwQ)W4nh#i)ztm<+oeqp6TKphdRx6T|U{8IBDuX z(%5A;2l9;b03!n+k11BsDD3QM1S0cVe%AeTpU!x{hG(e*(!IVH9b*v}?|uCA4eVG! z>5#4jSUV~Vgta#^k$;Eq;KlNaK~((yc8))){1qua@{9N^?XOrKyAd_USm4Ido z(v!@v8zz86(r0Y2AXcCTKS7j4|V6KQieQ5r9HV_K0kDL24lQ^f*Z8sM{zml)}bZSj@3wkUXGGtGF zl2Q$eS!BXr%YKbBQa9#t@p1_K5-WO;UL-;`%03|ZNh1IgbW&V}j-IXE;>YucT>4SN zgNfX%0tK*(OCS%a$KOr3>QnWrUP6CK!N6P{i)y!y*!lVcnJ^p}DpR&-)I#UZ@wD@N zO`m9GT@sd=kX15LN#^YvVTv&6hHw%lQ%+j242Jv`xAqEZ_mbJQ>lDmxW(wXyC~&8}K?~9r)4a3!`=&?C=}7^nDY; zfPl4TpCKf-n?yiap^k|P9U(#!TVFUb_d7Gi-}^`p#X3o36HW)#2kR;%Ii0A3k__^5 zO14&!6pBu*%65S<+e_0u#F}Hr&a^|p^VNm9dwk8kqo+M? zG6wBQt=^J9U~@O7aC)7?Y#=EMhPQ|*ZMu?2x;xf%L&>JTWN%et|%OJIn6*Q&a+P3Qnh?6;qoB!MH?8oJkbsmsj+W zU6t}A4YnsXb8%^)Hjy%FEA)cT(Aa3w_4*^75}>6$gg;BVNwd`QN19>dh)mhT$k)CJ zp_??^T!X$K#<3CKf|E`{7a}COu0FwV6h>~P^FG^iH0u-9)=vxl@D`(){gQy*sxGK{ zjF9L)DvR*)!M>3MDS;?69)Z|m+gaffX{R{GLgcHGOog=vZHu=WV6-v9MXHkQk*98G76#v8C#s;5mN= zD5ysqrgZ}yASWluvmSnL?)lY*57H#q*)P^zVx#TVRC5L!FG8a)l)kcFi^g$+^2$gM zkHGjGB8tfF>4>(g=SYWnywdyj#i#vSPMPjERkPlCUEN^5^Vfw|c}Rf(oPZ*ljoa7} zcD7`3MH+!C!(7&%6L-<{?!$RM8a&W@3}ZQ|9hc4x*=xm$dc96^H^OpmX}3^`O(3CI zH6;`{bfZKx&M4YC)kVTb7i~(JY9HHhpRJ!oZR!3?TLR*g(5?M zAwf5?0FiOy&DK@VQaHmxNu!lUuY{&3yt=(&`wk=58TGiSlJ5VR>zw~Duk|0BIr)$4 zBFViK;&;46T+@SP6TXcjYz#uMEt`HqwnT{GwM>(yKRt2X>Tdpky6vGoM$NN4AtYid zgX94O`w$$kObH>}v-aX>XzZ`X(rYqy^s#idx~6KTnnKR1lx8|Jv1k>*hG_D2f0)X$ z&v6Ch9lGmJX+JGFGLI|*Q!=cprfQz_dDDqH!7B_{znDF`-R#P!h8af9G-6fSKO3Ho zVGT)YqfI&(q{5_yc4$Zcb;^K>lW7Txnn`&PYU~NTL2zJUclGI-B_lgnB^OlFBmJl`X;f1fd zGHn!J1*Q%Ur)cfwJ)~uNu!$yXy5MlkLoyp_rm!Ku)Q;!O zBN&2M^t@kpf3q;-ZpGx3qMZ4KcUFG22p}I64`NI{%!#3+{OU#YH>8o1{bmX8pb(5N4LPGNks%n#9iTsYk?h|(x>s8@xnjdg}4>8i>kHO z$ohJ0NgKyPGo}2ZAbb!Q0RwK zp`A9>93F$RwK$g=t#CwRVN{5zp3F*w!_C^={bR{1{BM9bGyMsMaeO2qN6aoSN=kBv zjD40NnBu*QwMvwtjUXfNv|n1?XzYSfkh{xyQPU2VNNpWHvUm4sZD%c?KrcWpxgH#$ zHXV+wPntn7N)=LbGCzJ$*F;{TrF?dyj=tC-Tvh3p^OoLnAw&oi&5$9Ld@yd!yapv2 z4?(@zh?jLcL8DH}#%<``^U{%MpRT8}J;O7<$#6?OQ4>u}g-Gqn(GYHTFDK8cx+*V) z+b;0TOOIl`68l5N(lxesD?a)RscnQPhYTz+qFk7GK{(%UGM3UQ^D!hZM-kWPda@s< zagh{7&?iU7D_rEZ&Z2u}Um_j8L1(^UZ$%4sVP+$+x~0V+%6N2p4Zr_kYW5{5gXcy0 z!uNO08*SAG7oX?IwVBaU8?J;vexSHC_>a#aVL$-Eaj0aG`xugyvr&3kqoF%PY_N7F zFN-bRD5m33KAj>+X4yt8c@`A7p`3Oi(PaKGb{I+eQ<{D?!J{V4+ai;=!W3(Wru)`h@j0U-eOBZ4{JhxPlp*Q-apZ2d zc>1*-55wv9ZwW643pWjp^#HniwQ%T)MO3LD?`OT%8sB;S(~DOl2P0pWe$?3Ub$4{> zf=tSxg4SLuhkkrYOIjw>Mm3q>p;%N0iWT;KiBX!QhWk~GugdEiS?Bwm6rl*)yt?2S)>8%JVJN71$R`C>hh zl2Kz;z2lnMGf7v!DeWayA9EwU3DnU@CM?`$~FY~9$4y``@%N( zoo;0OYZ`T3+;z+-bk@D6VX2L2X098`tikfUrWBi{Ch&EUy6$d;whl{b+ftN9dY?wx z+o?BmNQ#qusRElf&?KHmtm03aLTEmjb91Q*uQK@)ZjG4|ET;UP`!lDkKmLjg_f0G_kUCsR)s`NJG5K9-A^0%h#|X0^K{Y zw5CpMaW$a~84)-GSP&dK!5OGP@`??E=f+j1mr4nrnqTrsk-N%>Q(k%XWNXL9^t7jz z(3yfx7G&+7pjexNw=O>seE8!waF=K>P7)+^v+_?Y>HqkL)9Y{D#9QEi<-s2@W&epk{{1fQ%Xxz*i7B@O zefiEF1txK-{^~3CCrE4sJL7eSP4Tj^kZYu?H3XAq*}KN_dvF#jVxGjEkA_mAh{E|!|*U2;5}0~ZUT&8s3}J=CF+{jf5kj} zv7m$WyuZ6(ZE4X@mi4hm^`Ye24l~LAY8JW;o$wUX!$jMG8)RtG41RQaanx~irLlZm zA)kV%&ik5?xpe(9&ZqIR{&Jilx$nM>A&|B#?QSx$ZwIxja+jvQ{YJkfYn55g3*{x; zCCWGoC+|!sO4#irPjxr>D_sZdi)`7^eL)JK5nEPDIL0Ou1(T3>kY+^&l-6+zJ-*`a zsooK66byUIcf!oHa%)B(cP=N_qFl`ZixsaVPy#X3xbntMr4vF0DiyO!FSUfLH*!l0 zkHKZkefd82_kW~}(_bkp=qt26p1V%4h|;j|5?hL_j=%QsoXw+Dt9d=|7+`49WhPWr zt*uZ)0vwnF8~Ue9_^3R_;)1}jxkEgE-};>Xh~evf1NIlkafd-falA}2mMMG`_&KIq zgI^*^1>e}{67Qbn+FGutXcn5D%h6@O{jk!qf=p1&cRV$47?2Q*sY0`c^gm^MpEo4_ z{AcEdZBnEd`d)pV*@KNWBi`V1MLzQ~!Lb-%tnHKy;Xu%Be31LO*Wr9qL)?5XC--Gh z$02!zq?fT?1ZS+{JYjYg7|_XdeI+dHru=2-i#PjqWU2`n?O_^me>8+QIdt|QM#BVa zC)t@TmA+7ALLWb;?^zaAR9rFFnx5^JzDJQF!+9FGikDnpim>OzON2H#;M10eJBMc+ zZsM0>l!AQE=707Pk1YgQ>p51j-`T@hmusG1-RFIUuct_Nyt}tn1+AUxJUAV92R&vazES7Hca^)0^&h*RJ))T*c$geF z>VLPmb{(?)x2FET7DW1w)UoS=p11#)ZT(yHzW@8Uf1Td_nR}aGu+sk z^6ug>_W7jqP5&c>K{>*%N5W;<`3&Yic@-V~Z<$2cLwY{dq~Vy77X{v&_@P+*8dx z61fMwjr(?e(=btfLgRw$mS&+HOy<2aR$6z-Is<#v?ff~9wNDK#f&0GBX?1Ge`C>w9 zwS7Wo6pl0rE6Y0Qo&jk(uxUEw`D=%6);{p4`;7}bvKC2S+E7#e(FF2_vBG@AxVEZMIr3)tp-ID!4$=%YWf7*i zDd<=cki|_5rT7vo%qN?)7_$nx9Iu7{wBX>e+l(;?dJ`|H5~rMgqbC5r)edU8Y$uD4 zF9U{4UG`ipKp;c(GessQmyipi(8|q{3HH^gI}1oc`Ew2v5$Q&$L+%F&qj$8*4+EE5 z&YyloQ$rY+77(zWs~YK)_ablbzk17vy-BR0>(XT60e!-GLK&v3Abq39t z5aIY3EH{ z4TrJ2+0z5?gLpTN+1LcDyh?-U*HWZIHt1z@p?5@qK0IAJ2ecg1Wyia$G~Nu0Y!>^$ z5y0c|O_&^)czIGi*igDBbgEo5faa~IzyIyGv`3exh(4n-r%)r1Mb6VS`|HTK!U}LU zN>xl6(2UKc^Ty{8M8}j@*3Z)x%?+_7&8?u?c9@WlfuNveyQfxCj!s6UP}5p<&#HwR z^V>B|wceUm!XXF|$(IuJu4>ZZJ#UbKC$EsQgt5+9*#wOTxGV>~{yLVGxuX04@A{=ze@jKBaIb&6y<=JX$YQoOw&|kTDPy2Q& zEfrbbU|zJtE-Nk_jVd_phE`+dw(@F@^*Z_8T$;uo?Fk1R^OrS-_SdM2M8GQ8cd7r~ zTl}Nb*lXlMIdPY%{%DE*yHd$9%^Nt`=_2h6K|z_N*Dzc`tb_FY2bl9YD1GMflhD6~ zAYaV+Kk75|pA)h7#&Fbscu!umxHh6=?Jp!DnmLhH;gd`EK5NTTy~bE4U%r&zrY@3s zo`UbOrpBhy5w&Z8E6SaH|5=}}*VX7G%jv6EYcITv0!5eXFL5Y(L{N9;*@MU?s{+kp zSDqIj58LJ$i_T>MZ;)m|Dex{-_Z(HTb~I5@fF^JSpdl!9q8NT{M9HI^G^L&t)}asR>Rg=rdn>OOVyGMVi+*;aLMJ&ZD>Rheff1KX02 z=^V3fvNdQuhVzPf&@`^`?2iGV&umHM;g!^sz%shcyOBfGV3x~2L82rFLS%r5?o%Fo z0Wl+7gBRqH&IPuspD4+SRMxw5>au)p$!xZ*z;MOBRtdj;-}_wX7E%ufr*60B8%NsV z)TcKUgT-f!8jCZAGuW6f1w3DoAlK9|J5jh(KIu1S>|pfTQ)=gZ5<(2tD0-*x(Sz(R zec=|_eK-^LH0xLh=|M1QhX=tb@YjZ;_T4G*U~{XmK_HJ!rn2K)<6R%7Fa1&MDevhm z->dPWZk#fANY}O}pPd`Z6OGp%OL?(RUo#TU^mRf}B~_bU0w`y}46cetY1AiVC` zl5biwCE}_+Yjr;PTK%QLzj{@{u8USaSG_aA?w-QMK8jLg$1&^=VZ5cE733o60zt5I zBN(zsbjcq{v7hYnj?#L*`FX#|mfsV17fy$MxSoB%^P&<+>nP95>pMdi z1=l?9s;bijAgcASs&Ke!s2-QviBth~TMaL4L1RlW3OD_|k1D|HzTsx-N!uvfS zBjd4@X&YmnyJ$u4H`J+S8YTc6S)_>q%JbmL{QvFgs zy+zvh4Xjr@io2N`q1P%v513$sVI9qv#{4(p(dXPu?G^`|^A-9u$hSO%Z_ut0t8&Gt zxqsNk$b>9gNH6d3BJSd-qdbs~%L|6m7TV(xyg`MPYXcQptPbAP(RV&yjXUfh<`R-S z7G$J3J3I>if8+L9cAy=6<%U01AnP|!VQt#7s;R5&lu``pNWWT^N0qN$uKL}tV9qrYQ)%8XSVtT&tUyTn_V(n!RzpHwwv zqo}>Lv-6D67{ebSLZ`i`%3B%7RwQA(E*gJq9C2d`+;a>EyL>#g-JO*#3PZ0CIV?_p z`^;C!G!D1v%;x`kr`y=qta>c%UVU8uNSSjIvyZ>e>Bn>NDa}@LPlVUrd{U~0(T7aU z-pYFS9Y&@oEwBKWQrw9>WvZ!-glu}ZkLCy;Uk*L%hP+FdN(2|Au!I^Ei-yt1dAHwW zAaqMQKch%bZC>L_k>G-jUFY>fk1`t?Rj>LBOpVX;18;nrxLTV?y7V6LMicLeDe7`B z1#-7wGwB$#{Kn?(*fQn&4hJq;%KEq}Oq13-*UbE^95?Hi)n&QGug&{sty07rpy3^)kNvFY!`Zk!>?4aW;~%)f3)i&poA|c6eHDm5>WV5nQW!I zj(dUOUHNh}4e+`3GoO94Ck~g6-2o`hGY`Mh+JKG@xuns+cGUB%LZ|QNyFdev_4hixA22+%XhZXdM14o=NV?-p=+xpq$Lt z5a(H+w~T5^yR};AHTsGePmMK~lR>-=DVhYzf>FkH>@7$xI-r6`$l#s?PmoVd2*5xJY0P#80l8b8gY^LyWO-u154 zALrlm$2ouQwf9+7}!#?BE4xo|(T%Xe<(Yj9|U;*0? z0&}JV=yMCRR-G2w4Vz6fUWnk9%$e+FnWe{OIT1MJf3!3>4H&r9R(7{1 zOiWB)-?V%@!~MLmYD2npaPE%q4q1u8@CJzyjtc!DY2zs)iXiwrR-f}*tV@EQ?@u@; zdBHAi`K^P@k&82ZzIC0-6ghWuii*lEd@XPc9Ks;)Yz!uW-GwU!Z*t{tz*)|>DE%}Ccvo9=m_spWd7Rwb^fJn-~^ z*`KT=U+leo=z>g-hnYoi7#gOHi=p%vOE3dRv_oJgC%%BYFsi;g45BS-STKTn7wn?Z*WzVpZf_FO?y73v`&8W)a|=z;Q$Z@}FTQ;R<|yeo@z-q3<5 zU1_n~W{67~r%EqJ?qlT{=)j+K3>ewmvE@z7(Jk`(HrbC*;QYF)n5Ck&USGAw^+!s@ zfeS`1?x}=+u5#B<^wp0Zj8eT3B-D@PGdJDG5?mYY)zg;~5xCib2DtT9cWY{{mTMtf zhOSW?lNm#X-qq|tY`O&a+O9oSVP#j_wlLqoL6sh$rncUW1=E{>rI^o85~g3+dKUB) z=(c4pW-Ams&gJUyYfK3wAH|lzhm)8kN&tm~&1kDB-NfE8$h5StCAuE*N?Z9E#a`=) zU5T+s7H@e?Ec)7aT?$mV1w$lamB&qWDCuaSz=T~Dg}=O0ZfVN3AkMS8o5k?u@+Fts zt;Mv;^|nmR_u{=Ow-d27vAm3LNC`)xH!)sq0aa+#nCD$+MMrndS&RwaR`7Bu_R)~5 z_@FpB2iuR|feIq8bkam)RcrlmI#Nyfti#pRD+dLUS5;b5*-vVZil1z~n30i@#z>Hi z<>6GB-XN{fb^$Lb?@ImKaA!hdIE5tVY8q64G@+RkqxN7x&*-*lWYzK+pmNG6I+yeGuOxO?UZlL(q^B^C8G%o zDTsqWdljmS*lDz7RMGEH_aa5Nr6GSt_jr-0=mM^9-q|x$e^9;8wG(NdfrQ(OpkkPk zS-p(43(;ox;-RQ44+i8eCg0mODSU5hWR_5G@n`EOu^a(AWZW!g9?`>Ths$C?CxIp% zI67@?8(JVwo_piMhp6=JGE}?SQ3Rc;AuiI^D;FUuu|9Zox3Lz3AaaLoq$eRCB{#E_v8aQ1-EKzCVwcc5hFQEQknBBCkF7Da zL{`uH8|OW}tD{0}40v8)Yx1ktCgm3CehLOv_wpT#zlPMZ$2$U>&laXjkcn*XQM_I( zlJPYw?J!%nVjWQUk7>%BYvG9)mdA8Z%tBzI9}%*nc;P^< z^0*=~IGC#j_$~+3s5+P36OJr6|T1s=vem+LnEWl-&0I*FO& zJ2?i_J2tWQriYFg7rDXvP950In_yt2B8T#_!3O*%AwMtMoI3zDrgQG$+q6g8>)k$z zlayL_zfpAzwOXvcmfhL8$_q7TI5ESB@o?1eX&jJB79O>;4HdX`Ik#(eyZlCOR7wFG4SsjX17BhJ)cq&bn@?>tLL+q=iG@lt?=ibZH_LI6=DzNin;uAkc%JdPUET^#rm(-QAT-gi4pVGWTTr`uUlaw-b#&#Evlxo@tOzQf)8Sz8MxB2$HF*U6szB8E|-PC9>4Y zvy$}w3--C@qK-V5U^K5*OH{l|(aCHyBsQKg``K`siz&#vUHX=!rZJ*=B&YkZSTp-+ z5j1a$YFi5?oc!}8@bAGy|H{q!A42+9V}9)8+obfwDIhAk-6jj8@C81xZP!)0G za-6dd$-8){=kk4Xc~NUi=Mr@~ zHklptcpl}^Gwp+afmsz?8V-us-!GZIQN8<(Y0|j7SdzznwRM*&lrq^0;A2E}FF*{o zy!y%wQlABc`u&zX|B+qBS-C;Kk?Pk^g?BzxYF(rl!56o7#}& zHRTb^wHB|;gDvlsH!+U9nD@BDl-!0;{lpW}zx}t!)c+ZyA4SN2SNl)u?8gQDPi*u3 Q36=d5ZU50`zVB1N1B%@oSpWb4 literal 0 HcmV?d00001 From 2c5218ad30f91d70bdc08cd35e1b2a50bc64c89f Mon Sep 17 00:00:00 2001 From: "jianguang.wang" Date: Sun, 16 Feb 2020 22:48:13 +0800 Subject: [PATCH 0234/1268] 025-Week 01 --- .gitignore | 4 +++ Week_01/G20200343030025/MoveZeroes.java | 33 +++++++++++++++++++++++++ Week_01/G20200343030025/TwoSum.java | 26 +++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 .gitignore create mode 100644 Week_01/G20200343030025/MoveZeroes.java create mode 100644 Week_01/G20200343030025/TwoSum.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..3086c291 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.gitignore +.idea +.DS_Store +.target \ No newline at end of file diff --git a/Week_01/G20200343030025/MoveZeroes.java b/Week_01/G20200343030025/MoveZeroes.java new file mode 100644 index 00000000..bb470f4c --- /dev/null +++ b/Week_01/G20200343030025/MoveZeroes.java @@ -0,0 +1,33 @@ +/** + * 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 + * + * 示例: + * 输入: [0,1,0,3,12] + * 输出: [1,3,12,0,0] + * + * 说明: + * 必须在原数组上操作,不能拷贝额外的数组。 + * 尽量减少操作次数。 + * + * 来源:力扣(LeetCode) + * 链接:https://leetcode-cn.com/problems/move-zeroes + */ +public class MoveZeroes { + public void moveZeroes(int[] nums) { + // 记录数组中当前非零元素的位置 + int j = 0; + for (int i = 0; i < nums.length; i++) { + if (nums[i] == 0) { + continue; + } + // 将当前非零元素填充到 j 位置,如果需要,则在当前位置填充 0 + nums[j] = nums[i]; + if (i != j) { + // 说明在当前非零元素之前出现了 0 ,而当前非零元素被填充到了 j 位置,此位置应补充 0 (相当于将当前非零元素与0进行互换) + nums[i] = 0; + } + j++; + } + } + +} \ No newline at end of file diff --git a/Week_01/G20200343030025/TwoSum.java b/Week_01/G20200343030025/TwoSum.java new file mode 100644 index 00000000..bd4ff2f0 --- /dev/null +++ b/Week_01/G20200343030025/TwoSum.java @@ -0,0 +1,26 @@ +/** + * 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 + * 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 + *

+ * 示例: + * 给定 nums = [2, 7, 11, 15], target = 9 + * 因为 nums[0] + nums[1] = 2 + 7 = 9 + * 所以返回 [0, 1] + *

+ * 来源:力扣(LeetCode) + * 链接:https://leetcode-cn.com/problems/two-sum + * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 + */ +public class TwoSum { + public int[] twoSum(int[] nums, int target) { + for (int i = 0; i < nums.length - 1; i++) { + for (int j = i + 1; j < nums.length; j++) { + if (nums[i] + nums[j] != target) { + continue; + } + return new int[]{i, j}; + } + } + return null; + } +} From 50844bb0377c49611d0036b46e0d073d613e5538 Mon Sep 17 00:00:00 2001 From: Xiangyida Date: Sun, 16 Feb 2020 22:54:12 +0800 Subject: [PATCH 0235/1268] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E5=89=8D=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030541/MoveZeros.java | 28 ------------------- Week_01/G20200343030541/TwoSum.java | 37 -------------------------- 2 files changed, 65 deletions(-) delete mode 100644 Week_01/G20200343030541/MoveZeros.java delete mode 100644 Week_01/G20200343030541/TwoSum.java diff --git a/Week_01/G20200343030541/MoveZeros.java b/Week_01/G20200343030541/MoveZeros.java deleted file mode 100644 index 335b13c1..00000000 --- a/Week_01/G20200343030541/MoveZeros.java +++ /dev/null @@ -1,28 +0,0 @@ -public class MoveZeros { - // 两次遍历解法 - public void solution1(int[] nums) { - int visited = 0; - // 移动非零元素 - for (int i =0; i < nums.length; ++i) { - if(nums[i] != 0) { - nums[visited++] = nums[i]; - } - } - // 将剩余空间填充为0 - for (int i=visited; i < nums.length; ++i) { - nums[i] = 0; - } - } - - // 一次遍历 - public void solution2(int[] nums) { - int pivot = 0; - for (int i=0; i < nums.length; i++) { - if (nums[i] != 0) { - int temp = nums[i]; - nums[i] = nums[pivot]; - nums[pivot++] = temp; - } - } - } -} diff --git a/Week_01/G20200343030541/TwoSum.java b/Week_01/G20200343030541/TwoSum.java deleted file mode 100644 index 0d26e6fb..00000000 --- a/Week_01/G20200343030541/TwoSum.java +++ /dev/null @@ -1,37 +0,0 @@ -import java.util.HashMap; -import java.util.Map; - -public class TwoSum { - public int[] twoSumSolution1(int[] nums, int target) { - for (int i = 0; i< nums.length; i++) { - for (int j = i + 1; j < nums.length; j++) { - if ( nums[i] + nums[j] == target) { - return new int[] {i, j}; - } - } - } - throw new IllegalArgumentException("No two sum solution"); - } - - public int[] twoSumSolution2(int[] nums, int target) { - Map map = new HashMap<>(); - for(int i=0; i < nums.length; i++) { - int remaining = target - nums[i]; - if (map.containsKey(remaining)) { - return new int[] {map.get(remaining), i}; - } - map.put(nums[i], i); - } - throw new IllegalArgumentException("No two sum solution"); - } - - public static void main(String[] args) { - TwoSum test = new TwoSum(); - int[] nums = {1,2,3,4,5,6}; - int target = 3; - int[] result = test.twoSumSolution2(nums, target); - for (int aResult : result) { - System.out.println(aResult); - } - } -} From e6f82a60f34ed2598197772b9c9722dbd7b5e524 Mon Sep 17 00:00:00 2001 From: MurphyArc Date: Sun, 16 Feb 2020 22:57:22 +0800 Subject: [PATCH 0236/1268] 527-Week 01 --- Week_01/G20200343030527/LeetCode_26_527.java | 18 +++++++ Week_01/G20200343030527/LeetCode_42_527.java | 22 +++++++++ Week_01/G20200343030527/NOTE.md | 50 +++++++++++++++++++- 3 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 Week_01/G20200343030527/LeetCode_26_527.java create mode 100644 Week_01/G20200343030527/LeetCode_42_527.java diff --git a/Week_01/G20200343030527/LeetCode_26_527.java b/Week_01/G20200343030527/LeetCode_26_527.java new file mode 100644 index 00000000..294fc0e7 --- /dev/null +++ b/Week_01/G20200343030527/LeetCode_26_527.java @@ -0,0 +1,18 @@ +class LeetCode_26_527 { + public int removeDuplicates(int[] nums) { + if (nums == null || nums.length == 0) { + return 0; + } + + int i = 0; + int j = 1; + while (j < nums.length) { + if (nums[i] != nums[j]) { + nums[i + 1] = nums[j]; + i++; + } + j++; + } + return i+1; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030527/LeetCode_42_527.java b/Week_01/G20200343030527/LeetCode_42_527.java new file mode 100644 index 00000000..aec78cfe --- /dev/null +++ b/Week_01/G20200343030527/LeetCode_42_527.java @@ -0,0 +1,22 @@ +class LeetCode_42_527 { + public int trap(int[]height){ + if (height == null || height.length <=2 ) { + return 0; + } + + int leftMax = 0; + int rightMax[] = new int[height.length]; + int result = 0; + for (int i = height.length - 2; i > 0; i--) { + rightMax[i] = Math.max(rightMax[i + 1], height[i + 1]); + } + for(int i = 1;i < height.length - 1; i++){ + leftMax = Math.max(leftMax, height[i - 1]); + int min = Math.min(leftMax, rightMax[i]); + if (height[i] < min) { + result += min - height[i]; + } + } + return result; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030527/NOTE.md b/Week_01/G20200343030527/NOTE.md index 50de3041..dc8b8e18 100644 --- a/Week_01/G20200343030527/NOTE.md +++ b/Week_01/G20200343030527/NOTE.md @@ -1 +1,49 @@ -学习笔记 \ No newline at end of file +# 学习笔记 + +## 改写Deque +```java +class Rewrite { + public static void main(String[] args) { + Deque deque = new LinkedList(); + + deque.addFirst("a"); + deque.addFirst("b"); + deque.addFirst("c"); + System.out.println(deque); + + String str = deque.peekFirst(); + System.out.println(str); + System.out.println(deque); + + while (deque.size() > 0) { + System.out.println(deque.removeFirst); + } + System.out.println(deque); + } +} +``` + +## 学习总结 +### 五步刷题法 + 1. 第一遍 + * 5分钟:读题 思考 + * 直接看解法:多种解法,比较优劣 + * 背诵、默写好的解法 + + 2. 第二遍 + * 自己写,提交 + * 多种解法比较、体会——>优化 + + 3. 第三遍 + * 一天后,重复做题 + * 不同解法的熟练程度——专项刻意练习 + + 4. 第四遍 + * 一周后,反复回来练习相同的题目 + +### 编程思路 +1. 自顶向下编程 +2. 提提取重复部分 +3. 升维思想 + 空间换时间 + + \ No newline at end of file From 8001b56962da38750a81532f8d1b1f462fc8f104 Mon Sep 17 00:00:00 2001 From: tmac Date: Sun, 16 Feb 2020 22:57:30 +0800 Subject: [PATCH 0237/1268] week01 --- Week_01/G20200343030573/LeetCode_189_573.py | 5 ++ Week_01/G20200343030573/LeetCode_1_573.py | 10 ++++ Week_01/G20200343030573/LeetCode_21_573.py | 7 +++ Week_01/G20200343030573/LeetCode_26_573.py | 8 +++ Week_01/G20200343030573/LeetCode_283_573.py | 7 +++ Week_01/G20200343030573/LeetCode_42_573.py | 13 +++++ Week_01/G20200343030573/LeetCode_641_573.py | 61 +++++++++++++++++++++ Week_01/G20200343030573/LeetCode_66_573.py | 11 ++++ Week_01/G20200343030573/LeetCode_88_573.py | 4 ++ 9 files changed, 126 insertions(+) create mode 100644 Week_01/G20200343030573/LeetCode_189_573.py create mode 100644 Week_01/G20200343030573/LeetCode_1_573.py create mode 100644 Week_01/G20200343030573/LeetCode_21_573.py create mode 100644 Week_01/G20200343030573/LeetCode_26_573.py create mode 100644 Week_01/G20200343030573/LeetCode_283_573.py create mode 100644 Week_01/G20200343030573/LeetCode_42_573.py create mode 100644 Week_01/G20200343030573/LeetCode_641_573.py create mode 100644 Week_01/G20200343030573/LeetCode_66_573.py create mode 100644 Week_01/G20200343030573/LeetCode_88_573.py diff --git a/Week_01/G20200343030573/LeetCode_189_573.py b/Week_01/G20200343030573/LeetCode_189_573.py new file mode 100644 index 00000000..33de89a9 --- /dev/null +++ b/Week_01/G20200343030573/LeetCode_189_573.py @@ -0,0 +1,5 @@ +class Solution: + def rotate(self, nums, k): + n = len(nums) + k = k % n + nums[:] = nums[n-k:] + nums[:n-k] \ No newline at end of file diff --git a/Week_01/G20200343030573/LeetCode_1_573.py b/Week_01/G20200343030573/LeetCode_1_573.py new file mode 100644 index 00000000..38a449ca --- /dev/null +++ b/Week_01/G20200343030573/LeetCode_1_573.py @@ -0,0 +1,10 @@ +class Solution(object): + def twoSum(self, nums, target): + if len(nums) <= 1: + return False + buff_dict = {} + for i in range(len(nums)): + if nums[i] in buff_dict: + return [buff_dict[nums[i]], i] + else: + buff_dict[target - nums[i]] = i \ No newline at end of file diff --git a/Week_01/G20200343030573/LeetCode_21_573.py b/Week_01/G20200343030573/LeetCode_21_573.py new file mode 100644 index 00000000..50561bc6 --- /dev/null +++ b/Week_01/G20200343030573/LeetCode_21_573.py @@ -0,0 +1,7 @@ +class Solution: + def mergeTwoLists(self, a, b): + if a and b: + if a.val > b.val: + a, b = b, a + a.next = self.mergeTwoLists(a.next, b) + return a or b \ No newline at end of file diff --git a/Week_01/G20200343030573/LeetCode_26_573.py b/Week_01/G20200343030573/LeetCode_26_573.py new file mode 100644 index 00000000..057b9599 --- /dev/null +++ b/Week_01/G20200343030573/LeetCode_26_573.py @@ -0,0 +1,8 @@ +class Solution(object): + def removeDuplicates(self, nums): + x = 1 + for i in range(len(nums) - 1): + if (nums[i] != nums[i + 1]): + nums[x] = nums[i + 1] + x += 1 + return (x) diff --git a/Week_01/G20200343030573/LeetCode_283_573.py b/Week_01/G20200343030573/LeetCode_283_573.py new file mode 100644 index 00000000..2b08658d --- /dev/null +++ b/Week_01/G20200343030573/LeetCode_283_573.py @@ -0,0 +1,7 @@ +class Solution(object): + def moveZeroes(self, nums): + zero = 0 + for i in xrange(len(nums)): + if nums[i] != 0: + nums[i], nums[zero] = nums[zero], nums[i] + zero += 1 diff --git a/Week_01/G20200343030573/LeetCode_42_573.py b/Week_01/G20200343030573/LeetCode_42_573.py new file mode 100644 index 00000000..d5f7ac3c --- /dev/null +++ b/Week_01/G20200343030573/LeetCode_42_573.py @@ -0,0 +1,13 @@ +class Solution: + def trap(self, arr): + left = right = water = 0 + i, j = 0, len(arr) - 1 + while i <= j: + left, right = max(left, arr[i]), max(right, arr[j]) + while i <= j and arr[i] <= left <= right: + water += left - arr[i] + i += 1 + while i <= j and arr[j] <= right <= left: + water += right - arr[j] + j -= 1 + return water diff --git a/Week_01/G20200343030573/LeetCode_641_573.py b/Week_01/G20200343030573/LeetCode_641_573.py new file mode 100644 index 00000000..3bb698ae --- /dev/null +++ b/Week_01/G20200343030573/LeetCode_641_573.py @@ -0,0 +1,61 @@ +class MyCircularDeque: + + def __init__(self, k): + self._size = 0 + self._front, self._rear = 0, 0 + self._capacity = k + self._data = [-1] * k + + def getFront(self): + return self._data[self._front] + + def getRear(self): + return self._data[self._rear] + + def isEmpty(self): + return self._size == 0 + + def isFull(self): + return self._size == self._capacity + + def insertFront(self, value): + if self.isFull(): + return False + if self.isEmpty(): + self._data[self._front] = value + else: + self._front = (self._front - 1) % self._capacity + self._data[self._front] = value + self._size += 1 + return True + + def insertLast(self, value): + if self.isFull(): + return False + if self.isEmpty(): + self._data[self._rear] = value + else: + self._rear = (self._rear + 1) % self._capacity + self._data[self._rear] = value + self._size += 1 + return True + + def deleteFront(self): + if self.isEmpty(): + return False + self._data[self._front] = -1 + self._front = (self._front + 1) % self._capacity + self._size -= 1 + if self.isEmpty(): + self._rear = self._front + return True + + def deleteLast(self): + if self.isEmpty(): + return False + self._data[self._rear] = -1 + self._rear = (self._rear - 1) % self._capacity + self._size -= 1 + if self.isEmpty(): + self._front = self._rear + return True diff --git a/Week_01/G20200343030573/LeetCode_66_573.py b/Week_01/G20200343030573/LeetCode_66_573.py new file mode 100644 index 00000000..9416d042 --- /dev/null +++ b/Week_01/G20200343030573/LeetCode_66_573.py @@ -0,0 +1,11 @@ +class Solution(object): + def plusOne(self, digits): + length = len(digits) - 1 + while digits[length] == 9: + digits[length] = 0 + length -= 1 + if (length < 0): + digits = [1] + digits + else: + digits[length] += 1 + return digits diff --git a/Week_01/G20200343030573/LeetCode_88_573.py b/Week_01/G20200343030573/LeetCode_88_573.py new file mode 100644 index 00000000..06adaca3 --- /dev/null +++ b/Week_01/G20200343030573/LeetCode_88_573.py @@ -0,0 +1,4 @@ +class Solution(object): + def merge(self, nums1, m, nums2, n): + nums1[m:] = nums2[:n] + nums1.sort() \ No newline at end of file From a852d9efda1142805809126fff00c81d5b4bd392 Mon Sep 17 00:00:00 2001 From: Xiangyida Date: Sun, 16 Feb 2020 23:00:27 +0800 Subject: [PATCH 0238/1268] =?UTF-8?q?=E9=87=8D=E4=BF=AE=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=91=BD=E5=90=8D=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030541/LeetCode_1_541.java | 37 +++++++++++++++++++ Week_01/G20200343030541/LeetCode_283_089.java | 29 +++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 Week_01/G20200343030541/LeetCode_1_541.java create mode 100644 Week_01/G20200343030541/LeetCode_283_089.java diff --git a/Week_01/G20200343030541/LeetCode_1_541.java b/Week_01/G20200343030541/LeetCode_1_541.java new file mode 100644 index 00000000..f95bbafa --- /dev/null +++ b/Week_01/G20200343030541/LeetCode_1_541.java @@ -0,0 +1,37 @@ +import java.util.HashMap; +import java.util.Map; + +public class LeetCode_1_541 { + public int[] twoSumSolution1(int[] nums, int target) { + for (int i = 0; i< nums.length; i++) { + for (int j = i + 1; j < nums.length; j++) { + if ( nums[i] + nums[j] == target) { + return new int[] {i, j}; + } + } + } + throw new IllegalArgumentException("No two sum solution"); + } + + public int[] twoSumSolution2(int[] nums, int target) { + Map map = new HashMap<>(); + for(int i=0; i < nums.length; i++) { + int remaining = target - nums[i]; + if (map.containsKey(remaining)) { + return new int[] {map.get(remaining), i}; + } + map.put(nums[i], i); + } + throw new IllegalArgumentException("No two sum solution"); + } + + public static void main(String[] args) { + LeetCode_1_541 test = new LeetCode_1_541(); + int[] nums = {1,2,3,4,5,6}; + int target = 3; + int[] result = test.twoSumSolution2(nums, target); + for (int aResult : result) { + System.out.println(aResult); + } + } +} diff --git a/Week_01/G20200343030541/LeetCode_283_089.java b/Week_01/G20200343030541/LeetCode_283_089.java new file mode 100644 index 00000000..c2ee4633 --- /dev/null +++ b/Week_01/G20200343030541/LeetCode_283_089.java @@ -0,0 +1,29 @@ +public class LeetCode_283_089 { + // 两次遍历解法 + public void solution1(int[] nums) { + int visited = 0; + // 移动非零元素 + for (int i =0; i < nums.length; ++i) { + if(nums[i] != 0) { + nums[visited++] = nums[i]; + } + } + // 将剩余空间填充为0 + for (int i=visited; i < nums.length; ++i) { + nums[i] = 0; + } + } + + // 一次遍历 + public void solution2(int[] nums) { + int pivot = 0; + for (int i=0; i < nums.length; i++) { + if (nums[i] != 0) { + int temp = nums[i]; + nums[i] = nums[pivot]; + nums[pivot++] = temp; + } + } + } + +} From 485287e96e27b5a08bcc4d7805ef63200dcd5502 Mon Sep 17 00:00:00 2001 From: samsonchen1989 Date: Sun, 16 Feb 2020 23:05:48 +0800 Subject: [PATCH 0239/1268] Homework 485-Week01. --- Week_01/G20200343030485/LeetCode26.cs | 23 +++++++++++++++++++++++ Week_01/G20200343030485/LeetCode66.cs | 18 ++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 Week_01/G20200343030485/LeetCode26.cs create mode 100644 Week_01/G20200343030485/LeetCode66.cs diff --git a/Week_01/G20200343030485/LeetCode26.cs b/Week_01/G20200343030485/LeetCode26.cs new file mode 100644 index 00000000..e1e8e683 --- /dev/null +++ b/Week_01/G20200343030485/LeetCode26.cs @@ -0,0 +1,23 @@ +public class Solution { + public int RemoveDuplicates(int[] nums) + { + if (nums.Length == 0) + { + return 0; + } + + int j = 1; + int trackInt = nums[0]; + for (int i = 1; i < nums.Length; i++) + { + if (nums[i] != trackInt) + { + nums[j] = nums[i]; + j++; + trackInt = nums[i]; + } + } + + return j; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030485/LeetCode66.cs b/Week_01/G20200343030485/LeetCode66.cs new file mode 100644 index 00000000..92737a21 --- /dev/null +++ b/Week_01/G20200343030485/LeetCode66.cs @@ -0,0 +1,18 @@ +public class Solution { + public int[] PlusOne(int[] digits) { + for (int i = digits.Length - 1; i >= 0; i--) { + digits[i]++; + if (digits[i] == 10) { + digits[i] = 0; + } + else { + return digits; + } + } + + digits = new int[digits.Length + 1]; + digits[0] = 1; + + return digits; + } +} \ No newline at end of file From c9c442c83dc610420cd9c52915d3a6877fd5306e Mon Sep 17 00:00:00 2001 From: Sun Liang Date: Mon, 17 Feb 2020 00:07:28 +0900 Subject: [PATCH 0240/1268] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E5=91=A8=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A=EF=BC=8C189=E6=97=8B=E8=BD=AC=E6=95=B0=E7=BB=84?= =?UTF-8?q?=EF=BC=8C283=E7=A7=BB=E5=8A=A8=E9=9B=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030509/189_509.java | 40 ++++++++++++++++++++++++++++ Week_01/G20200343030509/283_509.java | 0 2 files changed, 40 insertions(+) create mode 100644 Week_01/G20200343030509/189_509.java create mode 100644 Week_01/G20200343030509/283_509.java diff --git a/Week_01/G20200343030509/189_509.java b/Week_01/G20200343030509/189_509.java new file mode 100644 index 00000000..a11c5959 --- /dev/null +++ b/Week_01/G20200343030509/189_509.java @@ -0,0 +1,40 @@ +/* + * @lc app=leetcode.cn id=189 lang=java + * + * [189] 旋转数组 + */ + +// @lc code=start +class Solution { + + //三次旋转 + public void rotate(int[] nums, int k) { + k %= nums.length; + reverse(nums, 0, nums.length - 1); + reverse(nums, 0, k-1); + reverse(nums, k, nums.length -1); + } + + public void reverse(int[] nums, int start, int end) { + while(start < end) { + int temp = nums[start]; + nums[start] = nums[end]; + nums[end] = temp; + start++; + end--; + } + } + + //暴力 + public void rotate2(int[] nums, int k) { + int temp, pre; + for (int i = 0; i < k; i++) { + pre = nums[nums.length - 1]; + for ( int j=0; j < nums.length; j++) { + temp = nums[j]; + nums[j] = pre; + pre = temp; + } + } + } +} \ No newline at end of file diff --git a/Week_01/G20200343030509/283_509.java b/Week_01/G20200343030509/283_509.java new file mode 100644 index 00000000..e69de29b From 07ba6584cec22d2ee92bc9bd82b5975b129ca618 Mon Sep 17 00:00:00 2001 From: samsonchen1989 Date: Sun, 16 Feb 2020 23:09:33 +0800 Subject: [PATCH 0241/1268] Rename file. --- Week_01/G20200343030485/{LeetCode26.cs => LeetCode_26_485.cs} | 0 Week_01/G20200343030485/{LeetCode66.cs => LeetCode_66_485.cs} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename Week_01/G20200343030485/{LeetCode26.cs => LeetCode_26_485.cs} (100%) rename Week_01/G20200343030485/{LeetCode66.cs => LeetCode_66_485.cs} (100%) diff --git a/Week_01/G20200343030485/LeetCode26.cs b/Week_01/G20200343030485/LeetCode_26_485.cs similarity index 100% rename from Week_01/G20200343030485/LeetCode26.cs rename to Week_01/G20200343030485/LeetCode_26_485.cs diff --git a/Week_01/G20200343030485/LeetCode66.cs b/Week_01/G20200343030485/LeetCode_66_485.cs similarity index 100% rename from Week_01/G20200343030485/LeetCode66.cs rename to Week_01/G20200343030485/LeetCode_66_485.cs From 7459f009140dac2e5d58d45ee74bc1c49bde2a10 Mon Sep 17 00:00:00 2001 From: hotmap Date: Sun, 16 Feb 2020 23:10:02 +0800 Subject: [PATCH 0242/1268] commit week_01 homework code,from NO.451,leetcode 21 and 283 --- Week_01/G20200343030451/LeetCode_21_451.c | 32 ++++++++++++++++++++++ Week_01/G20200343030451/LeetCode_283_451.c | 16 +++++++++++ Week_01/G20200343030451/NOTE.md | 7 ++++- 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 Week_01/G20200343030451/LeetCode_21_451.c create mode 100644 Week_01/G20200343030451/LeetCode_283_451.c diff --git a/Week_01/G20200343030451/LeetCode_21_451.c b/Week_01/G20200343030451/LeetCode_21_451.c new file mode 100644 index 00000000..ce31de83 --- /dev/null +++ b/Week_01/G20200343030451/LeetCode_21_451.c @@ -0,0 +1,32 @@ +/** + * Definition for singly-linked list. + * struct ListNode { + * int val; + * struct ListNode *next; + * }; + */ +//21 merge-two-sorted-lists, LeetCode_21_451.c + +struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) { + if ( l1 == NULL ) return l2; + if ( l2 == NULL ) return l1; + + struct ListNode newlist; + struct ListNode* head = &newlist; + + while ( l1 && l2 ) { + if ( l1->val < l2->val ) { + head->next = l1; + l1 = l1->next; + } else { + head->next = l2; + l2 = l2->next; + } + head = head->next; + } + if ( l1 != NULL ) head->next = l1; + if ( l2 != NULL ) head->next = l2; + + head = newlist.next; + return head; +} \ No newline at end of file diff --git a/Week_01/G20200343030451/LeetCode_283_451.c b/Week_01/G20200343030451/LeetCode_283_451.c new file mode 100644 index 00000000..b90bde95 --- /dev/null +++ b/Week_01/G20200343030451/LeetCode_283_451.c @@ -0,0 +1,16 @@ +//283_move-zeroes.c +//代码文件命名规则:**LeetCode_题目序号_学号 Leetcode_283_451.c + +void moveZeroes(int* nums, int numsSize){ + int i = 0,j = 0; + for ( i = 0,j = 0; i < numsSize; i++ ) { + if ( *(nums+i) != 0 && i != j ) { + *(nums+j) = *(nums+i); + *(nums+i) = 0; + j++; + + } else if ( *(nums+i) != 0 && i == j) { + j++; + } + } +} \ No newline at end of file diff --git a/Week_01/G20200343030451/NOTE.md b/Week_01/G20200343030451/NOTE.md index 50de3041..a8081b68 100644 --- a/Week_01/G20200343030451/NOTE.md +++ b/Week_01/G20200343030451/NOTE.md @@ -1 +1,6 @@ -学习笔记 \ No newline at end of file +学习笔记 + +283 move_zeroes,对老师已经讲的题需要更快速度编写出来 +21 merge-two-sorted-lists,常用题写的更快一些 + + From e629c7eb81643fbaedef5402b42833b221e8237e Mon Sep 17 00:00:00 2001 From: VelvetMeng <18852851930@163.com> Date: Sun, 16 Feb 2020 23:12:03 +0800 Subject: [PATCH 0243/1268] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20LeetCode=5F1=5F5?= =?UTF-8?q?13.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030513/LeetCode_1_513.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Week_01/G20200343030513/LeetCode_1_513.java diff --git a/Week_01/G20200343030513/LeetCode_1_513.java b/Week_01/G20200343030513/LeetCode_1_513.java new file mode 100644 index 00000000..e98e04df --- /dev/null +++ b/Week_01/G20200343030513/LeetCode_1_513.java @@ -0,0 +1,13 @@ + +class Solution { + public int removeDuplicates(int[] nums) { + int index = 1; + for (int i = 1; i < nums.length; i++) { + if ( nums[i-1] != nums[i]) { + nums[index] = nums[i]; + index ++; + } + } + return index; + } +} From 42a7a58f6a8f9998d38dcb74908b1232db730fdc Mon Sep 17 00:00:00 2001 From: VelvetMeng <18852851930@163.com> Date: Sun, 16 Feb 2020 23:12:55 +0800 Subject: [PATCH 0244/1268] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20LeetCode=5F2=5F5?= =?UTF-8?q?13.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030513/LeetCode_2_513.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Week_01/G20200343030513/LeetCode_2_513.java diff --git a/Week_01/G20200343030513/LeetCode_2_513.java b/Week_01/G20200343030513/LeetCode_2_513.java new file mode 100644 index 00000000..1ba46aa5 --- /dev/null +++ b/Week_01/G20200343030513/LeetCode_2_513.java @@ -0,0 +1,11 @@ +class Solution { + public void rotate(int[] nums, int k) { + int arr[] = new int[nums.length]; + for (int i = 0; i < nums.length; i++) { + arr[(i + k) % nums.length] = nums[i]; + } + for (int j = 0; j < nums.length; j++) { + nums[j] = arr[j]; + } + } +} \ No newline at end of file From 023556a83a75f19b114d240e1ad3460b6e87cf1d Mon Sep 17 00:00:00 2001 From: VelvetMeng <18852851930@163.com> Date: Sun, 16 Feb 2020 23:13:24 +0800 Subject: [PATCH 0245/1268] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20LeetCode=5F3=5F5?= =?UTF-8?q?13.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030513/LeetCode_3_513.java | 27 +++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Week_01/G20200343030513/LeetCode_3_513.java diff --git a/Week_01/G20200343030513/LeetCode_3_513.java b/Week_01/G20200343030513/LeetCode_3_513.java new file mode 100644 index 00000000..e602b88b --- /dev/null +++ b/Week_01/G20200343030513/LeetCode_3_513.java @@ -0,0 +1,27 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode(int x) { val = x; } + * } + */ +class Solution { + public ListNode mergeTwoLists(ListNode l1, ListNode l2) { + ListNode res = new ListNode(-1); + ListNode tmp = res; + while (l1 != null && l2 != null){ + if (l1.val < l2.val) { + tmp.next = l1; + l1 = l1.next; + }else { + tmp.next = l2; + l2 = l2.next; + } + tmp = tmp.next; + } + tmp.next = (l1 == null ? l2 : l1); + return res.next; + + } +} \ No newline at end of file From 53b43961886117aec784782d0119072870419626 Mon Sep 17 00:00:00 2001 From: xiangxuan Date: Sun, 16 Feb 2020 23:14:24 +0800 Subject: [PATCH 0246/1268] =?UTF-8?q?543-Week=2001=20=E6=94=B9=E5=86=99?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=EF=BC=8C=E5=88=86=E6=9E=90Queue=E5=92=8CPrio?= =?UTF-8?q?rityQueue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030543/LeetCode_283_543.java | 16 ++++++++++++++++ Week_01/G20200343030543/MyDeque.java | 14 ++++++++++++++ ...y Queue \347\232\204\346\272\220\347\240\201" | 2 ++ 3 files changed, 32 insertions(+) create mode 100644 Week_01/G20200343030543/LeetCode_283_543.java create mode 100644 Week_01/G20200343030543/MyDeque.java create mode 100644 "Week_01/G20200343030543/\345\210\206\346\236\220 Queue \345\222\214 Priority Queue \347\232\204\346\272\220\347\240\201" diff --git a/Week_01/G20200343030543/LeetCode_283_543.java b/Week_01/G20200343030543/LeetCode_283_543.java new file mode 100644 index 00000000..5fac0596 --- /dev/null +++ b/Week_01/G20200343030543/LeetCode_283_543.java @@ -0,0 +1,16 @@ +class Solution { + public void moveZeroes(int[] nums) { + if(nums == null || nums.length == 0){ + return; + } + int index = 0; + for(int num : nums){ + if(num != 0){ + nums[index++] = num; + } + } + while(index < nums.length){ + nums[index++] = 0; + } + } +} \ No newline at end of file diff --git a/Week_01/G20200343030543/MyDeque.java b/Week_01/G20200343030543/MyDeque.java new file mode 100644 index 00000000..d30c9267 --- /dev/null +++ b/Week_01/G20200343030543/MyDeque.java @@ -0,0 +1,14 @@ + Deque deque = new LinkedList<>(); + deque.addFirst("a"); + deque.addLast("b"); + deque.addLast("c"); + System.out.println(deque); + + String str = deque.peekFirst(); + System.out.println(str); + System.out.println(deque); + + while(deque.size() > 0){ + System.out.println(deque.pollFirst()); + } + System.out.println(deque); diff --git "a/Week_01/G20200343030543/\345\210\206\346\236\220 Queue \345\222\214 Priority Queue \347\232\204\346\272\220\347\240\201" "b/Week_01/G20200343030543/\345\210\206\346\236\220 Queue \345\222\214 Priority Queue \347\232\204\346\272\220\347\240\201" new file mode 100644 index 00000000..0fff625e --- /dev/null +++ "b/Week_01/G20200343030543/\345\210\206\346\236\220 Queue \345\222\214 Priority Queue \347\232\204\346\272\220\347\240\201" @@ -0,0 +1,2 @@ +java中的Queue是个接口,Priority实现了Queue接口。 +Priority优先队列底层实现是堆,插入需要维护元素的权值 \ No newline at end of file From b8257f1b1efa92a9a6db90369cefb5589add2b40 Mon Sep 17 00:00:00 2001 From: majingyuan Date: Sun, 16 Feb 2020 23:16:19 +0800 Subject: [PATCH 0247/1268] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E6=88=90=E5=8A=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../deque641/MyCircularDeque.java | 140 ++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 Week_00/G20200343030375/deque641/MyCircularDeque.java diff --git a/Week_00/G20200343030375/deque641/MyCircularDeque.java b/Week_00/G20200343030375/deque641/MyCircularDeque.java new file mode 100644 index 00000000..ed33eb38 --- /dev/null +++ b/Week_00/G20200343030375/deque641/MyCircularDeque.java @@ -0,0 +1,140 @@ +package G20200343030375.deque641; + +import java.util.LinkedList; + +class MyCircularDeque { + private int size; + private int length; + private Node header; + private Node end; + + /** Initialize your data structure here. Set the size of the deque to be k. */ + public MyCircularDeque(int k) { + this.size =k; + LinkedList linkedList = new LinkedList(); + + } + + /** Adds an item at the front of Deque. Return true if the operation is successful. */ + public boolean insertFront(int value) { + if(size>length){ + + Node node = new Node(value); + if(header == null){ + this.init(node); + }else { + node.next = header; + header.pr = node; + header = node; + } + length++; + return true; + }else{ + return false; + } + + } + + /** Adds an item at the rear of Deque. Return true if the operation is successful. */ + public boolean insertLast(int value) { + if(!isFull()){ + Node node = new Node(value); + if(end == null){ + this.init(node); + }else { + node.pr = end; + end.next = node; + end=node; + } + length++; + return true; + }else{ + return false; + } + } + + /** Deletes an item from the front of Deque. Return true if the operation is successful. */ + public boolean deleteFront() { + if(length>1&&length!=1){ + header = header.next; + header.pr = null; + length--; + return true; + } else if(length == 1){ + header=null; + end =null; + length--; + return true; + } + return false; + + + } + + /** Deletes an item from the rear of Deque. Return true if the operation is successful. */ + public boolean deleteLast() { + if(length>0&&length!=1){ + end = end.pr; + end.next = null; + + length--; + return true; + }else if(length == 1){ + header = null; + end = null; + length--; + return true; + } + return false; + + } + + /** Get the front item from the deque. */ + public int getFront() { + if(isEmpty()){ + return -1; + } + int result = header.value; + return result; + } + + /** Get the last item from the deque. */ + public int getRear() { + if(isEmpty()){ + return -1; + } + int result = end.value; + return result; + } + + /** Checks whether the circular deque is empty or not. */ + public boolean isEmpty() { + if(length>0){ + return false; + } + return true; + } + + /** Checks whether the circular deque is full or not. */ + public boolean isFull() { + if(size >length ){ + return false; + }else { + return true; + } + } + private void init(Node node){ + header = node; + end = node; + } + + private class Node { + Node next; + Node pr; + int value ; + public Node(int value){ + this.value = value; + } + } + +} From 7525c46efad8bf3282d6a79a0fc063edb10134c0 Mon Sep 17 00:00:00 2001 From: wangxuefei Date: Sat, 15 Feb 2020 09:39:23 +0800 Subject: [PATCH 0248/1268] week 1 homework --- Week_01/G20200343030361/LeetCode_21_361.js | 20 ++++++++++++++++++++ Week_01/G20200343030361/LeetCode_283_361.rb | 14 ++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 Week_01/G20200343030361/LeetCode_21_361.js create mode 100644 Week_01/G20200343030361/LeetCode_283_361.rb diff --git a/Week_01/G20200343030361/LeetCode_21_361.js b/Week_01/G20200343030361/LeetCode_21_361.js new file mode 100644 index 00000000..3b9c1564 --- /dev/null +++ b/Week_01/G20200343030361/LeetCode_21_361.js @@ -0,0 +1,20 @@ +var mergeTwoLists = function(l1, l2) { + let preHead = {}; + let prev = preHead; + + while (l1 && l2) { + if (l1.val < l2.val) { + prev.next = l1; + l1 = l1.next; + } else { + prev.next = l2; + l2 = l2.next; + } + + prev = prev.next; + } + + prev.next = l1 == null ? l2 : l1; + + return preHead.next; +}; diff --git a/Week_01/G20200343030361/LeetCode_283_361.rb b/Week_01/G20200343030361/LeetCode_283_361.rb new file mode 100644 index 00000000..29dacb09 --- /dev/null +++ b/Week_01/G20200343030361/LeetCode_283_361.rb @@ -0,0 +1,14 @@ +def move_zeroes(nums) + noneZeroIndex = 0 + + nums.each_with_index do |n, indx| + next unless n != 0 + nums[noneZeroIndex] = n + + nums[indx] = 0 if indx != noneZeroIndex + + noneZeroIndex += 1 + end + + nums +end From d7253b971d8f5c4d865d5432c58283ce1d1250da Mon Sep 17 00:00:00 2001 From: majingyuan Date: Sun, 16 Feb 2020 23:27:41 +0800 Subject: [PATCH 0249/1268] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E6=88=90=E5=8A=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{rotateArray189/Solution.java => LeetCode_189_375.java} | 4 ++-- .../MyCircularDeque.java => LeetCode_641_375.java} | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) rename Week_00/G20200343030375/{rotateArray189/Solution.java => LeetCode_189_375.java} (84%) rename Week_00/G20200343030375/{deque641/MyCircularDeque.java => LeetCode_641_375.java} (97%) diff --git a/Week_00/G20200343030375/rotateArray189/Solution.java b/Week_00/G20200343030375/LeetCode_189_375.java similarity index 84% rename from Week_00/G20200343030375/rotateArray189/Solution.java rename to Week_00/G20200343030375/LeetCode_189_375.java index 39c69c0b..b2d261b2 100644 --- a/Week_00/G20200343030375/rotateArray189/Solution.java +++ b/Week_00/G20200343030375/LeetCode_189_375.java @@ -1,10 +1,10 @@ -package G20200343030375.rotateArray189; +package G20200343030375; /** * 第一种实现方式 * 暴力实现 */ -class Solution { +class LeetCode_189_375 { public void rotate(int[] nums, int k) { for(int i=1;i<=k;++i){ int temp = nums[nums.length-1]; diff --git a/Week_00/G20200343030375/deque641/MyCircularDeque.java b/Week_00/G20200343030375/LeetCode_641_375.java similarity index 97% rename from Week_00/G20200343030375/deque641/MyCircularDeque.java rename to Week_00/G20200343030375/LeetCode_641_375.java index ed33eb38..45586741 100644 --- a/Week_00/G20200343030375/deque641/MyCircularDeque.java +++ b/Week_00/G20200343030375/LeetCode_641_375.java @@ -1,15 +1,15 @@ -package G20200343030375.deque641; +package G20200343030375; import java.util.LinkedList; -class MyCircularDeque { +class LeetCode_641_375 { private int size; private int length; private Node header; private Node end; /** Initialize your data structure here. Set the size of the deque to be k. */ - public MyCircularDeque(int k) { + public LeetCode_641_375(int k) { this.size =k; LinkedList linkedList = new LinkedList(); From d38123afa9d6d32f415890947b24f8a332850d02 Mon Sep 17 00:00:00 2001 From: "paul.ciou" Date: Sun, 16 Feb 2020 23:31:53 +0800 Subject: [PATCH 0250/1268] 191 and 283 --- Week_01/G20190343010191/LeetCode_1_191.py | 132 ++++++++++++++++++++ Week_01/G20190343010191/LeetCode_283_191.py | 118 +++++++++++++++++ 2 files changed, 250 insertions(+) create mode 100644 Week_01/G20190343010191/LeetCode_1_191.py create mode 100644 Week_01/G20190343010191/LeetCode_283_191.py diff --git a/Week_01/G20190343010191/LeetCode_1_191.py b/Week_01/G20190343010191/LeetCode_1_191.py new file mode 100644 index 00000000..b864a17c --- /dev/null +++ b/Week_01/G20190343010191/LeetCode_1_191.py @@ -0,0 +1,132 @@ +''' +https://leetcode.com/problems/two-sum/ + +Given an array of integers, return indices of the two numbers such that they add up to a specific target. + +You may assume that each input would have exactly one solution, and you may not use the same element twice. + +给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 + +你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 + +Example: + +Given nums = [2, 7, 11, 15], target = 9, + +Because nums[0] + nums[1] = 2 + 7 = 9, +return [0, 1]. + +''' + +# 思路1 +''' +暴力法 + + +遍歷所有數組 +外層loop i:n-1 + 內層loop 從 i+1:n + 由於假設每種輸入只會對應一組答案,所以 + 找到相加等於目標數字立即返回(i,j) + +time complexity: O(n^2) +leetcode result: +Accepted 5988 ms 13.7 MB +''' + + +class Solution1: + def twoSum(self, nums, target: int): + n = len(nums) + for i in range(n - 1): + for j in range(i + 1, n): + if nums[i] + nums[j] == target: + return [i, j] + + +''' +思路2: +先將裡面的元素由小到大做排序,時間複雜度為logN +再用左右夾逼的方式移動元素 +若兩元素相加> target +則把最右邊的j 往左移 +若兩元素相加< target +則把最左的元素向右移 +直到兩指針相交 (i==j) + +time complexity: O(N) + +leetcode result: +Runtime: 52 ms, faster than 56.49% of Python3 online submissions for Two Sum. +Memory Usage: 14 MB, less than 65.58% of Python3 online submissions for Two Sum. +''' + + +class Solution2: + def twoSum(self, nums, target: int): + orignal_list = nums.copy() + n = len(nums) + nums.sort() + i = 0 + j = n - 1 + while True: + if (nums[i] + nums[j] > target): + j = j - 1 + elif (nums[i] + nums[j] < target): + i = i + 1 + else: + break; + return self._find_index(orignal_list, nums[i], nums[j]) + + def _find_index(self, input_list, a, b): + index_a = input_list.index(a) + index_b = input_list.index(b) + # 去重 + if index_a == index_b: + [index_a, index_b] = [i for i, x in enumerate(input_list) if x == a] + return [index_a, index_b] + + +''' +解法3 空間換時間(字典) +這邊哈希表我還不太熟,待以後來補全解法 +目前先用空間換時間的做法來試試 + +想法為用字典來儲存target - list 中的每一個元素 +如果之後遇到list 中的新元素存在於字典中,表示這個新元素與之前的結果是相匹配的 +=========== +一開始先檢查字典中是否有當前list中的元素 + +若有 則返回字典的key 值與當前list的位址 (表示湊到一對) +若無 則將目前list的位址與減完的結果一併存於字典中,以利後續查找 + +此法只比前面快了一點點(4ms) 、時間複雜度應為 O(N) +多用了0.2mb 的ram +但這取決於array 的大小 +不過代碼是簡潔了很多 + +Runtime: 48 ms, faster than 79.16% of Python3 online submissions for Two Sum. +Memory Usage: 14.2 MB, less than 56.04% of Python3 online submissions for Two Sum. + +''' + + +class Solution3: + def twoSum(self, nums, target: int): + temp_dict = {} + for key, item in enumerate(nums): + check_result = target - item + if item in temp_dict: + return [temp_dict[item], key] + else: + temp_dict[check_result] = key + + + + +if __name__ == "__main__": + # k=[4,5,1,3,2] + # k.sort() + # print(k)3 + s1 = Solution3().twoSum([4, 3, 3], 6) + print(s1) diff --git a/Week_01/G20190343010191/LeetCode_283_191.py b/Week_01/G20190343010191/LeetCode_283_191.py new file mode 100644 index 00000000..599125c7 --- /dev/null +++ b/Week_01/G20190343010191/LeetCode_283_191.py @@ -0,0 +1,118 @@ +''' +Given an array nums, write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements. + +Example: + +Input: [0,1,0,3,12] +Output: [1,3,12,0,0] +Note: + +* You must do this in-place without making a copy of the array. +* Minimize the total number of operations. +''' + +''' +给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序 + +必须在原数组上操作,不能拷贝额外的数组。 +尽量减少操作次数。 + +''' + +''' +思路1 + +暴力法 + + +遇到0元素即刪除此元刪 + +最後把list末尾填上0 + +Runtime: 44 ms, faster than 91.28% of Python3 online submissions for Move Zeroes. +Memory Usage: 13.9 MB, less than 100.00% of Python3 online submissions for Move Zeroes. + +意外結果還不錯? +''' + + +class Solution1: + def moveZeroes(self, nums): + """ + Do not return anything, modify nums in-place instead. + """ + nums_len = len(nums) + j = 0 + for i in range(nums_len): + if nums[j] == 0: + del nums[j] + j = j - 1 + + j = j + 1 + for i in range(nums_len - len(nums)): + nums.append(0) + + +''' + +思路2 開新數組(題目不允許此操作) + +將非零元素填入新數組,最後按長度補0 + + +Runtime: 44 ms, faster than 91.28% of Python3 online submissions for Move Zeroes. +Memory Usage: 14 MB, less than 100.00% of Python3 online submissions for Move Zeroes. +''' + + +class Solution2: + def moveZeroes(self, nums): + """ + Do not return anything, modify nums in-place instead. + """ + + temp_list = [] + for item in nums: + if item != 0: + temp_list.append(item) + + for i in range(len(nums) - len(temp_list)): + temp_list.append(0) + nums[:] = temp_list[:] + + +''' + +思路3,雙指針操作 + + +用i 遍歷整個數組 +用j 記錄非零元素的位址 +所以遇到0 元素的時候,j 不應該移動。意思就是只有遇上非零元素時,j 才會移動 + +Runtime: 36 ms, faster than 99.49% of Python3 online submissions for Move Zeroes. +Memory Usage: 14 MB, less than 100.00% of Python3 online submissions for Move Zeroes. + +這效果最好 不愧是老師教的 +''' + + +class Solution3: + def moveZeroes(self, nums): + """ + Do not return anything, modify nums in-place instead. + """ + j = 0 + for i in range(len(nums)): + if nums[i] != 0: + nums[j] = nums[i] + if i != j: + nums[i] = 0 + j = j + 1 + + +if __name__ == "__main__": + a = [0, 0, 0, 0, 0, 0, 1] + s1 = Solution2() + s1.moveZeroes(a) + print(a) From 9703216e04f985ab8cb63a233a9235a260066e64 Mon Sep 17 00:00:00 2001 From: "paul.ciou" Date: Sun, 16 Feb 2020 23:44:58 +0800 Subject: [PATCH 0251/1268] modified note.md --- Week_01/G20190343010191/NOTE.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Week_01/G20190343010191/NOTE.md b/Week_01/G20190343010191/NOTE.md index 50de3041..ea9083bd 100644 --- a/Week_01/G20190343010191/NOTE.md +++ b/Week_01/G20190343010191/NOTE.md @@ -1 +1,14 @@ -学习笔记 \ No newline at end of file +学习笔记 +這周比較多考試只趕著做了兩題,很有意思 +下週再慢慢把其他題目補齊 +我這兩題都自已寫了暴力法 +很拙的解法 +還有老師推薦的解法 +看到時間縮短真的很高興 +感覺到算法的樂趣了! +


+這週學習重點: +* 熟悉雙指針操作 +* 熟悉雙邊逼近 + +希望以後越來越好!感謝老師! \ No newline at end of file From b0e350c53aa3a83011db18a62d137b7108c0e81c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=B6=A6=E7=82=9C?= Date: Sun, 16 Feb 2020 23:45:57 +0800 Subject: [PATCH 0252/1268] feat: add LeetCode_283_387.js --- Week_01/G20200343030387/LeetCode_283_387.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Week_01/G20200343030387/LeetCode_283_387.js diff --git a/Week_01/G20200343030387/LeetCode_283_387.js b/Week_01/G20200343030387/LeetCode_283_387.js new file mode 100644 index 00000000..e91156f9 --- /dev/null +++ b/Week_01/G20200343030387/LeetCode_283_387.js @@ -0,0 +1,16 @@ +/** + * @param {number[]} nums + * @return {void} Do not return anything, modify nums in-place instead. + */ +var moveZeroes = function(nums) { + let j = 0 + for (let i = 0; i < nums.length; i++) { + if (nums[i] !== 0) { + if (i !== j) { + nums[j] = nums[i] + nums[i] = 0 + } + j++ + } + } +} From be0468dc20c83d267c71e4896077f534e015f201 Mon Sep 17 00:00:00 2001 From: zithan Date: Sun, 16 Feb 2020 23:48:49 +0800 Subject: [PATCH 0253/1268] 623_week01 --- Week_01/G20200343030623/LeetCode_189_623.php | 33 ++++++++++++++++++++ Week_01/G20200343030623/LeetCode_1_623.php | 19 +++++++++++ Week_01/G20200343030623/LeetCode_21_623.php | 30 ++++++++++++++++++ 3 files changed, 82 insertions(+) create mode 100644 Week_01/G20200343030623/LeetCode_189_623.php create mode 100644 Week_01/G20200343030623/LeetCode_1_623.php create mode 100644 Week_01/G20200343030623/LeetCode_21_623.php diff --git a/Week_01/G20200343030623/LeetCode_189_623.php b/Week_01/G20200343030623/LeetCode_189_623.php new file mode 100644 index 00000000..f09cc106 --- /dev/null +++ b/Week_01/G20200343030623/LeetCode_189_623.php @@ -0,0 +1,33 @@ + $len) { + $k = $k % $len; + } + $nums = $this->reverse($nums, 0, $len - 1); + $nums = $this->reverse($nums, 0, $k - 1); + $nums = $this->reverse($nums, $k, $len - 1); + return $nums; + } + + private function reverse($nums, $left, $right) + { + while ($left <= $right) { + $temp = $nums[$left]; + $nums[$left] = $nums[$right]; + $nums[$right] = $temp; + $left++; + $right--; + } + + return $nums; + } +} diff --git a/Week_01/G20200343030623/LeetCode_1_623.php b/Week_01/G20200343030623/LeetCode_1_623.php new file mode 100644 index 00000000..c7d1ddc6 --- /dev/null +++ b/Week_01/G20200343030623/LeetCode_1_623.php @@ -0,0 +1,19 @@ + $num) { + $difference = $target - $num; + if(isset($hashArr[$difference]) && $hashArr[$difference]!== $i) { + return [$i,$hashArr[$difference]]; + } + } + } +} diff --git a/Week_01/G20200343030623/LeetCode_21_623.php b/Week_01/G20200343030623/LeetCode_21_623.php new file mode 100644 index 00000000..6f7954fc --- /dev/null +++ b/Week_01/G20200343030623/LeetCode_21_623.php @@ -0,0 +1,30 @@ +val = $val; } + * } + */ +class Solution { + + /** + * @param ListNode $l1 + * @param ListNode $l2 + * @return ListNode + */ + function mergeTwoLists($l1, $l2) { + if ($l1 == null) return $l2; + if ($l2 == null) return $l1; + + if ($l1->val < $l2->val) { + $l1->next = $this->mergeTwoLists($l1->next, $l2); + return $l1; + } else { + $l2->next = $this->mergeTwoLists($l2->next, $l1); + return $l2; + } + } +} From edff7bfff63779cdf8190a4bd994de47c32c29a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=B6=A6=E7=82=9C?= Date: Sun, 16 Feb 2020 23:55:49 +0800 Subject: [PATCH 0254/1268] =?UTF-8?q?refactor:=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E7=AE=97=E6=B3=95=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030387/LeetCode_283_387.js | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/Week_01/G20200343030387/LeetCode_283_387.js b/Week_01/G20200343030387/LeetCode_283_387.js index e91156f9..0b457a5a 100644 --- a/Week_01/G20200343030387/LeetCode_283_387.js +++ b/Week_01/G20200343030387/LeetCode_283_387.js @@ -2,15 +2,21 @@ * @param {number[]} nums * @return {void} Do not return anything, modify nums in-place instead. */ +/** + * 双指针法 + * 一个指针指向当前遍历到的最后一个零元素,另一个是自然遍历的; + * 如果两指针指向的值不等(即当前指针指向非零元素),交换两指针的值,两指针同时往后移一位; + * 否则只是当前指针移一位; + */ var moveZeroes = function(nums) { - let j = 0 - for (let i = 0; i < nums.length; i++) { - if (nums[i] !== 0) { - if (i !== j) { - nums[j] = nums[i] - nums[i] = 0 + let lastNonZeroFoundAt = 0 + for (let current = 0; current < nums.length; current++) { + if (nums[current] !== 0) { + if (current !== lastNonZeroFoundAt) { + nums[lastNonZeroFoundAt] = nums[current] + nums[current] = 0 } - j++ + lastNonZeroFoundAt++ } } } From f24f09f6c7dd35ac76b965ae172fb498bae33ecb Mon Sep 17 00:00:00 2001 From: caidongsen <1030683070@qq.com> Date: Mon, 17 Feb 2020 00:04:59 +0800 Subject: [PATCH 0255/1268] 617-Week 01 --- Week_01/G20200343030617/LeetCode_10_617.go | 137 +++++++++++++++++++++ Week_01/G20200343030617/LeetCode_1_617.go | 19 +++ 2 files changed, 156 insertions(+) create mode 100644 Week_01/G20200343030617/LeetCode_10_617.go create mode 100644 Week_01/G20200343030617/LeetCode_1_617.go diff --git a/Week_01/G20200343030617/LeetCode_10_617.go b/Week_01/G20200343030617/LeetCode_10_617.go new file mode 100644 index 00000000..2ad406b6 --- /dev/null +++ b/Week_01/G20200343030617/LeetCode_10_617.go @@ -0,0 +1,137 @@ +//设计实现双端队列。 +//你的实现需要支持以下操作: +// +//MyCircularDeque(k):构造函数,双端队列的大小为k。 +//insertFront():将一个元素添加到双端队列头部。 如果操作成功返回 true。 +//insertLast():将一个元素添加到双端队列尾部。如果操作成功返回 true。 +//deleteFront():从双端队列头部删除一个元素。 如果操作成功返回 true。 +//deleteLast():从双端队列尾部删除一个元素。如果操作成功返回 true。 +//getFront():从双端队列头部获得一个元素。如果双端队列为空,返回 -1。 +//getRear():获得双端队列的最后一个元素。 如果双端队列为空,返回 -1。 +//isEmpty():检查双端队列是否为空。 +//isFull():检查双端队列是否满了。 + +package main + +//结点 +type Node struct { + Data int + Pre *Node + Next *Node +} + +type MyCircularDeque struct { + First *Node + Last *Node + Size int + Cap int +} + +/** Initialize your data structure here. Set the size of the deque to be k. */ +func Constructor(k int) MyCircularDeque { + s := new(Node) + s.Pre, s.Next = s, s + return MyCircularDeque{s, s, 0, k} +} + +/** Adds an item at the front of Deque. Return true if the operation is successful. */ +func (this *MyCircularDeque) InsertFront(value int) bool { + if this.Cap == this.Size { + return false + } + s := new(Node) + s.Data = value + s.Next = this.First.Next + this.First.Next.Pre = s + + this.First.Next = s + s.Pre = this.First + if this.Size == 0 { + this.Last = s + } + this.Size++ + return true +} + +/** Adds an item at the rear of Deque. Return true if the operation is successful. */ +func (this *MyCircularDeque) InsertLast(value int) bool { + if this.Cap == this.Size { + return false + } + s := new(Node) + s.Data = value + this.Last.Next = s + s.Pre = this.Last + + this.Last = s + this.Last.Next = this.First + this.First.Pre = this.Last + this.Size++ + return true +} + +/** Deletes an item from the front of Deque. Return true if the operation is successful. */ +func (this *MyCircularDeque) DeleteFront() bool { + if this.IsEmpty() { + return false + } + s := this.First.Next //找到第一个节点 + this.First.Next = s.Next + s.Next.Pre = this.First + if this.Size == 1 { + this.Last = this.First + } + this.Size-- + return true +} + +/** Deletes an item from the rear of Deque. Return true if the operation is successful. */ +func (this *MyCircularDeque) DeleteLast() bool { + if this.IsEmpty() { + return false + } + s := this.Last.Pre //找到最后一个节点的前驱 + s.Next = this.First + this.Last = s + this.Size-- + return true +} + +/** Get the front item from the deque. */ +func (this *MyCircularDeque) GetFront() int { + if this.IsEmpty() { + return -1 + } + return this.First.Next.Data +} + +/** Get the last item from the deque. */ +func (this *MyCircularDeque) GetRear() int { + if this.IsEmpty() { + return -1 + } + return this.Last.Data +} + +/** Checks whether the circular deque is empty or not. */ +func (this *MyCircularDeque) IsEmpty() bool { + return this.Size == 0 +} + +/** Checks whether the circular deque is full or not. */ +func (this *MyCircularDeque) IsFull() bool { + return this.Cap == this.Size +} + +/** + * Your MyCircularDeque object will be instantiated and called as such: + * obj := Constructor(k); + * param_1 := obj.InsertFront(value); + * param_2 := obj.InsertLast(value); + * param_3 := obj.DeleteFront(); + * param_4 := obj.DeleteLast(); + * param_5 := obj.GetFront(); + * param_6 := obj.GetRear(); + * param_7 := obj.IsEmpty(); + * param_8 := obj.IsFull(); + */ diff --git a/Week_01/G20200343030617/LeetCode_1_617.go b/Week_01/G20200343030617/LeetCode_1_617.go new file mode 100644 index 00000000..adb8106a --- /dev/null +++ b/Week_01/G20200343030617/LeetCode_1_617.go @@ -0,0 +1,19 @@ +//给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 +//不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 + +package main + +func removeDuplicates(nums []int) int { + length := len(nums) + if length == 0 { + return 0 + } + p := 1 + for i := 1; i < length; i++ { + if nums[i] != nums[p-1] { + nums[p] = nums[i] + p++ + } + } + return p +} From f0de1848f5ce6a467c3cb60a86461966fb606125 Mon Sep 17 00:00:00 2001 From: MiaoRain Date: Sun, 16 Feb 2020 17:12:15 +0100 Subject: [PATCH 0256/1268] 433-Week 01 --- Week_01/G20200343030433/LeetCode_01_433.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Week_01/G20200343030433/LeetCode_01_433.py diff --git a/Week_01/G20200343030433/LeetCode_01_433.py b/Week_01/G20200343030433/LeetCode_01_433.py new file mode 100644 index 00000000..fe93c17f --- /dev/null +++ b/Week_01/G20200343030433/LeetCode_01_433.py @@ -0,0 +1,17 @@ +# +# @lc app=leetcode.cn id=1 lang=python3 +# +# [1] 两数之和 +# + +# @lc code=start +class Solution: + def twoSum(self, nums: List[int], target: int) -> List[int]: + dict = {} + for i in range(len(nums)): + if target-nums[i] not in dict: + dict[nums[i]] = i + else: + return [dict[target-nums[i]], i] +# @lc code=end + From 0c147cfd9fcb9b950c619711a1e2738a2cdb9014 Mon Sep 17 00:00:00 2001 From: lyb <1040087877@qq.com> Date: Mon, 17 Feb 2020 00:18:55 +0800 Subject: [PATCH 0257/1268] 379-Week 01 --- Week_01/G20200343030379/LeetCode_1_379.java | 65 ++++++++++++++++++++ Week_01/G20200343030379/LeetCode_26_379.java | 55 +++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 Week_01/G20200343030379/LeetCode_1_379.java create mode 100644 Week_01/G20200343030379/LeetCode_26_379.java diff --git a/Week_01/G20200343030379/LeetCode_1_379.java b/Week_01/G20200343030379/LeetCode_1_379.java new file mode 100644 index 00000000..6144f4f3 --- /dev/null +++ b/Week_01/G20200343030379/LeetCode_1_379.java @@ -0,0 +1,65 @@ +package G20200343030379; + +import java.util.HashMap; +import java.util.Stack; + +/** + * @ClassName: + * @Description: TODO + * @author linyb3 + * @date + */ +public class LeetCode_1_379 { + public class ListNode { + int val; + ListNode next; + ListNode(int x) { val = x; } + } + //ݹ鷨 + public ListNode mergeTwoLists(ListNode l1, ListNode l2) { + if(l1==null){ + return l2; + } + + if(l2==null){ + return l1; + } + + if(l1.val1){ + // head=0; + // tail=1; + // }else{ + // //ֻһԭ + // return count; + // } + int c=0; + for(;tailnums.length-1){ + return count; + } + + //ͬƶhead + if(nums[head]!=nums[tail]){ //System.out.print(""); + head++; + nums[head]=nums[tail]; + count++; + tail++; + } + //c++; + } + //System.out.print(""); + //System.out.print(c); + return count; + } +} From 5cb8a24d603339b07f520af3c0b51d021e97cfaf Mon Sep 17 00:00:00 2001 From: gaoyishu Date: Mon, 17 Feb 2020 00:20:26 +0800 Subject: [PATCH 0258/1268] week_1 --- Week_01/G20200343030493/.idea/.gitignore | 2 + .../G20200343030493/.idea/G20200343030493.iml | 9 +++ .../G20200343030493/.idea/leetcode/editor.xml | 17 ++++++ Week_01/G20200343030493/.idea/misc.xml | 6 ++ Week_01/G20200343030493/.idea/modules.xml | 8 +++ Week_01/G20200343030493/.idea/vcs.xml | 6 ++ Week_01/G20200343030493/removeDuplicates.java | 56 +++++++++++++++++++ Week_01/G20200343030493/rotate.java | 43 ++++++++++++++ 8 files changed, 147 insertions(+) create mode 100644 Week_01/G20200343030493/.idea/.gitignore create mode 100644 Week_01/G20200343030493/.idea/G20200343030493.iml create mode 100644 Week_01/G20200343030493/.idea/leetcode/editor.xml create mode 100644 Week_01/G20200343030493/.idea/misc.xml create mode 100644 Week_01/G20200343030493/.idea/modules.xml create mode 100644 Week_01/G20200343030493/.idea/vcs.xml create mode 100644 Week_01/G20200343030493/removeDuplicates.java create mode 100644 Week_01/G20200343030493/rotate.java diff --git a/Week_01/G20200343030493/.idea/.gitignore b/Week_01/G20200343030493/.idea/.gitignore new file mode 100644 index 00000000..5c98b428 --- /dev/null +++ b/Week_01/G20200343030493/.idea/.gitignore @@ -0,0 +1,2 @@ +# Default ignored files +/workspace.xml \ No newline at end of file diff --git a/Week_01/G20200343030493/.idea/G20200343030493.iml b/Week_01/G20200343030493/.idea/G20200343030493.iml new file mode 100644 index 00000000..d6ebd480 --- /dev/null +++ b/Week_01/G20200343030493/.idea/G20200343030493.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/Week_01/G20200343030493/.idea/leetcode/editor.xml b/Week_01/G20200343030493/.idea/leetcode/editor.xml new file mode 100644 index 00000000..9f0a81af --- /dev/null +++ b/Week_01/G20200343030493/.idea/leetcode/editor.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/Week_01/G20200343030493/.idea/misc.xml b/Week_01/G20200343030493/.idea/misc.xml new file mode 100644 index 00000000..28a804d8 --- /dev/null +++ b/Week_01/G20200343030493/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/Week_01/G20200343030493/.idea/modules.xml b/Week_01/G20200343030493/.idea/modules.xml new file mode 100644 index 00000000..0f9f3f18 --- /dev/null +++ b/Week_01/G20200343030493/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Week_01/G20200343030493/.idea/vcs.xml b/Week_01/G20200343030493/.idea/vcs.xml new file mode 100644 index 00000000..b2bdec2d --- /dev/null +++ b/Week_01/G20200343030493/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Week_01/G20200343030493/removeDuplicates.java b/Week_01/G20200343030493/removeDuplicates.java new file mode 100644 index 00000000..2a55b764 --- /dev/null +++ b/Week_01/G20200343030493/removeDuplicates.java @@ -0,0 +1,56 @@ +//给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 +// +// 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 +// +// 示例 1: +// +// 给定数组 nums = [1,1,2], +// +//函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 +// +//你不需要考虑数组中超出新长度后面的元素。 +// +// 示例 2: +// +// 给定 nums = [0,0,1,1,1,2,2,3,3,4], +// +//函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。 +// +//你不需要考虑数组中超出新长度后面的元素。 +// +// +// 说明: +// +// 为什么返回数值是整数,但输出的答案是数组呢? +// +// 请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。 +// +// 你可以想象内部操作如下: +// +// // nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝 +//int len = removeDuplicates(nums); +// +//// 在函数里修改输入数组对于调用者是可见的。 +//// 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。 +//for (int i = 0; i < len; i++) { +//    print(nums[i]); +//} +// +// Related Topics 数组 双指针 + + +//leetcode submit region begin(Prohibit modification and deletion) +class Solution { + public int removeDuplicates(int[] nums) { + if (nums.length == 0 ) return 0; + int i = 0; + for ( int j = 1; j Date: Mon, 17 Feb 2020 00:24:39 +0800 Subject: [PATCH 0259/1268] remove week1 idea. --- Week_01/G20200343030493/.idea/.gitignore | 2 -- .../G20200343030493/.idea/G20200343030493.iml | 9 --------- .../G20200343030493/.idea/leetcode/editor.xml | 17 ----------------- Week_01/G20200343030493/.idea/misc.xml | 6 ------ Week_01/G20200343030493/.idea/modules.xml | 8 -------- Week_01/G20200343030493/.idea/vcs.xml | 6 ------ 6 files changed, 48 deletions(-) delete mode 100644 Week_01/G20200343030493/.idea/.gitignore delete mode 100644 Week_01/G20200343030493/.idea/G20200343030493.iml delete mode 100644 Week_01/G20200343030493/.idea/leetcode/editor.xml delete mode 100644 Week_01/G20200343030493/.idea/misc.xml delete mode 100644 Week_01/G20200343030493/.idea/modules.xml delete mode 100644 Week_01/G20200343030493/.idea/vcs.xml diff --git a/Week_01/G20200343030493/.idea/.gitignore b/Week_01/G20200343030493/.idea/.gitignore deleted file mode 100644 index 5c98b428..00000000 --- a/Week_01/G20200343030493/.idea/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Default ignored files -/workspace.xml \ No newline at end of file diff --git a/Week_01/G20200343030493/.idea/G20200343030493.iml b/Week_01/G20200343030493/.idea/G20200343030493.iml deleted file mode 100644 index d6ebd480..00000000 --- a/Week_01/G20200343030493/.idea/G20200343030493.iml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/Week_01/G20200343030493/.idea/leetcode/editor.xml b/Week_01/G20200343030493/.idea/leetcode/editor.xml deleted file mode 100644 index 9f0a81af..00000000 --- a/Week_01/G20200343030493/.idea/leetcode/editor.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Week_01/G20200343030493/.idea/misc.xml b/Week_01/G20200343030493/.idea/misc.xml deleted file mode 100644 index 28a804d8..00000000 --- a/Week_01/G20200343030493/.idea/misc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Week_01/G20200343030493/.idea/modules.xml b/Week_01/G20200343030493/.idea/modules.xml deleted file mode 100644 index 0f9f3f18..00000000 --- a/Week_01/G20200343030493/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/Week_01/G20200343030493/.idea/vcs.xml b/Week_01/G20200343030493/.idea/vcs.xml deleted file mode 100644 index b2bdec2d..00000000 --- a/Week_01/G20200343030493/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file From de66a800381addfa8576fc99f9ade68d3b05e0a7 Mon Sep 17 00:00:00 2001 From: Oxide_xyn Date: Mon, 17 Feb 2020 01:47:38 +0800 Subject: [PATCH 0260/1268] =?UTF-8?q?627-week=E4=BD=9C=E4=B8=9A=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E3=80=821=E3=80=812=E3=80=816=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030627/LeetCode_1_627.js | 13 +++++++++++++ Week_01/G20200343030627/LeetCode_2_627.js | 19 +++++++++++++++++++ Week_01/G20200343030627/LeetCode_6_627.js | 15 +++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 Week_01/G20200343030627/LeetCode_1_627.js create mode 100644 Week_01/G20200343030627/LeetCode_2_627.js create mode 100644 Week_01/G20200343030627/LeetCode_6_627.js diff --git a/Week_01/G20200343030627/LeetCode_1_627.js b/Week_01/G20200343030627/LeetCode_1_627.js new file mode 100644 index 00000000..95e899af --- /dev/null +++ b/Week_01/G20200343030627/LeetCode_1_627.js @@ -0,0 +1,13 @@ +// remove-duplicates-from-sorted-array + +var removeDuplicates = function(nums) { + var slowIdx = 0; + for (var i = 1; i < nums.length; i++) { + if (nums[slowIdx] != nums[i]) { + nums[slowIdx + 1] = nums[i]; + slowIdx += 1; + } + } + // nums.splice(slowIdx + 1, nums.length); + return slowIdx + 1; +}; \ No newline at end of file diff --git a/Week_01/G20200343030627/LeetCode_2_627.js b/Week_01/G20200343030627/LeetCode_2_627.js new file mode 100644 index 00000000..54e0c9b3 --- /dev/null +++ b/Week_01/G20200343030627/LeetCode_2_627.js @@ -0,0 +1,19 @@ +// rotate-array + +var rotate = function(nums, k) { + k = k % nums.length; + var length = nums.length; + if (length === 1 || k === 0) return; + + nums.reverse(); + reverseAny(nums, 0 ,k - 1); + reverseAny(nums, k, nums.length - 1) +}; + +function reverseAny(arr, startIdx, endIdx) { + for (var i=0; i < Math.floor((endIdx - startIdx + 1)/2); i++) { + var temp = arr[startIdx + i]; + arr[startIdx + i] = arr[endIdx - i]; + arr[endIdx - i] = temp; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030627/LeetCode_6_627.js b/Week_01/G20200343030627/LeetCode_6_627.js new file mode 100644 index 00000000..89a51966 --- /dev/null +++ b/Week_01/G20200343030627/LeetCode_6_627.js @@ -0,0 +1,15 @@ +// move-zeroes +var moveZeroes = function(nums) { + if (nums.length <= 0) return; + + var numberPointer = 0; + for (var i = 0; i < nums.length; i++) { + if (nums[i] !== 0) { + nums[numberPointer] = nums[i]; + numberPointer+=1; + } + } + for (;numberPointer < nums.length; numberPointer++) { + nums[numberPointer] = 0; + } +}; \ No newline at end of file From 42d8768a5883fb194f5e9f395e04d500875d4040 Mon Sep 17 00:00:00 2001 From: MiaoRain Date: Sun, 16 Feb 2020 19:58:29 +0100 Subject: [PATCH 0261/1268] 433-week 01 --- ...13\350\275\254\346\225\260\347\273\204.py" | 29 +++++++++++++++++++ ...04\351\207\215\345\244\215\351\241\271.py" | 20 +++++++++++++ Week_01/G20200343030433/LeetCode_189_433.py | 29 +++++++++++++++++++ Week_01/G20200343030433/LeetCode_26_433.py | 20 +++++++++++++ 4 files changed, 98 insertions(+) create mode 100644 "189.\346\227\213\350\275\254\346\225\260\347\273\204.py" create mode 100644 "26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.py" create mode 100644 Week_01/G20200343030433/LeetCode_189_433.py create mode 100644 Week_01/G20200343030433/LeetCode_26_433.py diff --git "a/189.\346\227\213\350\275\254\346\225\260\347\273\204.py" "b/189.\346\227\213\350\275\254\346\225\260\347\273\204.py" new file mode 100644 index 00000000..b6c6706b --- /dev/null +++ "b/189.\346\227\213\350\275\254\346\225\260\347\273\204.py" @@ -0,0 +1,29 @@ +# +# @lc app=leetcode.cn id=189 lang=python3 +# +# [189] 旋转数组 +# + +# @lc code=start +class Solution: + def rotate(self, nums: List[int], k: int) -> None: + """ + Do not return anything, modify nums in-place instead. + """ + """ + Do not return anything, modify nums in-place instead. + """ + n = len(nums) + k = k % n + nums[:] = nums[n-k:] + nums[:n-k] + + """ + for i in range(len(nums)): + if i < k: + result.append(nums[len(nums)-k + i]) + + if i >= k: + result.append(nums[i-k]) + return result +# @lc code=end + diff --git "a/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.py" "b/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.py" new file mode 100644 index 00000000..9c3e6bbf --- /dev/null +++ "b/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.py" @@ -0,0 +1,20 @@ +# +# @lc app=leetcode.cn id=26 lang=python3 +# +# [26] 删除排序数组中的重复项 +# + +# @lc code=start +class Solution: + def removeDuplicates(self, nums: List[int]) -> int: + if not nums: + return 0 + first_point = 0 + for sencond_point in range(1, len(nums)): + if nums[sencond_point] != nums[first_point]: + first_point += 1 + nums[first_point] = nums[sencond_point] + print(first_point) + return first_point + 1 +# @lc code=end + diff --git a/Week_01/G20200343030433/LeetCode_189_433.py b/Week_01/G20200343030433/LeetCode_189_433.py new file mode 100644 index 00000000..b6c6706b --- /dev/null +++ b/Week_01/G20200343030433/LeetCode_189_433.py @@ -0,0 +1,29 @@ +# +# @lc app=leetcode.cn id=189 lang=python3 +# +# [189] 旋转数组 +# + +# @lc code=start +class Solution: + def rotate(self, nums: List[int], k: int) -> None: + """ + Do not return anything, modify nums in-place instead. + """ + """ + Do not return anything, modify nums in-place instead. + """ + n = len(nums) + k = k % n + nums[:] = nums[n-k:] + nums[:n-k] + + """ + for i in range(len(nums)): + if i < k: + result.append(nums[len(nums)-k + i]) + + if i >= k: + result.append(nums[i-k]) + return result +# @lc code=end + diff --git a/Week_01/G20200343030433/LeetCode_26_433.py b/Week_01/G20200343030433/LeetCode_26_433.py new file mode 100644 index 00000000..9c3e6bbf --- /dev/null +++ b/Week_01/G20200343030433/LeetCode_26_433.py @@ -0,0 +1,20 @@ +# +# @lc app=leetcode.cn id=26 lang=python3 +# +# [26] 删除排序数组中的重复项 +# + +# @lc code=start +class Solution: + def removeDuplicates(self, nums: List[int]) -> int: + if not nums: + return 0 + first_point = 0 + for sencond_point in range(1, len(nums)): + if nums[sencond_point] != nums[first_point]: + first_point += 1 + nums[first_point] = nums[sencond_point] + print(first_point) + return first_point + 1 +# @lc code=end + From b79f689c130dae659966e54262cbeafc905b3e1a Mon Sep 17 00:00:00 2001 From: Xi Cheng Date: Mon, 17 Feb 2020 10:13:03 +0800 Subject: [PATCH 0262/1268] Rename --- .../G20200343030445/LeetCode_189_445.py | 0 .../G20200343030445/LeetCode_1_445.py | 0 .../G20200343030445/LeetCode_26_445.py | 0 .../G20200343030445/LeetCode_283_445.py | 0 .../G20200343030445/LeetCode_42_445.py | 0 .../G20200343030445/LeetCode_641_445.py | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename "Week_01/G20200343030445/189.\346\227\213\350\275\254\346\225\260\347\273\204.py" => Week_01/G20200343030445/LeetCode_189_445.py (100%) rename "Week_01/G20200343030445/1.\344\270\244\346\225\260\344\271\213\345\222\214.py" => Week_01/G20200343030445/LeetCode_1_445.py (100%) rename "Week_01/G20200343030445/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.py" => Week_01/G20200343030445/LeetCode_26_445.py (100%) rename "Week_01/G20200343030445/283.\347\247\273\345\212\250\351\233\266.py" => Week_01/G20200343030445/LeetCode_283_445.py (100%) rename "Week_01/G20200343030445/42.\346\216\245\351\233\250\346\260\264.py" => Week_01/G20200343030445/LeetCode_42_445.py (100%) rename "Week_01/G20200343030445/641.\350\256\276\350\256\241\345\276\252\347\216\257\345\217\214\347\253\257\351\230\237\345\210\227.py" => Week_01/G20200343030445/LeetCode_641_445.py (100%) diff --git "a/Week_01/G20200343030445/189.\346\227\213\350\275\254\346\225\260\347\273\204.py" b/Week_01/G20200343030445/LeetCode_189_445.py similarity index 100% rename from "Week_01/G20200343030445/189.\346\227\213\350\275\254\346\225\260\347\273\204.py" rename to Week_01/G20200343030445/LeetCode_189_445.py diff --git "a/Week_01/G20200343030445/1.\344\270\244\346\225\260\344\271\213\345\222\214.py" b/Week_01/G20200343030445/LeetCode_1_445.py similarity index 100% rename from "Week_01/G20200343030445/1.\344\270\244\346\225\260\344\271\213\345\222\214.py" rename to Week_01/G20200343030445/LeetCode_1_445.py diff --git "a/Week_01/G20200343030445/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.py" b/Week_01/G20200343030445/LeetCode_26_445.py similarity index 100% rename from "Week_01/G20200343030445/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.py" rename to Week_01/G20200343030445/LeetCode_26_445.py diff --git "a/Week_01/G20200343030445/283.\347\247\273\345\212\250\351\233\266.py" b/Week_01/G20200343030445/LeetCode_283_445.py similarity index 100% rename from "Week_01/G20200343030445/283.\347\247\273\345\212\250\351\233\266.py" rename to Week_01/G20200343030445/LeetCode_283_445.py diff --git "a/Week_01/G20200343030445/42.\346\216\245\351\233\250\346\260\264.py" b/Week_01/G20200343030445/LeetCode_42_445.py similarity index 100% rename from "Week_01/G20200343030445/42.\346\216\245\351\233\250\346\260\264.py" rename to Week_01/G20200343030445/LeetCode_42_445.py diff --git "a/Week_01/G20200343030445/641.\350\256\276\350\256\241\345\276\252\347\216\257\345\217\214\347\253\257\351\230\237\345\210\227.py" b/Week_01/G20200343030445/LeetCode_641_445.py similarity index 100% rename from "Week_01/G20200343030445/641.\350\256\276\350\256\241\345\276\252\347\216\257\345\217\214\347\253\257\351\230\237\345\210\227.py" rename to Week_01/G20200343030445/LeetCode_641_445.py From 0fd75bb0ab35226cedf4fa5feda93f4efe03f850 Mon Sep 17 00:00:00 2001 From: Peng Wu Date: Sun, 16 Feb 2020 21:38:20 -0800 Subject: [PATCH 0263/1268] 449 week 01 medium --- Week_00/G20200343030449/LeetCode_641_449.java | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 Week_00/G20200343030449/LeetCode_641_449.java diff --git a/Week_00/G20200343030449/LeetCode_641_449.java b/Week_00/G20200343030449/LeetCode_641_449.java new file mode 100644 index 00000000..a6a7e9ac --- /dev/null +++ b/Week_00/G20200343030449/LeetCode_641_449.java @@ -0,0 +1,112 @@ +/* + * @lc app=leetcode id=641 lang=java + * + * [641] Design Circular Deque + */ +// @lc code=start +/** + * 用数组实现 + * 循环使用下标避免不必要的数据移动 + * head, tail分别表示头和尾下标 + * head == tail时表示满 + * tail + 1 == head时表示空 + */ +class MyCircularDeque { + private int[] data; + private int head; + private int tail; + + /** Initialize your data structure here. Set the size of the deque to be k. */ + public MyCircularDeque(int k) { + // Can't support k < 1. Assume k >= 1 + data = new int[k + 1]; + head = 1; + tail = 0; + } + + /** + * Adds an item at the front of Deque. Return true if the operation is + * successful. + */ + public boolean insertFront(int value) { + if (isFull()) { + return false; + } + data[head] = value; + head = (head + 1) % data.length; + return true; + } + + /** + * Adds an item at the rear of Deque. Return true if the operation is + * successful. + */ + public boolean insertLast(int value) { + if (isFull()) { + return false; + } + data[tail] = value; + tail = (data.length + tail - 1) % data.length; + return true; + } + + /** + * Deletes an item from the front of Deque. Return true if the operation is + * successful. + */ + public boolean deleteFront() { + if (isEmpty()) { + return false; + } + head = (data.length + head - 1) % data.length; + return true; + } + + /** + * Deletes an item from the rear of Deque. Return true if the operation is + * successful. + */ + public boolean deleteLast() { + if (isEmpty()) { + return false; + } + tail = (tail + 1) % data.length; + return true; + } + + /** Get the front item from the deque. */ + public int getFront() { + if (isEmpty()) { + return -1; + } + return data[(data.length + head - 1) % data.length]; + } + + /** Get the last item from the deque. */ + public int getRear() { + if (isEmpty()) { + return -1; + } + return data[(tail + 1) % data.length]; + } + + /** Checks whether the circular deque is empty or not. */ + public boolean isEmpty() { + return (tail + 1) % data.length == head; + } + + /** Checks whether the circular deque is full or not. */ + public boolean isFull() { + return head == tail; + } +} + +/** + * Your MyCircularDeque object will be instantiated and called as such: + * MyCircularDeque obj = new MyCircularDeque(k); boolean param_1 = + * obj.insertFront(value); boolean param_2 = obj.insertLast(value); boolean + * param_3 = obj.deleteFront(); boolean param_4 = obj.deleteLast(); int param_5 + * = obj.getFront(); int param_6 = obj.getRear(); boolean param_7 = + * obj.isEmpty(); boolean param_8 = obj.isFull(); + */ +// @lc code=end From 992975978091eb92ffe0d8127483bb901b00b7af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=89=E8=B4=9E?= Date: Mon, 17 Feb 2020 14:20:27 +0800 Subject: [PATCH 0264/1268] =?UTF-8?q?=E5=88=A0=E9=99=A4.gitignore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 8dd0da6f..f46dc1e9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .idea output +.gitignore \ No newline at end of file From 51dc0204d01bd7d0f26ab5a2cb98d65de43f642a Mon Sep 17 00:00:00 2001 From: JasonQu Date: Wed, 12 Feb 2020 21:23:54 +0800 Subject: [PATCH 0265/1268] 383-Week01 --- Week_01/G20200343030383/LeetCode_189_383.go | 55 +++++++ Week_01/G20200343030383/LeetCode_21_383.go | 25 ++++ Week_01/G20200343030383/LeetCode_26_383.go | 14 ++ Week_01/G20200343030383/LeetCode_283_383.go | 14 ++ Week_01/G20200343030383/LeetCode_42_383.go | 62 ++++++++ Week_01/G20200343030383/LeetCode_641_383.go | 87 +++++++++++ Week_01/G20200343030383/NOTE.md | 15 +- Week_01/G20200343030383/stubs.go | 6 + Week_01/G20200343030383/week_test.go | 152 ++++++++++++++++++++ 9 files changed, 429 insertions(+), 1 deletion(-) create mode 100644 Week_01/G20200343030383/LeetCode_189_383.go create mode 100644 Week_01/G20200343030383/LeetCode_21_383.go create mode 100644 Week_01/G20200343030383/LeetCode_26_383.go create mode 100644 Week_01/G20200343030383/LeetCode_283_383.go create mode 100644 Week_01/G20200343030383/LeetCode_42_383.go create mode 100644 Week_01/G20200343030383/LeetCode_641_383.go create mode 100644 Week_01/G20200343030383/stubs.go create mode 100644 Week_01/G20200343030383/week_test.go diff --git a/Week_01/G20200343030383/LeetCode_189_383.go b/Week_01/G20200343030383/LeetCode_189_383.go new file mode 100644 index 00000000..d8c8f370 --- /dev/null +++ b/Week_01/G20200343030383/LeetCode_189_383.go @@ -0,0 +1,55 @@ +// https://leetcode-cn.com/problems/rotate-array/ +package leetcode + +func rotate(nums []int, k int) { + if len(nums) == 0 || k == 0 || k%len(nums) == 0 { + return + } + k = k % len(nums) + reverseSlice(nums, 0, len(nums)-1) + reverseSlice(nums, 0, k-1) + reverseSlice(nums, k, len(nums)-1) +} + +func reverseSlice(nums []int, i, j int) { + for i < j { + nums[i], nums[j] = nums[j], nums[i] + i++ + j-- + } +} + +/* + 1. save start element for every loop round, keep its positon i + 2. find who-should-take-my-positon e.g. position j + 3. set j's value to i's position and set i=j (if j is not start position) + 4. set start element to i's position and start next round (if j is start position) + 5. exit if move len(nums) times +*/ +func rotate2(nums []int, k int) { + size := len(nums) + if size == 0 || k == 0 || k%size == 0 { + return + } + k = k % size + start, startV := -1, 0 + for cnt, i := 0, 0; cnt < size; cnt++ { + if start == -1 { + start = i + startV = nums[i] + } + j := whoShouldTakeMyPosition(size, k, i) + if j == start { + nums[i] = startV + start = -1 + i++ + } else { + nums[i] = nums[j] + i = j + } + } +} + +func whoShouldTakeMyPosition(size, k, i int) int { + return (i - k + size) % size +} diff --git a/Week_01/G20200343030383/LeetCode_21_383.go b/Week_01/G20200343030383/LeetCode_21_383.go new file mode 100644 index 00000000..207373b2 --- /dev/null +++ b/Week_01/G20200343030383/LeetCode_21_383.go @@ -0,0 +1,25 @@ +// https://leetcode-cn.com/problems/merge-two-sorted-lists/submissions/ +package leetcode + +func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode { + head := &ListNode{} + cur := head + for l1 != nil && l2 != nil { + if l1.Val < l2.Val { + cur.Next = l1 + cur = l1 + l1 = l1.Next + } else { + cur.Next = l2 + cur = l2 + l2 = l2.Next + } + + } + if l1 == nil { + cur.Next = l2 + } else { + cur.Next = l1 + } + return head.Next +} diff --git a/Week_01/G20200343030383/LeetCode_26_383.go b/Week_01/G20200343030383/LeetCode_26_383.go new file mode 100644 index 00000000..9780adb7 --- /dev/null +++ b/Week_01/G20200343030383/LeetCode_26_383.go @@ -0,0 +1,14 @@ +// https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/ +package leetcode + +func removeDuplicates(nums []int) int { + var delCount int + for i := 1; i < len(nums); i++ { + if nums[i] == nums[i-1] { + delCount++ + } else if delCount > 0 { + nums[i-delCount] = nums[i] + } + } + return len(nums) - delCount +} diff --git a/Week_01/G20200343030383/LeetCode_283_383.go b/Week_01/G20200343030383/LeetCode_283_383.go new file mode 100644 index 00000000..f4de66d1 --- /dev/null +++ b/Week_01/G20200343030383/LeetCode_283_383.go @@ -0,0 +1,14 @@ +// https://leetcode-cn.com/problems/move-zeroes/submissions/ +package leetcode + +func moveZeroes(nums []int) { + var zeroCount int + for i := 0; i < len(nums); i++ { + if nums[i] == 0 { + zeroCount++ + } else if j := i - zeroCount; i != j { + nums[j] = nums[i] + nums[i] = 0 + } + } +} diff --git a/Week_01/G20200343030383/LeetCode_42_383.go b/Week_01/G20200343030383/LeetCode_42_383.go new file mode 100644 index 00000000..229b5e2c --- /dev/null +++ b/Week_01/G20200343030383/LeetCode_42_383.go @@ -0,0 +1,62 @@ +// https://leetcode.com/problems/trapping-rain-water/submissions/ +package leetcode + +func trap(height []int) int { + left, right := 0, len(height)-1 + var maxLeft, maxRight int + var sum int + for left <= right { + if height[left] <= height[right] { + if maxLeft >= height[left] { + sum += maxLeft - height[left] + } else { + maxLeft = height[left] + } + left++ + } else { + + if maxRight >= height[right] { + sum += maxRight - height[right] + } else { + maxRight = height[right] + } + right-- + } + } + return sum +} + +func trap2(height []int) int { + size := len(height) + if size < 3 { + return 0 + } + leftHighest, righHighest := make([]int, size), make([]int, size) + leftHighest[0] = height[0] + righHighest[size-1] = height[size-1] + for i := 1; i < size-1; i++ { + leftHighest[i] = max(height[i], leftHighest[i-1]) + j := size - 1 - i + righHighest[j] = max(height[j], righHighest[j+1]) + } + + var count int + for i := 1; i < size-1; i++ { + count += max(min(leftHighest[i-1], righHighest[i+1])-height[i], 0) + } + return count +} + +func max(a, b int) int { + if a > b { + return a + } + return b +} + +func min(a, b int) int { + if a > b { + return b + } + return a +} diff --git a/Week_01/G20200343030383/LeetCode_641_383.go b/Week_01/G20200343030383/LeetCode_641_383.go new file mode 100644 index 00000000..935e9b69 --- /dev/null +++ b/Week_01/G20200343030383/LeetCode_641_383.go @@ -0,0 +1,87 @@ +// https://leetcode.com/problems/design-circular-deque +package leetcode + +type MyCircularDeque struct { + head, rear, size int + data []int + mod func(int) int +} + +/** Initialize your data structure here. Set the size of the deque to be k. */ +func Constructor(k int) MyCircularDeque { + cd := MyCircularDeque{ + data: make([]int, k+1), + size: k + 1, + } + if k&(k+1) == 0 { + cd.mod = func(v int) int { return v & k } + } else { + k++ + cd.mod = func(v int) int { return v % k } + } + return cd +} + +/** Adds an item at the front of Deque. Return true if the operation is successful. */ +func (this *MyCircularDeque) InsertFront(value int) bool { + if this.IsFull() { + return false + } + this.head = this.mod(this.head - 1 + this.size) + this.data[this.head] = value + return true +} + +/** Adds an item at the rear of Deque. Return true if the operation is successful. */ +func (this *MyCircularDeque) InsertLast(value int) bool { + if this.IsFull() { + return false + } + this.data[this.rear] = value + this.rear = this.mod(this.rear + 1) + return true +} + +/** Deletes an item from the front of Deque. Return true if the operation is successful. */ +func (this *MyCircularDeque) DeleteFront() bool { + if this.IsEmpty() { + return false + } + this.head = this.mod(this.head + 1) + return true +} + +/** Deletes an item from the rear of Deque. Return true if the operation is successful. */ +func (this *MyCircularDeque) DeleteLast() bool { + if this.IsEmpty() { + return false + } + this.rear = this.mod(this.rear - 1 + this.size) + return true +} + +/** Get the front item from the deque. */ +func (this *MyCircularDeque) GetFront() int { + if this.IsEmpty() { + return -1 + } + return this.data[this.head] +} + +/** Get the last item from the deque. */ +func (this *MyCircularDeque) GetRear() int { + if this.IsEmpty() { + return -1 + } + return this.data[this.mod(this.rear-1+this.size)] +} + +/** Checks whether the circular deque is empty or not. */ +func (this *MyCircularDeque) IsEmpty() bool { + return this.head == this.rear +} + +/** Checks whether the circular deque is full or not. */ +func (this *MyCircularDeque) IsFull() bool { + return this.mod(this.rear+1) == this.head +} diff --git a/Week_01/G20200343030383/NOTE.md b/Week_01/G20200343030383/NOTE.md index 50de3041..3bad48b5 100644 --- a/Week_01/G20200343030383/NOTE.md +++ b/Week_01/G20200343030383/NOTE.md @@ -1 +1,14 @@ -学习笔记 \ No newline at end of file +## 学习笔记 + +### 个人收益 + +感觉本周最大的收获主要是学习到了正确的方法,"五步刷题法",以前自己做leetcode总是容易忘,理解不深,用"五步刷题法"感觉坚持下去明显好很多 + +### 个人不足 + +最近开始复工,本周投入时间精力不足,其实没有对每道样题做到五步刷题,希望后续自己能逐步优化 + +### 课程建议 + +#### 1.微信群信噪比太低,除非主动@的消息,否则很容易很无效信息刷屏,班主任可以换一种沟通方式 +### 2.老师的课程虽然一直在强调授人以渔,但是实际节奏有点快,并且感觉是为了帮助学员攻克面试,教授"术"的感觉大于"道" diff --git a/Week_01/G20200343030383/stubs.go b/Week_01/G20200343030383/stubs.go new file mode 100644 index 00000000..d853f04c --- /dev/null +++ b/Week_01/G20200343030383/stubs.go @@ -0,0 +1,6 @@ +package leetcode + +type ListNode struct { + Val int + Next *ListNode +} diff --git a/Week_01/G20200343030383/week_test.go b/Week_01/G20200343030383/week_test.go new file mode 100644 index 00000000..a7c7955b --- /dev/null +++ b/Week_01/G20200343030383/week_test.go @@ -0,0 +1,152 @@ +package leetcode + +import ( + "testing" + + "math/rand" + "sort" + + "github.com/stretchr/testify/assert" +) + +/* test for https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/ */ +func TestRemoveDuplicates(t *testing.T) { + assert := assert.New(t) + /* test 1000 samples */ + for i := 0; i < 100; i++ { + slice, dupCount := makeDuplicateSliceSample(i) + assert.Equal(removeDuplicates(slice), len(slice)-dupCount) + } +} + +func makeDuplicateSliceSample(sampleSize int) (sample []int, dupCount int) { + sample = make([]int, sampleSize) + numsMap := make(map[int]bool) + for i := 0; i < sampleSize; i++ { + v := rand.Intn(10000) + sample[i] = v + if _, ok := numsMap[v]; ok { + dupCount++ + } else { + numsMap[v] = true + } + } + sort.Ints(sample) + return +} + +/* test for https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/ */ +func TestRotate(t *testing.T) { + assert := assert.New(t) + for i := 0; i < 100; i++ { + sample := makeRotateSample(i) + sample2 := make([]int, i) + copy(sample2, sample) + k := rand.Intn(37) + /* cross test for rotate & rotate2 */ + rotate(sample, k) + rotate2(sample2, k) + assert.Equal(sample, sample2) + } +} + +func makeRotateSample(size int) []int { + sample := make([]int, size) + for i := 0; i < size; i++ { + v := rand.Intn(10000) + sample[i] = v + } + return sample +} + +/* test for https://leetcode-cn.com/problems/rotate-array/ */ +func TestMergeLinkedList(t *testing.T) { + assert := assert.New(t) + l1, l2 := makeLinkedList([]int{}), makeLinkedList([]int{1}) + out := linkedListToSlice(mergeTwoLists(l1, l2)) + assert.Equal([]int{1}, out) + + l1, l2 = makeLinkedList([]int{1, 1, 3, 4}), makeLinkedList([]int{1, 2, 3, 3, 5}) + out = linkedListToSlice(mergeTwoLists(l1, l2)) + assert.Equal([]int{1, 1, 1, 2, 3, 3, 3, 4, 5}, out) +} + +func makeLinkedList(nums []int) *ListNode { + var node, head *ListNode + for _, v := range nums { + n := &ListNode{Val: v} + if node != nil { + node.Next = n + node = n + } else { + node = n + head = n + } + } + return head +} + +func linkedListToSlice(n *ListNode) (s []int) { + for cur := n; cur != nil; { + s = append(s, cur.Val) + cur = cur.Next + } + return +} + +/* test for https://leetcode-cn.com/problems/move-zeroes/submissions/ */ +func TestMoveZeros(t *testing.T) { + assert := assert.New(t) + for i := 0; i < 100; i++ { + s1 := makeSliceWithZeros(i) + s2 := make([]int, i) + copy(s2, s1) + + moveZeroes(s1) + s3 := make([]int, i) + var j int + for _, v := range s2 { + if v != 0 { + s3[j] = v + j++ + } + } + + assert.Equal(s1, s3) + } +} + +func makeSliceWithZeros(sampleSize int) (sample []int) { + sample = make([]int, sampleSize) + for i := 0; i < sampleSize; i++ { + if rand.Int()%2 == 0 { + sample[i] = 0 + } else { + sample[i] = rand.Intn(10000) + } + } + return +} + +/* test for https://leetcode-cn.com/problems/design-circular-deque/ */ +func TestCircularDeque(t *testing.T) { + assert := assert.New(t) + q := Constructor(3) + assert.True(q.InsertLast(1)) + assert.True(q.InsertLast(2)) + assert.True(q.InsertFront(3)) + assert.False(q.InsertFront(4)) + assert.Equal(2, q.GetRear()) + assert.True(q.IsFull()) + assert.True(q.DeleteLast()) + assert.True(q.InsertFront(4)) + assert.Equal(4, q.GetFront()) +} + +/* test for https://leetcode.com/problems/trapping-rain-water/submissions/ */ +func TestTrap(t *testing.T) { + height := []int{0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1} + assert := assert.New(t) + assert.Equal(6, trap(height)) + assert.Equal(6, trap2(height)) +} From 12f36e9750cdc073922a98c626e74f6e864ffca8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=89=E8=B4=9E?= Date: Mon, 17 Feb 2020 14:23:31 +0800 Subject: [PATCH 0266/1268] =?UTF-8?q?=E5=88=A0=E9=99=A4.gitignore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index f46dc1e9..00000000 --- a/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.idea -output -.gitignore \ No newline at end of file From a9fc09d1dcce3d19c64b92077f27eed6ba59223a Mon Sep 17 00:00:00 2001 From: Huangzikun <381560728@qq.com> Date: Mon, 17 Feb 2020 14:26:20 +0800 Subject: [PATCH 0267/1268] Update NOTE.md --- Week_01/G20200343030393/NOTE.md | 1 - 1 file changed, 1 deletion(-) diff --git a/Week_01/G20200343030393/NOTE.md b/Week_01/G20200343030393/NOTE.md index 74aac902..4f6b8afb 100644 --- a/Week_01/G20200343030393/NOTE.md +++ b/Week_01/G20200343030393/NOTE.md @@ -1,2 +1 @@ 学习笔记 - From 8e8f8ac32b08e14230eec513d2795def6391ae56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=95=99?= Date: Sun, 16 Feb 2020 20:48:59 +0800 Subject: [PATCH 0268/1268] 407-Week 01 --- ...13\350\275\254\346\225\260\347\273\204.py" | 52 +++++++++++++++++ ...04\351\207\215\345\244\215\351\241\271.py" | 57 +++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 "Week_01/G20200343030407/[189]\346\227\213\350\275\254\346\225\260\347\273\204.py" create mode 100644 "Week_01/G20200343030407/[26]\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.py" diff --git "a/Week_01/G20200343030407/[189]\346\227\213\350\275\254\346\225\260\347\273\204.py" "b/Week_01/G20200343030407/[189]\346\227\213\350\275\254\346\225\260\347\273\204.py" new file mode 100644 index 00000000..c29bc0d9 --- /dev/null +++ "b/Week_01/G20200343030407/[189]\346\227\213\350\275\254\346\225\260\347\273\204.py" @@ -0,0 +1,52 @@ +# 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 +# +# 示例 1: +# +# 输入: [1,2,3,4,5,6,7] 和 k = 3 +# 输出: [5,6,7,1,2,3,4] +# 解释: +# 向右旋转 1 步: [7,1,2,3,4,5,6] +# 向右旋转 2 步: [6,7,1,2,3,4,5] +# 向右旋转 3 步: [5,6,7,1,2,3,4] +# +# +# 示例 2: +# +# 输入: [-1,-100,3,99] 和 k = 2 +# 输出: [3,99,-1,-100] +# 解释: +# 向右旋转 1 步: [99,-1,-100,3] +# 向右旋转 2 步: [3,99,-1,-100] +# +# 说明: +# +# +# 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。 +# 要求使用空间复杂度为 O(1) 的 原地 算法。 +# +# Related Topics 数组 + + +# leetcode submit region begin(Prohibit modification and deletion) +from typing import List + + +class Solution: + def rotate(self, nums: List[int], k: int) -> None: + """ + Do not return anything, modify nums in-place instead. + """ + move_step = k % nums.__len__() + if move_step == 0: + pass + else: + nums1 = nums[nums.__len__() - move_step:] + for idx in range(0, nums.__len__())[::-1]: + + if idx <= move_step - 1: + nums[idx] = nums1[idx] + else: + nums[idx] = nums[idx - move_step] + + +# leetcode submit region end(Prohibit modification and deletion) diff --git "a/Week_01/G20200343030407/[26]\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.py" "b/Week_01/G20200343030407/[26]\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.py" new file mode 100644 index 00000000..88f2b5d1 --- /dev/null +++ "b/Week_01/G20200343030407/[26]\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.py" @@ -0,0 +1,57 @@ +# 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 +# +# 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 +# +# 示例 1: +# +# 给定数组 nums = [1,1,2], +# +# 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 +# +# 你不需要考虑数组中超出新长度后面的元素。 +# +# 示例 2: +# +# 给定 nums = [0,0,1,1,1,2,2,3,3,4], +# +# 函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。 +# +# 你不需要考虑数组中超出新长度后面的元素。 +# +# +# 说明: +# +# 为什么返回数值是整数,但输出的答案是数组呢? +# +# 请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。 +# +# 你可以想象内部操作如下: +# +# // nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝 +# int len = removeDuplicates(nums); +# +# // 在函数里修改输入数组对于调用者是可见的。 +# // 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。 +# for (int i = 0; i < len; i++) { +#     print(nums[i]); +# } +# +# Related Topics 数组 双指针 +from typing import List + + +# leetcode submit region begin(Prohibit modification and deletion) +class Solution: + def removeDuplicates(self, nums: List[int]) -> int: + count_duplicates = 0 + exist_set = set() + for idx, num in enumerate(nums): + if num in exist_set: + count_duplicates += 1 + else: + exist_set.add(num) + if count_duplicates > 0: + nums[idx - count_duplicates] = num + return len(nums) - count_duplicates + +# leetcode submit region end(Prohibit modification and deletion) From add90fdb4a766963f99fa6a2700ca61d2ca5d61c Mon Sep 17 00:00:00 2001 From: Huangzikun <381560728@qq.com> Date: Mon, 17 Feb 2020 14:27:00 +0800 Subject: [PATCH 0269/1268] Delete NOTE.md --- Week_01/G20200343030393/NOTE.md | 1 - 1 file changed, 1 deletion(-) delete mode 100644 Week_01/G20200343030393/NOTE.md diff --git a/Week_01/G20200343030393/NOTE.md b/Week_01/G20200343030393/NOTE.md deleted file mode 100644 index 4f6b8afb..00000000 --- a/Week_01/G20200343030393/NOTE.md +++ /dev/null @@ -1 +0,0 @@ -学习笔记 From 37dc27cc069b48af6a5de515f951ec32ea8eca5b Mon Sep 17 00:00:00 2001 From: zhang teng <1299220775@qq.com> Date: Mon, 17 Feb 2020 14:28:13 +0800 Subject: [PATCH 0270/1268] =?UTF-8?q?Rename=201.=E4=B8=A4=E6=95=B0?= =?UTF-8?q?=E4=B9=8B=E5=92=8C.java=20to=20LeetCode=5F01=5F441.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../G20200343030441/LeetCode_01_441.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Week_01/G20200343030441/1.\344\270\244\346\225\260\344\271\213\345\222\214.java" => Week_01/G20200343030441/LeetCode_01_441.java (100%) diff --git "a/Week_01/G20200343030441/1.\344\270\244\346\225\260\344\271\213\345\222\214.java" b/Week_01/G20200343030441/LeetCode_01_441.java similarity index 100% rename from "Week_01/G20200343030441/1.\344\270\244\346\225\260\344\271\213\345\222\214.java" rename to Week_01/G20200343030441/LeetCode_01_441.java From 1d4114fb57bbdc3781f8e391047957711e5b9da3 Mon Sep 17 00:00:00 2001 From: geekzhu1314520 Date: Mon, 17 Feb 2020 14:28:14 +0800 Subject: [PATCH 0271/1268] Delete .DS_Store MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 删除无用代码 --- Week_01/G20200343030523/id_523/.DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Week_01/G20200343030523/id_523/.DS_Store diff --git a/Week_01/G20200343030523/id_523/.DS_Store b/Week_01/G20200343030523/id_523/.DS_Store deleted file mode 100644 index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 Date: Mon, 17 Feb 2020 14:28:18 +0800 Subject: [PATCH 0272/1268] 545-Week 01 --- .gitignore | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 9f11b755..00000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.idea/ From 87c4b25d2257673ec5da1eeb465cd3c663ed27ba Mon Sep 17 00:00:00 2001 From: geekzhu1314520 Date: Mon, 17 Feb 2020 14:28:33 +0800 Subject: [PATCH 0273/1268] Delete .DS_Store MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 删除无用代码 --- Week_01/G20200343030523/.DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Week_01/G20200343030523/.DS_Store diff --git a/Week_01/G20200343030523/.DS_Store b/Week_01/G20200343030523/.DS_Store deleted file mode 100644 index 9a84a5658e78a1336dd7829cbbdb677c953c7b49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKy-EZz5T4OP7HqDxGp*$*_VHMs;2uCZ7gV@qud%b((wFdId@l>XFEa|O0l`8} znStb+WPUdLEt_OSM3)cULS!x?4H{9YRD{!2)1EuefLd~#%Gu_2vAP-hZ6(nzPI2uA zaxa}+$+^_mKe6{i+pagm8gb3j^YP=!>&wOG9R1LJ>$AQ4Q#|eBw~I9e1HnKr5Dff` z0i4;C=Fl+uU?3O>20j?z{*cg!*>N;1TL-#Q0swi9E&`pk1Y?q8b{q|1fvAN7EmXb4 zPz%R=a=+|28d|uh7a!_RelK3MJRSK{aTm>o(FX&;z?6Y~8_s$DU*eak7WvbV7zG2t zz&~R^XYHz8;-&m-{qlM|YZKZv8ijr%6$tdnB>)5NBS*z(_Cy_i*>N;v7S5M&U|a+W LA<+c`zres7yBsM9 From ffb221681ae700fd3ebdd32b3817ba0e4f171cd3 Mon Sep 17 00:00:00 2001 From: zhang teng <1299220775@qq.com> Date: Mon, 17 Feb 2020 14:29:08 +0800 Subject: [PATCH 0274/1268] =?UTF-8?q?Rename=20189.=E6=97=8B=E8=BD=AC?= =?UTF-8?q?=E6=95=B0=E7=BB=84.java=20to=20LeetCode=5F189=5F441.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../G20200343030441/LeetCode_189_441.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Week_01/G20200343030441/189.\346\227\213\350\275\254\346\225\260\347\273\204.java" => Week_01/G20200343030441/LeetCode_189_441.java (100%) diff --git "a/Week_01/G20200343030441/189.\346\227\213\350\275\254\346\225\260\347\273\204.java" b/Week_01/G20200343030441/LeetCode_189_441.java similarity index 100% rename from "Week_01/G20200343030441/189.\346\227\213\350\275\254\346\225\260\347\273\204.java" rename to Week_01/G20200343030441/LeetCode_189_441.java From f03acb862491c68f6253ddc8d8e8613a5194a03e Mon Sep 17 00:00:00 2001 From: zhang teng <1299220775@qq.com> Date: Mon, 17 Feb 2020 14:29:40 +0800 Subject: [PATCH 0275/1268] =?UTF-8?q?Rename=2021.=E5=90=88=E5=B9=B6?= =?UTF-8?q?=E4=B8=A4=E4=B8=AA=E6=9C=89=E5=BA=8F=E9=93=BE=E8=A1=A8.java=20t?= =?UTF-8?q?o=20LeetCode=5F21=5F441.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../G20200343030441/LeetCode_21_441.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Week_01/G20200343030441/21.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\351\223\276\350\241\250.java" => Week_01/G20200343030441/LeetCode_21_441.java (100%) diff --git "a/Week_01/G20200343030441/21.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\351\223\276\350\241\250.java" b/Week_01/G20200343030441/LeetCode_21_441.java similarity index 100% rename from "Week_01/G20200343030441/21.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\351\223\276\350\241\250.java" rename to Week_01/G20200343030441/LeetCode_21_441.java From c10afd156d0633057a4c452ddf9dc8688624552f Mon Sep 17 00:00:00 2001 From: zhang teng <1299220775@qq.com> Date: Mon, 17 Feb 2020 14:30:17 +0800 Subject: [PATCH 0276/1268] =?UTF-8?q?Rename=2088.=E5=90=88=E5=B9=B6?= =?UTF-8?q?=E4=B8=A4=E4=B8=AA=E6=9C=89=E5=BA=8F=E6=95=B0=E7=BB=84.java=20t?= =?UTF-8?q?o=20LeetCode=5F88=5F441.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../G20200343030441/LeetCode_88_441.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Week_01/G20200343030441/88.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\346\225\260\347\273\204.java" => Week_01/G20200343030441/LeetCode_88_441.java (100%) diff --git "a/Week_01/G20200343030441/88.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\346\225\260\347\273\204.java" b/Week_01/G20200343030441/LeetCode_88_441.java similarity index 100% rename from "Week_01/G20200343030441/88.\345\220\210\345\271\266\344\270\244\344\270\252\346\234\211\345\272\217\346\225\260\347\273\204.java" rename to Week_01/G20200343030441/LeetCode_88_441.java From ebeab2349d6d18090cc4e5ddd1000c2a2b521805 Mon Sep 17 00:00:00 2001 From: zhang teng <1299220775@qq.com> Date: Mon, 17 Feb 2020 14:30:44 +0800 Subject: [PATCH 0277/1268] =?UTF-8?q?Rename=2026.=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E6=95=B0=E7=BB=84=E4=B8=AD=E7=9A=84=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E9=A1=B9.java=20to=20LeetCode=5F26=5F441.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../G20200343030441/LeetCode_26_441.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Week_01/G20200343030441/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.java" => Week_01/G20200343030441/LeetCode_26_441.java (100%) diff --git "a/Week_01/G20200343030441/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.java" b/Week_01/G20200343030441/LeetCode_26_441.java similarity index 100% rename from "Week_01/G20200343030441/26.\345\210\240\351\231\244\346\216\222\345\272\217\346\225\260\347\273\204\344\270\255\347\232\204\351\207\215\345\244\215\351\241\271.java" rename to Week_01/G20200343030441/LeetCode_26_441.java From aa9f2f12ed3747b4d4b5937e0658fe88e4161a57 Mon Sep 17 00:00:00 2001 From: zhang teng <1299220775@qq.com> Date: Mon, 17 Feb 2020 14:31:14 +0800 Subject: [PATCH 0278/1268] =?UTF-8?q?Rename=2066.=E5=8A=A0=E4=B8=80.java?= =?UTF-8?q?=20to=20LeetCode=5F66=5F441.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../G20200343030441/LeetCode_66_441.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Week_01/G20200343030441/66.\345\212\240\344\270\200.java" => Week_01/G20200343030441/LeetCode_66_441.java (100%) diff --git "a/Week_01/G20200343030441/66.\345\212\240\344\270\200.java" b/Week_01/G20200343030441/LeetCode_66_441.java similarity index 100% rename from "Week_01/G20200343030441/66.\345\212\240\344\270\200.java" rename to Week_01/G20200343030441/LeetCode_66_441.java From 7669f22a0353e00cc26daec0b0942e9e7103a422 Mon Sep 17 00:00:00 2001 From: zhang teng <1299220775@qq.com> Date: Mon, 17 Feb 2020 14:31:37 +0800 Subject: [PATCH 0279/1268] =?UTF-8?q?Rename=20641.=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=BE=AA=E7=8E=AF=E5=8F=8C=E7=AB=AF=E9=98=9F=E5=88=97.java=20t?= =?UTF-8?q?o=20LeetCode=5F641=5F441.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../G20200343030441/LeetCode_641_441.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Week_01/G20200343030441/641.\350\256\276\350\256\241\345\276\252\347\216\257\345\217\214\347\253\257\351\230\237\345\210\227.java" => Week_01/G20200343030441/LeetCode_641_441.java (100%) diff --git "a/Week_01/G20200343030441/641.\350\256\276\350\256\241\345\276\252\347\216\257\345\217\214\347\253\257\351\230\237\345\210\227.java" b/Week_01/G20200343030441/LeetCode_641_441.java similarity index 100% rename from "Week_01/G20200343030441/641.\350\256\276\350\256\241\345\276\252\347\216\257\345\217\214\347\253\257\351\230\237\345\210\227.java" rename to Week_01/G20200343030441/LeetCode_641_441.java From 70e66ca6e3fcf3da77930c140ee1ed9cd9bfb9fa Mon Sep 17 00:00:00 2001 From: zhang teng <1299220775@qq.com> Date: Mon, 17 Feb 2020 14:32:09 +0800 Subject: [PATCH 0280/1268] =?UTF-8?q?Rename=2042.=E6=8E=A5=E9=9B=A8?= =?UTF-8?q?=E6=B0=B4.java=20to=20LeetCode=5F42=5F441.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../G20200343030441/LeetCode_42_441.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Week_01/G20200343030441/42.\346\216\245\351\233\250\346\260\264.java" => Week_01/G20200343030441/LeetCode_42_441.java (100%) diff --git "a/Week_01/G20200343030441/42.\346\216\245\351\233\250\346\260\264.java" b/Week_01/G20200343030441/LeetCode_42_441.java similarity index 100% rename from "Week_01/G20200343030441/42.\346\216\245\351\233\250\346\260\264.java" rename to Week_01/G20200343030441/LeetCode_42_441.java From f6b0dfc7bae88a90114f7a0252ac65ce5db84dd4 Mon Sep 17 00:00:00 2001 From: zhang teng <1299220775@qq.com> Date: Mon, 17 Feb 2020 14:32:33 +0800 Subject: [PATCH 0281/1268] =?UTF-8?q?Rename=20283.=E7=A7=BB=E5=8A=A8?= =?UTF-8?q?=E9=9B=B6.java=20to=20LeetCode=5F283=5F441.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../G20200343030441/LeetCode_283_441.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Week_01/G20200343030441/283.\347\247\273\345\212\250\351\233\266.java" => Week_01/G20200343030441/LeetCode_283_441.java (100%) diff --git "a/Week_01/G20200343030441/283.\347\247\273\345\212\250\351\233\266.java" b/Week_01/G20200343030441/LeetCode_283_441.java similarity index 100% rename from "Week_01/G20200343030441/283.\347\247\273\345\212\250\351\233\266.java" rename to Week_01/G20200343030441/LeetCode_283_441.java From 49bc0c872d554f31edc39372286c10dbbce8102c Mon Sep 17 00:00:00 2001 From: "wenjing.chen" Date: Mon, 17 Feb 2020 14:37:22 +0800 Subject: [PATCH 0282/1268] =?UTF-8?q?575=E6=B7=BB=E5=8A=A0LeetCode=2015=20?= =?UTF-8?q?=E4=B8=89=E6=95=B0=E4=B9=8B=E5=92=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030575/LeetCode_15_575.swift | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 Week_01/G20200343030575/LeetCode_15_575.swift diff --git a/Week_01/G20200343030575/LeetCode_15_575.swift b/Week_01/G20200343030575/LeetCode_15_575.swift new file mode 100644 index 00000000..a51551a5 --- /dev/null +++ b/Week_01/G20200343030575/LeetCode_15_575.swift @@ -0,0 +1,53 @@ +/* + * @lc app=leetcode.cn id=15 lang=swift + * + * [15] 三数之和 + */ + +// @lc code=start +class Solution { + func threeSum(_ nums: [Int]) -> [[Int]] { + var map = Dictionary>() + for i in 0..() + } + + map[nums[i]]!.insert(i) + } + var result = Set<[Int]>() + for i in 0.. 2 || (set.contains(i) == false && set.contains(j) == false) { + result.insert(sortThreeNum([nums[i], nums[j], opsiteSum])) + } + } + } + return Array(result) + } + + func sortThreeNum(_ nums: [Int]) -> [Int]{ + assert(nums.count == 3) + if nums[0] <= nums[1] { + if nums[1] <= nums[2] { + return [nums[0], nums[1], nums[2]] + }else if nums[0] <= nums[2] { + return [nums[0], nums[2], nums[1]] + }else{ + return [nums[2], nums[0], nums[1]] + } + }else{ + if nums[0] <= nums[2] { + return [nums[1], nums[0], nums[2]] + }else if nums[1] <= nums[2] { + return [nums[1], nums[2], nums[0]] + }else{ + return [nums[2], nums[1], nums[0]] + } + } + } +} + +// @lc code=end + From 380e60d0afc40e360a737eede27234a51c900f66 Mon Sep 17 00:00:00 2001 From: Wisee <1247539141@qq.com> Date: Mon, 17 Feb 2020 14:41:52 +0800 Subject: [PATCH 0283/1268] Add files via upload --- .../LeetCode_189_G20200343030505.java | 34 +++++++ .../LeetCode_1_G20200343030505.java | 32 +++++++ .../LeetCode_21_G20200343030505.java | 39 ++++++++ .../LeetCode_26_G20200343030505.java | 37 ++++++++ .../LeetCode_283_G20200343030505.java | 31 ++++++ .../LeetCode_42_G20200343030505.java | 30 ++++++ .../LeetCode_641_G20200343030505.java | 94 +++++++++++++++++++ .../LeetCode_66_G20200343030505.java | 12 +++ .../LeetCode_88_G20200343030505.java | 30 ++++++ 9 files changed, 339 insertions(+) create mode 100644 Week_01/G20200343030505/LeetCode_189_G20200343030505.java create mode 100644 Week_01/G20200343030505/LeetCode_1_G20200343030505.java create mode 100644 Week_01/G20200343030505/LeetCode_21_G20200343030505.java create mode 100644 Week_01/G20200343030505/LeetCode_26_G20200343030505.java create mode 100644 Week_01/G20200343030505/LeetCode_283_G20200343030505.java create mode 100644 Week_01/G20200343030505/LeetCode_42_G20200343030505.java create mode 100644 Week_01/G20200343030505/LeetCode_641_G20200343030505.java create mode 100644 Week_01/G20200343030505/LeetCode_66_G20200343030505.java create mode 100644 Week_01/G20200343030505/LeetCode_88_G20200343030505.java diff --git a/Week_01/G20200343030505/LeetCode_189_G20200343030505.java b/Week_01/G20200343030505/LeetCode_189_G20200343030505.java new file mode 100644 index 00000000..55116916 --- /dev/null +++ b/Week_01/G20200343030505/LeetCode_189_G20200343030505.java @@ -0,0 +1,34 @@ +/** + * + */ + +/** + * @author huangwen05 + * + * @date: 2020年2月16日 下午8:47:10 + */ +public class LeetCode_189_G20200343030505 { + public void rotate(int[] nums, int k) { + if(nums == null || nums.length == 0) { + return; + } + + int lenth = nums.length; + int r = k%lenth; + if(r == 0) return; + int x = lenth - r; + rotate(nums,0, x - 1); + rotate(nums, x, lenth - 1); + rotate(nums, 0, lenth - 1); + } + + public void rotate(int[] nums, int i, int j) { + while (i < j) { + int temp = nums[i]; + nums[i] = nums[j]; + nums[j] = temp; + --j; + ++i; + } + } +} \ No newline at end of file diff --git a/Week_01/G20200343030505/LeetCode_1_G20200343030505.java b/Week_01/G20200343030505/LeetCode_1_G20200343030505.java new file mode 100644 index 00000000..4f67126a --- /dev/null +++ b/Week_01/G20200343030505/LeetCode_1_G20200343030505.java @@ -0,0 +1,32 @@ +/** + * + */ + +/** + * @author huangwen05 + * + * @date: 2020年2月16日 下午8:47:10 + */ +public class LeetCode_1_G20200343030505 { + public int[] twoSum(int[] nums, int target) { + if(nums == null || nums.length < 2) { + return new int[0]; + } + + Map map = new HashMap(); + for(int i=0;i stacks = new Stack(); + int maxArea = 0; + for(int i=0;i height[stacks.peek()]) { + h = height[stacks.pop()]; + + if(!stacks.isEmpty()) { + int area = (Math.min(height[i], height[stacks.peek()]) - h) * (i - stacks.peek() - 1); + maxArea += area; + } + } + + stacks.add(i); + } + + return maxArea; + } + } \ No newline at end of file diff --git a/Week_01/G20200343030505/LeetCode_641_G20200343030505.java b/Week_01/G20200343030505/LeetCode_641_G20200343030505.java new file mode 100644 index 00000000..216e4b06 --- /dev/null +++ b/Week_01/G20200343030505/LeetCode_641_G20200343030505.java @@ -0,0 +1,94 @@ +/** + * + */ + +/** + * @author huangwen05 + * + * @date: 2020年2月16日 下午8:56:10 + */ +public class LeetCode_641_G20200343030505 { + + private int front; + private int rear; + private int capacity; + private int[] arr; + + /** Initialize your data structure here. Set the size of the deque to be k. */ + public MyCircularDeque(int k) { + arr = new int[k + 1]; + capacity = k + 1; + } + + /** Adds an item at the front of Deque. Return true if the operation is successful. */ + public boolean insertFront(int value) { + if(isFull()) return false; + front = (front - 1 + capacity)%capacity; + arr[front] = value; + return true; + } + + /** Adds an item at the rear of Deque. Return true if the operation is successful. */ + public boolean insertLast(int value) { + if(isFull()) return false; + arr[rear] = value; + rear = (rear + 1)%capacity; + return true; + } + + /** Deletes an item from the front of Deque. Return true if the operation is successful. */ + public boolean deleteFront() { + if(isEmpty()) return false; + arr[front] = 0; + front = (front + 1)%capacity; + return true; + } + + /** Deletes an item from the rear of Deque. Return true if the operation is successful. */ + public boolean deleteLast() { + if(isEmpty()) return false; + rear = (rear - 1 + capacity)%capacity; + arr[rear] = 0; + return true; + } + + /** Get the front item from the deque. */ + public int getFront() { + if(isEmpty()) return -1; + return arr[front]; + } + + /** Get the last item from the deque. */ + public int getRear() { + if(isEmpty()) return -1; + return arr[(rear - 1 + capacity)%capacity]; + } + + /** Checks whether the circular deque is empty or not. */ + public boolean isEmpty() { + if(front == rear) return true; + return false; + } + + /** Checks whether the circular deque is full or not. */ + public boolean isFull() { + if((rear + 1)%capacity == front) { + return true; + } else { + return false; + } + } +} + +/** + * Your MyCircularDeque object will be instantiated and called as such: + * MyCircularDeque obj = new MyCircularDeque(k); + * boolean param_1 = obj.insertFront(value); + * boolean param_2 = obj.insertLast(value); + * boolean param_3 = obj.deleteFront(); + * boolean param_4 = obj.deleteLast(); + * int param_5 = obj.getFront(); + * int param_6 = obj.getRear(); + * boolean param_7 = obj.isEmpty(); + * boolean param_8 = obj.isFull(); + */ \ No newline at end of file diff --git a/Week_01/G20200343030505/LeetCode_66_G20200343030505.java b/Week_01/G20200343030505/LeetCode_66_G20200343030505.java new file mode 100644 index 00000000..0ad39c5d --- /dev/null +++ b/Week_01/G20200343030505/LeetCode_66_G20200343030505.java @@ -0,0 +1,12 @@ +/** + * + */ + +/** + * @author huangwen05 + * + * @date: 2020年2月16日 下午8:50:14 + */ +public class LeetCode_88_G20200343030505 { + +} diff --git a/Week_01/G20200343030505/LeetCode_88_G20200343030505.java b/Week_01/G20200343030505/LeetCode_88_G20200343030505.java new file mode 100644 index 00000000..7f0e4982 --- /dev/null +++ b/Week_01/G20200343030505/LeetCode_88_G20200343030505.java @@ -0,0 +1,30 @@ +/** + * + */ + +/** + * @author huangwen05 + * + * @date: 2020年2月16日 下午8:50:14 + */ +public class LeetCode_66_G20200343030505 { + public int[] plusOne(int[] digits) { + if(digits == null || digits.length == 0) { + return new int[0]; + } + + int i = digits.length - 1; + while (i >= 0) { + digits[i] = digits[i] + 1; + digits[i] = digits[i] % 10; + if(digits[i] != 0) { + return digits; + } + --i; + } + + int[] result = new int[digits.length + 1]; + result[0] = 1; + return result; + } +} \ No newline at end of file From 290e8130381f3b70f4d2b25c6b842762f8bc5e30 Mon Sep 17 00:00:00 2001 From: Huangzikun <381560728@qq.com> Date: Mon, 17 Feb 2020 14:44:49 +0800 Subject: [PATCH 0284/1268] Revert "Delete NOTE.md" This reverts commit add90fd --- Week_01/G20200343030393/NOTE.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 Week_01/G20200343030393/NOTE.md diff --git a/Week_01/G20200343030393/NOTE.md b/Week_01/G20200343030393/NOTE.md new file mode 100644 index 00000000..4f6b8afb --- /dev/null +++ b/Week_01/G20200343030393/NOTE.md @@ -0,0 +1 @@ +学习笔记 From cd08d8b286a2cbe490784401063abc6561a57994 Mon Sep 17 00:00:00 2001 From: wangfeng Date: Mon, 17 Feb 2020 15:00:29 +0800 Subject: [PATCH 0285/1268] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E5=91=A8=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A=E6=8F=90=E4=BA=A4week01?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/G20200343030503/LeetCode_11_503.java | 32 +++++++ Week_01/G20200343030503/LeetCode_15_503.java | 44 ++++++++++ Week_01/G20200343030503/LeetCode_189_503.java | 25 ++++++ Week_01/G20200343030503/LeetCode_1_503.java | 38 ++++++++ Week_01/G20200343030503/LeetCode_22_503.java | 24 +++++ Week_01/G20200343030503/LeetCode_283_503.java | 22 +++++ Week_01/G20200343030503/LeetCode_66_503.java | 25 ++++++ Week_01/G20200343030503/LeetCode_70_503.java | 28 ++++++ Week_01/G20200343030503/LeetCode_88_503.java | 88 +++++++++++++++++++ Week_01/G20200343030503/NOTE.md | 71 ++++++++++++++- 10 files changed, 396 insertions(+), 1 deletion(-) create mode 100644 Week_01/G20200343030503/LeetCode_11_503.java create mode 100644 Week_01/G20200343030503/LeetCode_15_503.java create mode 100644 Week_01/G20200343030503/LeetCode_189_503.java create mode 100644 Week_01/G20200343030503/LeetCode_1_503.java create mode 100644 Week_01/G20200343030503/LeetCode_22_503.java create mode 100644 Week_01/G20200343030503/LeetCode_283_503.java create mode 100644 Week_01/G20200343030503/LeetCode_66_503.java create mode 100644 Week_01/G20200343030503/LeetCode_70_503.java create mode 100644 Week_01/G20200343030503/LeetCode_88_503.java diff --git a/Week_01/G20200343030503/LeetCode_11_503.java b/Week_01/G20200343030503/LeetCode_11_503.java new file mode 100644 index 00000000..2cb2a22b --- /dev/null +++ b/Week_01/G20200343030503/LeetCode_11_503.java @@ -0,0 +1,32 @@ +/** + * 采用双指针向中间移动 + * 1. 遍历数组 并且定义2个指针 rear和head 如果head < rear 就遍历 + * 2. 求面积 s = x * y + * x = (rear - head) + * y = Math.min(nums[rear],nums[head]); + * 3. 取出最大的面积 + * + * 最容易出现问题的就是: 三目运算中++ -- 的使用 + * + */ +class Solution { + public int maxArea(int[] nums) { + int maxArea = 0; + for (int head = 0,rear = nums.length - 1; head < rear; ) { + //int minHeight = nums[head] > nums[rear] ? nums[rear--] : nums[head++] ; + int minHeight = 0; + if (nums[head] > nums[rear]) { + minHeight = nums[rear]; + rear --; + }else { + minHeight = nums[head]; + head ++; + } + + int area = (rear - head + 1) * minHeight; + maxArea = Math.max(maxArea,area); + + } + return maxArea; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030503/LeetCode_15_503.java b/Week_01/G20200343030503/LeetCode_15_503.java new file mode 100644 index 00000000..5b984315 --- /dev/null +++ b/Week_01/G20200343030503/LeetCode_15_503.java @@ -0,0 +1,44 @@ +/** + * + * 三数之和 + * 核心思想 排序 + 双指针 或者 使用哈希表 + * 排序 + 双指针 中 1. 排序是前提(特别注意排序问题) 2. 双指针向内收敛 + * 难以想到的地方: + * sum = 0的时候去完重复 i和j都需要变化 i++ j-- + * + */ + +class Solution { + public List> threeSum(int[] nums) { + //结果保存在list集合中 + List> result = new ArrayList<>(); + //排序 + Arrays.sort(nums); + //遍历集合 + //定义2个指针 i、j + int i; + int j; + for (int k = 0; k < nums.length; k++) { + // 因为已经排好序nums[k],nums[i],nums[j]中nums[k]最小,如果nums[k]大于0那么三数只和就不可能等于0,直接返回 + if (nums[k] > 0) break; + //k对应元素去重 + if (k > 0 && nums[k] == nums[k-1]) continue; + i = k + 1; //i从k的下一个元素开始 + j = nums.length - 1;//j从最后一个元素开始 + while (i < j) { + int sum = nums[k] + nums[i] + nums[j]; + if ( sum == 0) { + result.add(Arrays.asList(nums[k],nums[i],nums[j])); + //i、j元素去重 + while (i < j && nums[i] == nums[i+1]) { i++; } + while (i < j && nums[j] == nums[j-1]) { j--; } + i++; + j--; + } + else if (sum < 0) i ++; + else j --; + } + } + return result; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030503/LeetCode_189_503.java b/Week_01/G20200343030503/LeetCode_189_503.java new file mode 100644 index 00000000..44134e72 --- /dev/null +++ b/Week_01/G20200343030503/LeetCode_189_503.java @@ -0,0 +1,25 @@ +/** + * + * homework + * https://leetcode-cn.com/problems/rotate-array/ + * + * 题目要点: 1. 使用取余的方式判断i+k大于len 则从头开始 arr[(i + k) % nums.length] + * 2. 需要重新开辟一个数组去存放旋转之后的值 用于改变原数组的顺序 + * time complexity O(n) + * space complexity O(n) + * 关于官方题解中的 使用环状和使用反转 现阶段理解比较困难 + * + */ +class Solution { + public void rotate(int[] nums, int k) { + int[] arr = new int[nums.length]; + + for (int i = 0; i < nums.length; i++) { + arr[(i + k) % nums.length] = nums[i]; + } + + for (int i = 0; i < arr.length; i++) { + nums[i] = arr[i]; + } + } +} \ No newline at end of file diff --git a/Week_01/G20200343030503/LeetCode_1_503.java b/Week_01/G20200343030503/LeetCode_1_503.java new file mode 100644 index 00000000..a21bccfe --- /dev/null +++ b/Week_01/G20200343030503/LeetCode_1_503.java @@ -0,0 +1,38 @@ +/* + * homework + * https://leetcode-cn.com/problems/two-sum/ + * 方式一、 暴力求解法 + * 双层for循环 + * time complexity O(n^2) + * space complexity O(1) + * 方式二、 使用哈希表 + * time complexity O(n) 只遍历了一边nums所以时间复杂度是O(n) + * space complexity O(n) 空间复杂度取决于hash表中元素的个数 + * + * + * + * 题目明确: 每种输入只会对应一个答案 + */ +class Solution { + // public int[] twoSum(int[] nums, int target) { + // for (int i = 0; i < nums.length; i++) { + // for (int j = i + 1; j < nums.length; j++) { + // if (nums[i] + nums[j] == target) { + // return new int[] { i, j }; + // } + // } + // } + + // throw new IllegalArgumentException("No two sum solution"); + // } + public int[] twoSum(int[] nums, int target) { + Map map = new HashMap(); + for (int i = 0; i < nums.length; i++) { + if (map.containsKey(target - nums[i])) { + return new int[]{i,map.get(target - nums[i])}; + } + map.put(nums[i],i); + } + throw new IllegalArgumentException("No two sum solution"); + } +} \ No newline at end of file diff --git a/Week_01/G20200343030503/LeetCode_22_503.java b/Week_01/G20200343030503/LeetCode_22_503.java new file mode 100644 index 00000000..fba1a0e8 --- /dev/null +++ b/Week_01/G20200343030503/LeetCode_22_503.java @@ -0,0 +1,24 @@ +/** + * + * homework + * https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/ + * + * 题目要点: 1. 有序的数组 2. 双指针法解决相同元素 3. 返回的是新数组的长度 + * 特别注意: 遍历的时候一定要根据返回的数组的新的长度进行遍历,否则会出现 eg. [1,1,2] ==> [1,2,2] + * time complexity O(n) + * space complexity O(1) + * + * + */ + +class Solution { + public int removeDuplicates(int[] nums) { + int j = 0; + for (int i = 1; i < nums.length; i++) { + if (nums[j] != nums[i]) { + nums[++j] = nums[i]; + } + } + return j + 1; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030503/LeetCode_283_503.java b/Week_01/G20200343030503/LeetCode_283_503.java new file mode 100644 index 00000000..1d61fa52 --- /dev/null +++ b/Week_01/G20200343030503/LeetCode_283_503.java @@ -0,0 +1,22 @@ +class Solution { + /** + * + * 1. 遍历数组,如果元素不为0,先用nums[j]记录该值nums[i] + * 2. 判断如果j与i不想等,把nums[i]所对应的值改为0 否则继续遍历 + * 3. j++ + * + * 做这个题目的时候,老师的这段代码思想可以理解,就是最终卡到了赋值 i!=j num[i] = 0 这块,遇到第1个0开始,下一次遍历j和i 就不相同了此时要先使用nums[j]记录nums[i]当前的值,然后把nums[i]修改为0 + **/ + public void moveZeroes(int[] nums) { + int j = 0; + for (int i = 0; i < nums.length; i++) { + if (nums[i] != 0) { + nums[j] = nums[i]; + if (i != j ) { + nums[i] = 0; + } + j++; + } + } + } +} \ No newline at end of file diff --git a/Week_01/G20200343030503/LeetCode_66_503.java b/Week_01/G20200343030503/LeetCode_66_503.java new file mode 100644 index 00000000..8c7d07e6 --- /dev/null +++ b/Week_01/G20200343030503/LeetCode_66_503.java @@ -0,0 +1,25 @@ +/** + * + * homework + * https://leetcode-cn.com/problems/plus-one/ + * + * 题目理解: 其实就是多位数加1之后的值 特殊情况就是出现9的时候需要进位,如果999这种数字,加1之后需要进位,需要给数组扩容 + * time complexity O(n) + * space complexity O(1) + * + * + */ +class Solution { + public int[] plusOne(int[] digits) { + for (int i = digits.length - 1; i >= 0 ; i--) { + digits[i]++; + digits[i] = digits[i]%10; + if (digits[i] != 0) { + return digits; + } + } + digits = new int[digits.length + 1]; + digits[0] = 1; + return digits; + } +} \ No newline at end of file diff --git a/Week_01/G20200343030503/LeetCode_70_503.java b/Week_01/G20200343030503/LeetCode_70_503.java new file mode 100644 index 00000000..80e339b1 --- /dev/null +++ b/Week_01/G20200343030503/LeetCode_70_503.java @@ -0,0 +1,28 @@ +/** + * 爬楼梯 + * 方式一、 使用递归 + * 方式二、 初始化3个值,每次修改前2个值,第三个值等于前两个值只和 + * + */ +class Solution { + public int climbStairs(int n) { + // if (n <= 2) { + // return n; + // } + // return climbStairs(n - 1) + climbStairs(n - 2); + if(n <= 2) { + return n; + } + int step_one = 1; + int step_two = 2; + + int step_three = 0; + for (int i = 3 ; i <= n ;i++) { + step_three = step_two + step_one; + step_one = step_two; + step_two = step_three; + } + return step_three; + } + +} \ No newline at end of file diff --git a/Week_01/G20200343030503/LeetCode_88_503.java b/Week_01/G20200343030503/LeetCode_88_503.java new file mode 100644 index 00000000..2a9805d9 --- /dev/null +++ b/Week_01/G20200343030503/LeetCode_88_503.java @@ -0,0 +1,88 @@ +/** + * + * homework + * https://leetcode-cn.com/problems/merge-sorted-array/ + * + * 方式一、直接将数组二中的元素添加到数组一中然后排序 + * time complexity O(nlogn) Arrays.sort(arr) 内部用的是快排时间复杂度是nlogn > 大于for循环的时间复杂度n所以取大的nlog + * space complexity O(1) + * + * 方式二、将输出数组中的有效值存放到复制数组中nums1_copy, 分别定义2个指针到nums1_copy p1和nums2 p2 然后循环判断p1和p2所对应的值,将其添加到输出数组中 + * time complexity O(n + m) + * space complexity O(m) 使用了一个复制数组,所以空间复杂度为O(m) + * 方式二特别注意一点: 假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 如果没有这个条件那么会出现数组ArrayIndexOutOfBoundsException + * + * 方式三、 + * 核心思想,从后往前将nums2和nums1中有效值中大的一次放到nums1的最后 + * 实现: 定义三个指针分别从指向nums有效数值处p1,nums1的last处p,nums2的last处p2 + * time complexity O(n + m) + * space complexity O(1) 在原数组上进行的操作 + * + * + * 一定要注意: 题干明确表示需要 1. 有序整数数组 2. nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素 + * + */ + +时间复杂度O(n) 是不是只要是一层循环,就可以理解为时间复杂度就是O(n) +class Solution1 { + + public void merge1(int[] nums1, int m, int[] nums2, int n) { + int j = 0; + for (int i = m; i < m + n; i++) { + nums1[i] = nums2[j]; + j++; + } + Arrays.sort(nums1); + } + + public void merge2(int[] nums1, int m, int[] nums2, int n) { + //复制nums1的数组,保留有效数据位 + int[] nums1_copy = new int[m]; + System.arraycopy(nums1,0,nums1_copy,0,m); + //定义2个指针p1 0~m p2 0~n + int p1 = 0; + int p2 = 0; + int p = 0; + while (p1 < m && p2 < n) { + if (nums1_copy[p1] < nums2[p2]) { + nums1[p++] = nums1_copy[p1++]; + }else { + nums1[p++] = nums2[p2++]; + } + } + if (p1 < m) { + System.arraycopy(nums1_copy,p1,nums1,p1+p2,m+n-p1-p2); + } + if (p2 < n) { + System.arraycopy(nums2,p2,nums1,p1+p2,m+n-p1-p2); + } + } + /** + * 核心思想,因为题干明确 nums1 有足够的空间来保存 nums2 中的元素 + * 所以从nums1的last处开始存储nums1有效值与nums2中的最大值 + * @param nums1 + * @param m + * @param nums2 + * @param n + */ + public void merge3(int[] nums1, int m, int[] nums2, int n) { + //定义三个指针分别从指向nums有效数值处p1,nums1的last处p,nums2的last处p2 + //通常来说,下表总是从0开始,所以需要减1 + int p1 = m - 1; + int p2 = n - 1; + int p = m + n - 1; + + while (p1 >= 0 && p2>=0) { + if (nums1[p1] > nums2[p2]) { + nums1[p--] = nums1[p1--]; + }else { + nums1[p--] = nums2[p2--]; + } + } + //因为是在原数组nums1上进行操作,所以如果循环之后,nums1有多出来的不需要动,nums2多出来的需要放到nums1中 + System.arraycopy(nums2,0,nums1,0,p2+1); + } + +} + + diff --git a/Week_01/G20200343030503/NOTE.md b/Week_01/G20200343030503/NOTE.md index 50de3041..29ad703b 100644 --- a/Week_01/G20200343030503/NOTE.md +++ b/Week_01/G20200343030503/NOTE.md @@ -1 +1,70 @@ -学习笔记 \ No newline at end of file +一、 知识笔记 + + 1. 复杂度 常见的复杂度 + + O(1): Constant Complexity 常数复杂度 + O(log n): Logarithmic Complexity 对数复杂度 + + O(n): Linear Complexity 线性时间复杂度 + + O(n^2): N square Complexity 平⽅方 + O(n^3): N square Complexity ⽴立⽅方 + O(2^n): Exponential Growth 指数 + O(n!): Factorial 阶乘
 + + 2. 数据结构与算法 + + a. 程序**=**数据结构**+**算法 + + b. 数据结构: 线性结构和非线性结构。 + + 线性结构: 顺序存储结构(数组)和链式存储结构(链表) + + 1. 顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的 + 2. 链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息 + 3. 线性结构常见的有:数组、队列、链表和栈 + + 非线性结构: 二维数组,多维数组,广义表,树结构,图结构 + +二、 课后作业 + + 1. 两数之和: 借助hashmap 来求解,时间复杂度数组的大小O(n) ,空间复杂度取决于hashmap中元素的个数O(n) + + 2. 盛水最多的容器: 采用双指针向内收敛法 其实就是就面积 area = x * y ; x= (rear - head) ; y = Math.min(nums[rear],nums[head]); + + 3. 三数只和: 核心思想 排序 + 双指针 或者 使用哈希表 题目重点: 1. 排序, 2 双指针手敛,3. 数组中重复元素问题 + + 4. 删除数组中的重复项: 1. 有序的数组 2. 双指针法解决相同元素 3. 返回的是新数组的长度特别注意返回新数组的长度,遍历的时候一定要根据返回的数组的新的长度进行遍历 + + 5. 加一: 其实就是多位数加1之后的值 特殊情况就是出现9的时候需要进位,如果999这种数字,加1之后需要进位,需要给数组扩容 + + 6. 爬楼梯: 方法一使用递归,效率不高,方法二使用初始化3个值,每次修改前2个值,第三个值等于前两个值只和 + + 7. 合并2个有序数组: + + 方式1 将输出数组中的有效值存放到复制数组中nums1_copy, 分别定义2个指针到nums1_copy p1和nums2 p2 然后循环判断p1和p2所对应的值,将其添加到输出数组中 + + 方式2 从后往前在原数组上进行操作,减少了空间复杂度 + + 需要注意的地方 题干明确表示需要 1. 有序整数数组 2. nums1 有足够的空间来保存 nums2 中的元素如果nums1保存不下nums2那么会报数组下标越界 + + 8. 旋转数组: a. 使用取余的方式判断i+k大于len 则从头开始 arr[(i + k) % nums.length] + + b. 需要重新开辟一个数组去存放旋转之后的值 用于改变原数组的顺序 + + 关于官方题解中的 使用环状和使用反转 现阶段理解比较困难 + + 9. 移动0: 做这个题目的时候,老师的这段代码思想可以理解,就是最终卡到了赋值 i!=j num[i] = 0 这块,遇到第1个0开始,下一次遍历j和i 就不相同了此时要先使用nums[j]记录nums[i]当前的值,然后把nums[i]修改为0 + +三、 总结 + + 1. 基础知识点的复习: 每天复习一遍数据结构与算法的脑图,记住数据结构与算法的脉络 + 2. 代码过数遍: 当敲完一遍的时候,可以理解,第二天需要重新复习一下才能将结果敲出来 + 3. 看题解 + 4. 最重要的还是强迫自己不断的敲代码,训练自己的思维能力 + 5. 感谢助教的帮助 + +四、建议 + +​ 知识点稍微在细一点 ,现阶段对于知识点只能自己在网上搜索总结 + From 9d4bfa6e0e5503204ce55999f763bd678f357667 Mon Sep 17 00:00:00 2001 From: Huangzikun <381560728@qq.com> Date: Mon, 17 Feb 2020 15:05:48 +0800 Subject: [PATCH 0286/1268] reset note.md --- Week_01/G20200343030393/NOTE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Week_01/G20200343030393/NOTE.md b/Week_01/G20200343030393/NOTE.md index 4f6b8afb..50de3041 100644 --- a/Week_01/G20200343030393/NOTE.md +++ b/Week_01/G20200343030393/NOTE.md @@ -1 +1 @@ -学习笔记 +学习笔记 \ No newline at end of file From a61cc5ed2a0dd8c3ae899ec8cc4231cd431a9f00 Mon Sep 17 00:00:00 2001 From: huangshazsw Date: Mon, 17 Feb 2020 15:08:06 +0800 Subject: [PATCH 0287/1268] 633-Week 01 leetcode-week01-leetcode --- Week_01/G20200343030633/leetcode_189.py | 43 +++++++++++++ Week_01/G20200343030633/leetcode_21.py | 86 +++++++++++++++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 Week_01/G20200343030633/leetcode_189.py create mode 100644 Week_01/G20200343030633/leetcode_21.py diff --git a/Week_01/G20200343030633/leetcode_189.py b/Week_01/G20200343030633/leetcode_189.py new file mode 100644 index 00000000..4c7dd9cc --- /dev/null +++ b/Week_01/G20200343030633/leetcode_189.py @@ -0,0 +1,43 @@ +# 暴力 loop K ,每次把末尾换到头位 +#不知道为啥leetcode 执行的时候可以,提交后就超出限制 +def baolirotate(nums, k): + length = len(nums) + for _ in range(k): + previous = nums[length - 1] + for j in range(length): + temp = nums[j] + nums[j] = previous + previous = temp + + +# 环状替换 +def rotate(nums, n): + length = len(nums) + k = n % length + count = 0 + start = 0 + while count < length: + current = start + prev = nums[start] + print('count:', count) + while True: + next = (current + k) % length + temp = nums[next] + nums[next] = prev + prev = temp + current = next + count += 1 + if start == current: + break + start += 1 + + + +a = [1, 2, 3, 4, 5, 6] +k = 2 +print('原始:', a) + +# rotate(a, k) +baolirotate(a, k) + +print('移动', k, '位后:', a) diff --git a/Week_01/G20200343030633/leetcode_21.py b/Week_01/G20200343030633/leetcode_21.py new file mode 100644 index 00000000..a0504978 --- /dev/null +++ b/Week_01/G20200343030633/leetcode_21.py @@ -0,0 +1,86 @@ +# 数组暴力算法: + +# def mergeTwoLists(l1, l2): +# k = 0 +# for i in range(len(l1)): +# for j in range(k, len(l2)): +# if l2[j] > l1[i]: +# l2.insert(j, l1[i]) +# k += 1 +# break +# if j == (len(l2) - 1): +# l2.append(l1[i]) +# return l2 +# +# +# l1 = [1, 2, 3, 4] +# l2 = [1, 3, 4, 5] +# +# l3 = mergeTwoLists(l1, l2) +# +# print('reuslt:', l3) + + +# 链表暴力:递归 +class ListNode(object): + def __init__(self, x): + self.val = x + self.next = None + + def deepcopy(self): + nl = ListNode(self.val) + nl.next = self.next + return nl + + +list1 = ListNode(1) +list1.next = ListNode(2) +list1.next.next = ListNode(4) + +list2 = ListNode(1) +list2.next = ListNode(3) +list2.next.next = ListNode(4) + + +class Solution: + # 递归 + def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: + if l1 is None: + return l2 + elif l2 is None: + return l1 + elif l1.val < l2.val: + l1.next = self.mergeTwoLists(l1.next, l2) + return l1 + else: + l2.next = self.mergeTwoLists(l1, l2.next) + return l2 + + # 迭代 + def mergeTwoLists2(self, l1: ListNode, l2: ListNode) -> ListNode: + prehead = ListNode(-1) + + prev = prehead + while l1 and l2: + if l1.val <= l2.val: + prev.next = l1 + l1 = l1.next + else: + prev.next = l2 + l2 = l2.next + prev = prev.next + + # exactly one of l1 and l2 can be non-null at this point, so connect + # the non-null list to the end of the merged list. + prev.next = l1 if l1 is not None else l2 + + return prehead.next + + +s = Solution() +l = s.mergeTwoLists2(list1, list2) + +while l.next is not None: + print(l.val) + l = l.next +print(l.val) From aaf69a79e9ee7563c777335fc96b2140b89c8f58 Mon Sep 17 00:00:00 2001 From: huoyitong <349247397@qq.com> Date: Mon, 17 Feb 2020 15:08:22 +0800 Subject: [PATCH 0288/1268] 519-Week 01 --- .DS_Store | Bin 0 -> 10244 bytes Week_00/.DS_Store | Bin 0 -> 49156 bytes Week_00/G20200343030519/.DS_Store | Bin 0 -> 6148 bytes Week_01/.DS_Store | Bin 0 -> 49156 bytes .../G20200343030519/Week 01/LeetCode_189_519.js | 0 .../G20200343030519/Week 01/LeetCode_1_519.js | 0 .../G20200343030519/Week 01/LeetCode_21_519.js | 0 .../G20200343030519/Week 01/LeetCode_26_519.js | 0 .../G20200343030519/Week 01/LeetCode_283_519.js | 0 .../G20200343030519/Week 01/LeetCode_42_519.js | 0 .../G20200343030519/Week 01/LeetCode_641_519.js | 0 .../G20200343030519/Week 01/LeetCode_66_519.js | 0 .../G20200343030519/Week 01/LeetCode_88_519.js | 0 13 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 .DS_Store create mode 100644 Week_00/.DS_Store create mode 100644 Week_00/G20200343030519/.DS_Store create mode 100644 Week_01/.DS_Store rename {Week_00 => Week_01}/G20200343030519/Week 01/LeetCode_189_519.js (100%) rename {Week_00 => Week_01}/G20200343030519/Week 01/LeetCode_1_519.js (100%) rename {Week_00 => Week_01}/G20200343030519/Week 01/LeetCode_21_519.js (100%) rename {Week_00 => Week_01}/G20200343030519/Week 01/LeetCode_26_519.js (100%) rename {Week_00 => Week_01}/G20200343030519/Week 01/LeetCode_283_519.js (100%) rename {Week_00 => Week_01}/G20200343030519/Week 01/LeetCode_42_519.js (100%) rename {Week_00 => Week_01}/G20200343030519/Week 01/LeetCode_641_519.js (100%) rename {Week_00 => Week_01}/G20200343030519/Week 01/LeetCode_66_519.js (100%) rename {Week_00 => Week_01}/G20200343030519/Week 01/LeetCode_88_519.js (100%) diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..3da2da44df4e21b47efe84ba87c2e44f1cdba356 GIT binary patch literal 10244 zcmeHM&u<$=6n>MWc2 zdXtcZRK9QrAtXRTaP5g37bGN3(7%8Ks@gLgs6eVz6$#$#tmECa*9#J*k(jY|-rJdP z-hT7!Z+B-503^3rO#;LKK*EDr`50C`3hQS_R~fKdQfLW|2d$PYRA{}?g%k}U10n+= z10n+=10n;5B?I`(W<@&6t*Au?L3HL&Dyrbt##|b%31=T9l~a-pf58A zZOpb=+qSsH9xQ|pMazd0dx=5#aBPp+xU6kk-16Z-?8OJMuT1O}3bC$^@naSoNS0es ziwuYibZ3CA-G^WTYM_GYTE7qGK6duiX+B@pXc^n2m0Keh9zXf+vb(?9x4*IB*c%9a zfI}e+i!ck9ArDv4PCy;1a~iGKS7AcFfXBH%t-=OC2v$JB&uu6|0umnd-TvtEcC%r} zzE^H&YST<4ek22fLq}c+Nm4|L9FN>6Y|!n3Su!`9xsq{>oh_8ijk4`8QK}vIrSh_> zY!~H`D^xd2s;(H;V700sqIe?KgZy_&o@ceB2;yZ7GyolmW41F`RV5as6w^=IgLlA>0&>}is3+tYj? z%k7DVBS()Ne=#Z#pEx-@GCX=}bnNu#OJ`m_Q8sXCAe};^~5+u#oXfk9acU**DwHIqt|1=MF$T`^6uYFUe#{r@9i3XBT*9 z7$02c@ke|Wmhoq~3m?Mg@D+RmKfrzX6`qg~k;yCMJeeXF$tCgzd5bKPC9+1|CKVoF zp#9yRZC{OBQbp_eZe0R}&_*}HDbtT;e|gQ8sV7dIcEswBa!EG)kkRtQ*(w;iM)ex@ zuvxf!lWuvEF+})_Ir;yPXY!xPbM(}6lc!URT~a%2^89iFe_Z%v`djk6`;6q743uZm zDbJtoJnAh^M0Mopj|!A$vadWRJ@S0NuRJFM=Qin_+s@g?z2}Cg&fNS_fpbfF*#F*_ zeJYTB%E|uz_fLDXM^uNsKPr%Y+Rfg2&-ujnJtrN=KJ8@xz<~DKnfr!}s1AF7R3Q6l z4}13B<0?f=jE|NnmonF~rH z10n4^|ki#jQ02D{DI*t+gGGCu}?3+DE~*1o~D% mKg%4nEpE}n@}K`1@cg#t#QOi4Y|n}H|3fAu_j<4I`u{KCOX1f5 literal 0 HcmV?d00001 diff --git a/Week_00/.DS_Store b/Week_00/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b1dd1b63541d5d338a6d1d9bf3de7678073533f1 GIT binary patch literal 49156 zcmeI54UAk>8HVrO?rvvyTUZsLMwCemKjp{lc4j)eU}bH$&Z;0Pzxk#Ai)wa_?lJWM7gb1-ZLraZZx7b|y);EPLcWd2|2n z?$d6wl zlHZTr-n<~`T|PFxZg^~bSe_}nd2*KQ_&eV9H~B3|+T`B&FO-sMQW?9lcWB-CHJkkN zy)TmX+*DcCT)Ad^aIn7K!sr`^&V2K&$3G>h*)t?dF1daxdDTsSolH8BHGZY#WMNX- zG!nj2x4B8j45|L48WFl%oLLA6InIsOTM@<HM9yzCKOp;2l%R zxw*-O@~-s8@8#sX>RIKjwLfl2=~t4Z>qx+9hIG8<+}B!3WPM=^y5Pa7t(;*!Ve7$D zM$5@xPf53$^bLweiKbBsX!v8d@JkA=l{Ifo0!;!<0wDqE+b2c2yX8QAxvREx54p!( z7s4%F7sB7?X9xwW*C+R?K+5CT#K$F090_Vv?lYNw4=`Xq7exDx+^vcifx2TWe z`u@o&MvtvQI;W4)AQALY3a`9yaI!}`!>bH?Yk$5B|{rnsn z)6z52n3f1>+){kWreUPA(GQ-YXtQ}p0$vMy`!guzp*FYM| zfq06h5joI}GUgnBX>bm7G*nOW;nzVL%7J)_rV%+Xkx>RggL9yxp&WSOTObYPKs-g$ zh#e^BY6u#f104a;sa-p0ZQWm|q{k55UlJ!((Q9MP{ zuq=vtL;8hOzuIk=>Pfa71=3I!#Zxp5!=iJSffkj1Ax%SBboVhJ4P{Y0Mbj`WO3+{} z8ucWXd>EvmEQ+US8iqv)8mvX5p5(7S2GUR##Zx4WY4gIIMPV9}CifIcguSmFr$ID) zDzhk_qG=cwC1|h~l`C^0jpYkK8p@)0il$*%bRTF@dp2C&NI()HjgB)x8p@)0il$*% z6sN&jbb;=R-ZlWzP!`2gG!4t5I1SdKa%C=T8y`9sq@gT|r(zoTNIpD^il^fBfg}Ig z)57cj*4a$f(tfsZNPFcdboL{%G@dfHzOg5)`3y2DRCAeUNK?lwzrK*hof9ApWobM` z(}*mc%BYZ_!S!_=4Q1(5Zw6^7OXDe;Mr3K%pCM>)mUcAM8H1g-gEW+-@f1xXwzQmE zBWQ4zb~KcwpZz{aLs=S6ku*x?wWq^Sf5y!Q;QG2g5qjf0KZR(>dctD}o}y_)eO-5M zEyZbYeO*UG^>xdSfi#pw@f1zNvM5f2wWzOd8JwzadEz;chO#K0qG*()f+m{l;w_5N z@M-D@>l5Lga{NJnMm?2{3h@+8Bid8k6$)@qaj%lwQ+y(%vEuI_4YjA>DVj#Kr?@K= zEtf(Tb=$`6DLxU>xbJO{hT2o`6ip-QZ#at*G`RkTqoMj6KPybt(>3n%)>GM@f~RO2 zaeqVlq67`Dzu~q^^*37H57JQm4Ln8Cs9F|T2dh9D%Ak0Pq|s*@6r~|)(x8$EY5Z;-M8l^t zgW@TghGkHk25V56{~ywLWiv=a85B>^Gz^2z>I)2-=MAZyr`v}3aBynG_RQBn8p@)0 zil$*$l%T;{v`<^~FSmg-ltu9rO~bG#L4&nupSI}9dq5h>qIim=F|Fdwjpkt*k|y_* z=o1^N_dqm!Dzhk_qG=cwC1|h~?bjB)@F9?fvM8RSX;>D$3$$oIZBa>t7QOOukcP4- zo}y`37R70>7M0JO32DrI8l<5til=BAmPK(ItVR2^MRz|3(ohz~QxpyNNk+yw(ODP` zpQbG86Jgsp;ZFdKdMdLho}y`37R70B7IoXD`l62<0%<6V;whSjVbRukkVW0LS$)y> zYW(m2et1PG_zbSbJ!GGvDH!%7C~)?4uTa_Z8}EQ^LfI2f(KHNu5;Qn_IvQ#u|3KT+ z=cVPp%gUa3ilkxA)`n@Yv$f0dZ0-BzLNxpw@64Wfil$-Mlc2%cGn%b^-LW7IWluas z)3EG$BWO={wzg{Uo(ohz~Q#1|BqBsrKqS0*a zC1sF?vM8P+X~+ya{TUQ)B;ShCVCMmrWj>EOA9~Ruh(ptK9!B+@f1zNuqQ!- zwWl0SLK+i~gEW*q@f1zNvgZNNo@Lsek_c&>y&t5Z`k;7mZtS$P$A&`c$ zD4wEeSQf=;uof+Ai>`YUq@gT|r$`zV)1oL1Ns|_pM7XCM+je;7Pp^=@%cU}l;whSj zWl@|4Ytf3f=-&5%G?Yd06ivghX!|nIqVjzrblXrCz4#*_4P{Y0Mbj`WO3+{}TG19= zcM3>DSrkvvGz^OpG+2wu_pgNBxcqXEhO#K0B59a)N-zyclY5FJLK-(+1<~-S%%XUT zreRo=put*HDw{$YPhAVrP!`2gG!4t5`#_7bbxQtQr$QPpe;1^oEE=TVyYau&4CxV@ zt5IslNw5ZuYLrg;1xP{}6i?CZ!ZIjMgEeSWqqOh|kcKiSo+4?OHA-;XU~80QgrW`l z=zfSsRHKBaXd0G5(Y7HKN96G&s!`heJV-+s6i?AK41>--1vIGreSvv%Q6v!>^o

32XK0t^I8E>~`{B8HJ@*$5c_lUj)ektYV($P;rViw5ey}gn zvkKf6ae2Wa9rovP6UfFzWxC&n0v?UB?pkqh@K#;>+($-m_AFHJ5{pC98-M=t&#xjh zNgesKRW!(^-#1v4#XKD0N)w1tXCgQOW#Gcq>I89^+uXPNz|d$@c-0y=ZO6dCX1Z<- zHuXo5thnF8M5OsT*#3SJZBM|He72F0BY}j|Hp1UCQ3eu}VA4RRNc99)7T_$2jn>59 zC|fTK;MT5>*Ht;K8zeC3SP?69zdblH@0@5a#TXOKe``N!`-l1sf0rYYZ*DI#0`vP6 zbUVn%dWc#8y4r=uCa|4Y1Z4EnP73mak7jOhdld`kK4&057A>sOIu&hK&{K*cTve-uWzucW*8oE1$uN2nyf zchfN|l;(%B{;W4A#d(;Yyvrwvy`dp!8hoSCh1T+s@A!nuY3Y)TPKUen$#%?z!y^h| zWjWo$al3=liH z+(_`%7*1}ec@$=muB8h2Ua55sJ&L2loL$W=h+%Ue>ec9dadEaScGSQYS(z(zF3)H~ z?d)DFjteHpj5PczV_cXbZUxZ5v5v_9P!!1ENxc(mdoaGlCMkWN~?bc5Fu z2bdTT?1Aiab9U18Gf(nUk365_yx2}=XZ;?eYGN<#TDjxICoIe4{?cfqTdn5W7393nlzn~%bGR6JA z@=4TjGFVeaRz8wqcx5qDuRJuvT8L8~`ltVx^qLlOl_g2~vdCsgIjmDP%t@F^%MY1!D6UR|nccozYg$Sxv@q8N(3F0eZHOLY+($sGD4i{%th zxow(RQEYH13n0&g`?TPGo&vg=${VYyc94FSo!6vIRm)*Yiu~xY(U7wlE=y0j6 z_9XWONcxzmWz)^V#qCE#(```)FH6)3A0`Qj_%001>nY^FkOjODc|Q6*Mf!_wH%_?# zF@w;{9DJC}Df~49RXC+v#*XHkAu{{e4TK^0F_US*g;&1@(H~_y+IfaF=_fRLt^M*9 z=S>1_PSwO)UJbD=3dZPCsZ!BA%O73yL`1e;K!E+&{>jxe0#*ubFkk-NTc2YUKBj}N9rd2f;c@2+m9nq6@(1on^hlmj zsXX|fVcvDTu{GV;E4EGh7oi5fSx7SX>3_#7Affbwx+${!Zcf*j21qndLub)z4d>B+8)~_0yVff% zc5|cJd+Sr3W8$#j9+S#MDRguxVm?Q)cYe2bj=Wv!S1JdgL%ViyKxpQjpO~(PuyTD2 zb!9(Fd|D8U!DGGjnzqN7lKf;?`r+o$(&1sIT+9sMvwHxikhGpWsaUM)4A$m~5)VC$ z|IB1Bz2zw`;uqJR&!?0;F9+2HS-UDxJu3IunZYSk2e5_5kGJ{4XXK0J&k~e=$to8q`J)foe|RIG}PVRRxtNoE%@?k=H$9RiZDiPdV%!pTw)Z8*~^ zsxzVGGrJYu_8sR{EaEv54Q}_2FL7>NrsRCxUR8a2QZ5Hp+jnu9)OPbtsQzrh0ZGU0 zTPLdG#aHk5XnbBYnd`lA1UMKtWyq6tJ{{}RReMBP8l~_$!Hu#jM%Ar%T92~7F-W6o zsseWw5)4I1aPrTg-6WZ^GjnSm^Jkynq6j{qwIxi#{$(S+C{%N}nr#{jc6-JTe$$p~i)A*CM7=#yj?wowr`Q98&C~Rpw_~s2^gEBo_gW5T(96owhV%J(;n4&?EgLS=3o~JP zmK>F-*x4sP+IG)Q_Q^Al7{OE939>j16Mjqa7mex{`%SW_;nd8+7NFREXu9TB~+u4zO7uy-_2!!lXrQ$kXwXC9Vls`WBBRXL>RLbmf z!7KLQv}dm!Dcq}<1keRT)3YUt-DLNNJD;syo(hZpx97DrHLoqY2y&SZR{He0kIiL5 z9BR2=^MQ5YwN+u@H|GG)+#&DBd#iokOL=|K6A4O}F214< za@@OWe-QAmuSj2`c&BC&NUJ+T)GuwV43gEh9%~iLZmIL6SSL?FUu@TSluL_=t;fWM z4nnP(?0YI^pH7!Bmb0B~YgU)4B4mlG-BAO1W?43JLQ{0^kn46AcJfjEV?*{s+w=J7 zVByDiq2n=&u9@p2PK(R@n!><*aQJRvHBRsnbweOuT&G(*?xo#4iyG$8`gbbGhVm>A zuas^$1kyPywj29P{gO^Jc_cmlg&fw!oM$`iO7uA|_n2JJGP@$ujxJ%*&@RMzvgqAw zu^;_M*;+tolpyozr@F=TtJz!DapTf&PAv794coecDlcUK`l0j4WLA)0hm{zgCrMx86+@Zn$k4ESbd@6bNFrZjzi=h~M*gXteh}iJ*F~PsRlH{^MSolrn6K2J zz$@*w!>O4kHANfv+V0NS@E#oXF!!ABCDpFs zFjRaDm0=N=)Kmgx!3gPT=ro3L;`5s_MEj#0SBSUrcy9YevSp>ho55Th8DTl^d~bD` zTDqo*#$7)MLn|92>9AX zoNX{K|&ox{$o`{(p*p`1^0=BL~!3CVETs`JEMhsA&wesS~#3V|LUpr zJEIWaq=nWQs^TSsbq`40~*2*=k$k zEiiQ4l9_OYC~y1Rb}QQ!QLrFPI;v_jS|;CIq;81;5$XdAvzYkEP9gz~_{ zV{4d;vj}A`;g)GPpLC?}lf75U1n~@FzYpd~M|#a_220pt@q62n6;4<|_X(t0D(QDJ z&C{DyCUu@1Oi>SlM^+uG`6vose0*X zIRG9O0XkE1)EYt!$$eQ`GoplVFtw)z&f$|hm;omrgMnx1Q5 zTdi0MTR4hosb}2~b0@^ZQu&s3!GuIIG69z3+m1QHonbV)P2*Nd=ssgnx$~5m!}bx$ zRcF;5Rv2@aiz;(`sIi4&3S%%5RKoRu`u4eJx`ldsrCXiuSjv%qd2TI847eFys}{WL z0eAekX&Tr;pIu%w9osY&a|o@hL;;o0daZM%)>xEjx@H~Wq~v<7xVtjoszZ0G1#myo zC3OJR)%gC>cr?Yu(YgUNK$QBT{=pvK$#TC}OJomjoqHY+gh$g&u!Bb+!-0Ai z>b&Zv2pPIFj>M{`GTE|ImmJ}|{I*4{{As3G7uR^DgSi_pKHJx{i>mjay0iOe6pUjx@ow+`M<@cDK$o=ly+B+N#v99;P@RyAb zy{o>M`+!L(q71RTYk_t-z7%TZUlUXWN zp2PS90n;{s)hboPim8cMo}K=Mpd&wnZQ9p*hjanRDi>Ye&UOz zoZNwYY)IL8yQ%zjAHNDcj*%$n57&|OF6st?J*Bz(Zo@j(UO7ot>?n1 z^s(~RS(X$ZXKiH;IK-s`sPdm6z7E~B(j!&j=;M|#kIWyK*0Uwt8*GoJf4{naMs?3k z8TI2nlaY}Oy|U2{$Ca_&%)~>Q!5cmf^~Q6KU!Q~LV<1^gN98+qY9REE+Y6)DQm}f1 zdAOmS@Y0Je`sBo&AwH`k?4hQ`V6$a+_NtEEGuOENoduWAx9y`OuZkqC?mUb-is9OE z+Y6-1qlhEzO9d!uevnMFQjj;|7h_yb&K8%Vu8MeJdH+D%4~ccshAFCexjTcE$iS~K zUAMFo_U`Vb{qafuNuTc>uip9Xo3I}@SFl-ompvSP95cu}zDgwxi3ZW^lr1GKM9g(e z=o7x{9v^7WP$(Of|1<-3Vj8#Xw^)}4DS*C?5JuVVVu$#!`xeA%DBV&#g+%s7Uq`X*Upcuq$jk&wppnb?WP>Z;(Yz8sb`_X z-nMAT`5h`$Q?55djQ-&R1Z+5i`(Dkan0~b2_+oT&Y9qEP$6t>QGOCez)a{-)Iem*w zs&!w#qu|N`xje5{FGKAcyc+B;1!uAj9W^QsJE*mASXq2(jEV% z^T=q451ZL&tnQK?R&je2(~%9=QT%t3x#j!VtaE#*J$oIOnAA>Q_#H>G8o?e{aq=@n zt$TRzTfVKeQ;{Vi39PW72#%$-)c52UVm>MZy-3V&DYb9$$bpc)r239DMCFS6H0M}c zZ8t<`qIkJKd*O;&N@UxMCpMtrz0kVlVvpro8pcdps^Z70C&dT)hmJ?jCsLgzWAeCM zXU5z&ZW7&mm88jCsFc&Xj7wl#H5L2e10%t!+*Rpt%1L)B?YglzfPH249#>?&MoEPS zh}}}|%(^}a-5n&-TUQ!l+(%>}g`*@~{Gg9DRekj?#{Y#i1$b;rg9XxCYCIW}R8sR% z>8qKKd%VIFp5!1wr|J6U29PXGw)Q1qmENgOt}KnzR^_Zw4wmatEkXlG_TKh+N4~wX zL_RsihS)B`NRjI@TRv$2B9QSHtV!oD}AF!m%7VMFDaHL zWC2Gu#20U$u3smk9#kaVa1%|H!&FelneZdu$%3<;(>8^+#8sIzA~VyuG?A~X{0+;x|Qw{9=f|bq`MoWRX~sq>F#dn?(Xj9 z(0uzC@B4iB-hT&0-0Zd1oMVnL=3HM2JTxQ2uM3ubq)dODEwagtKARfCN)XtrAr9lX z2+?v|7)Sw?xA_Yh#mxcvrFZhCfi;)|aeLr^Afd?9OZ}}I&z;B8hvxe+Od=jnktJ^4 zOmALp?H|Sz%eYEJ?8d>2GbFS#`}bXv$_L*p3e=k`_4J^ z>4i$jl?g|Da7^%#UY<_IirDN&*w#R=$vtIH>`3c0&euuGmr=4Y;Neu$%RNFUAvxF_Z33fFSh$LA(z6 z)e&XOsqz^~VERDx2{PA4pGm%U{JV5#hW2~_7F_U>S$C^m7&W!yU~P>aJi6x{K}jnt zI^XIRUWtsv8zGJ1sdk-bPgST3SJ#1LR+3!*t(Ye>o_6Vi29E4tBfoZ~N=914KXu{@ z+K2#Bl~m$;LBL3`d6F*?M=(`xxbu0R8K{b+XUTiE#R6z%EC=!f$J4|CGxGX>)QRts zZO(_5bD*X@MlNa(>9^QKU+WXo|JvRGYb5a8ChxTi?KI;UHHAo!i1OURy-~~rtU$|; z1zNR16~>X%*Ze;4{lmCnjaSQTz|F}aj3wU1n(rU8)>@vMUH48JPR2|bzzt>5EHYof z@B)y$?lPNO9-RG7L?|{U3xKf~o}~o2YNDoVj|q}XxC^0f6({b>%e@a0RIKV1BCt-V z@9qsM0c0n8FVqZ&qI{G%#rkyA-oQYy0D~zOl_ED$qwPrv<;`!HY~ygXQzAe^b0KJ8q{3}4WmhF$HZId!63rd;P>0}aY%i{-<>eF0fmgOcEhVZUTxTKY=mZh{)-e#KW1Aw&g z;&IAZCSVr@D#Z(W*3=@U=j)`Yg1M!J!egrzLH7T~DZf)-?!IHjH!F6~=9okfcb?<2 z$r`daNDvX6;)Fw5j-%f_rLZ{eYW9EKT1VZ0PD%DnhxvHF{N=HiUzQH#(tgW=+Qskk zRzN)6qXOj*S}rO1kN<8mr8P#YUQ>68eD<%WxumX5m?&+kJ}}U6iBeK278ujutj@^@ z^km*}dNeOspFa}vk3z6U_hj8zAUoa-su$nx(E@$Vw5!B9BX=sYyr3}qoxzMwvFKc& z>G$D~zr>z*CBQtOJ|d(38KoT>gQVY*z9hi@qXlL7PEqn%)@Eo6S?q#zIr}>R3G9di zi6Wm$?8i4xR&_V~uAGGX_?2gc4K{5C{ON{8SHsFG*h%+Gf=r;gR*9xuxQDG{0BQX3 z6#(HiTetO5gn6zqCt>`CNA4)c$}7MvYZ-U-K0^AudbLM)>ijIVW#sVTZizCUkdW1W z(sFs(g=>Cjie~SC`b4)()joB>rbYf8Wz)tzkDSCznf!+FLyB3lo@ugCPY}RJ;mU1T z{!a_NpA?N=)1FDw?YFo68L25GXU#9Md$A6E=cBYel#YhKJ+WtpW74FDXf9?=gV+_? zA8sM%##_5_m6Di_5T#RYtEX+|x9`0+@+HGtlk@DeHv;;*4E`f9`HfeA2sNg*hkKTIIyboBk4+fPQ*y#0EGLM zvcim1@;?m$-{soM%d3Hg%7-}0-)6?|Wf&5FC5TDrFy-b>_Rn#tsuGl+@jQ|_Js4K4 zK18M!jBVuJ$`Bn)y)BzqiJa)FFl}_5eFN-+th$_|hW#C5pSxgDizNm6Rd*ZkgbG04 zIYHjb%}phU-SNX$QdAfnA%$h0=n(r7MQ-rbofW1yesFPsk<}`EEe52Ls)tg1vwP z2Aie!>xciDJf!s=bBgZ_hCO-5t|3+?Mj)G=kLGe`R-Ss308m0NeKkCuQD_i z+F2JhpTIJ<1a?o{;=<%}&dbOca6h%g%7Q1g~_#O>b^Ut1(!J3Xe|))rKHKTORo}Kky9bN|n6qN5wwe>EWwnUe z_thwCo-rGh&~!N*e`4kDHwlMl!RDXKV``%RD&qfjq5bF6cbPwS77RtF z8OC>7oR#0$!0P+XaEdbE%8H{^wFX)nwOK6|i<;a5xask`F0smvyfm+~(%|AIm2X7r z9Tu^akp8#=1xPm#MUo%n0T03@&VHYQ%J3^g7VkBszf8Cw;v3XFBDMQ0{%PDiCRlmM zdT^WrD2dznZCW3XFer+g6C0m5`2TzlC7hw zB6?Q2UMlUgjQmnL>FRd$j3g7ZVQeB$>~NxbId^EYWh>H;jXrz2!9Kw^d1Wkl_lc2x zx%bPo?|h%4DW>j`%!)THwr2@>5Q5h9QL$QM{q-?_I{(gy9KfsOZ`;=|(%5>@i;9St zt?YMIXcV_xwQn*_;}ocgDO*$JmgYA3w0rltMNE)HhDhZ);Zcf|JlQz|92qYX*h12o zBs1_|KIVUa68L~|W1-Cbwk{e*Tje^ByrJ=77u-0t>gi|L6GhF&R)&g8=7I&yBO_{M z@jCoKpe@PmbxBO+prc#y7(`Fm-z;EttGXn!aSMgYNZ4CGI85?KCN&Xc2ailRaY#%WtDZ_loCMDO_n%vZ84+| zy=y1`HIwOx+^tz6!bj|%F|2ojQ>rB*;Ph$k*PZXz-51dPGO%3-I6Q~((?IQ-bNhPf za--BI4-l~vPme9zzqz&FfrspXhwT6~{(_6Wmc>j?F}I^+XNc180(YpjO1-h<&U`NI zZr$f(|2oM=iZz58$rLGbNvn8V6w0Enn(jNV`qsb?Z~rA@R%zQ_u>JGAHUaj(KFa?Q zCxI{hBIs>TCne~YCr6aN0Ct>w*JIeItJU_#;Xk-MWFdoaEI(KnrCSduz<4ACiW1YD%46dz$l!t`o`Rg4IGj_ zDEH?hdOU-R8lt;{6Xb@{vlN^Z_gG-7S~6bCJt5S>T?U;EO`TKua!YH_z*Mh07zO%H$DFoR+XAZn+?M#8B)_+|8PL8tsoSy_v={Cl8-tb zfOcoo0E|{q7;*dHoCxmZJf^E`axZ1~A3{CocW( zPi?GNe@0hu?BW9*zN{r2@@$2#ch!JSRUqulUPr|~?hd9SIDLCiOU--r@0vEpx64CC z-txF5y$2qzF?WaAiROAwJvhQ62fcwB-~2u+d7Q+%>n)7gIb$O1BqrvT_(3WJedAGVuAGa_*XV2HAIwkvz5c-E9srkqNo_K|6MXpHu;VB8_=P z(L$ZF^t>}zR34)pak@Z`eFBjEvGr{rFa~0(bVWurRjWMyaE^l)Ts9?gSbRFJ&-&)G zWaCpZ&Wp;MpUhb@QE`$(%O=+Utit8N(C(7CKD^|iNGPY-VjqcLv!4e9z1^Ntid$HD z#fFI17!(rT9E&(bVq6&ve;6`GpxdT*#Q^_b{@1@-_`j!yrNno^;e+nOReC<8n$M8!pDFJNDmz)Q$CtSp9bx##GjIlHwYDSm4KMt6qM!l@xhC;Bi z=PeN436mC(rYo}ot(-r8=N4n5OX0*0IuB}n8J8z8T{IwY%lBk%rt4^d*P@}V)pNq_ z2pPEm^1Df#tMfF8HD&uQWj5x-^t9+B0y}i)Vj1qYv>=qNAj)MjP||$keW}FbbIT=^ z;CSpYdw`85K2&%lh$*g=Thjo}K}WT7&QWKMKw*@u-3j53Q(mDu~H zH`r2mcx1hIhh4OsJsB9e##^-`l31NJy4zw2roFR!YE>2i50%c-HzaG{yLq+J4r-4x z1(S4G(rX-+$T1m{S292_+_^|V398V2FsP{D3yGQj=WYKVAN@qAZ4bI+k{fUu5%Dds zbf9spx<%X=tZDWTwOYNg_9i^qJ3C+Rkx;x$6Tossnb+hc@aMBZJbXUv{_l z-b}|PSab`*D|M?ZuT!;F62&y)2u}#gA~R9-8nhgLGV-0l3cpDEeb@DA-Cj78;hIF= z6wUhrZKAhf*ntZ9ZGNvQ?M`RSo7^u{V2h?1Q?bqCO6wwg9=ma}3)#O|PL`;=3_9QG z*gB|XvKA+CH5JG46AtVMmQ6tBe}19a`XA-=@mpv24d?%{0V$w zY{i4>nvf&xGSz(SG^xOzQ8umB_vVh@d7tj`4$aYO0@KiY7i*ywuIH@-uz9}TA`WiI z{~tRBIJJNO)bA(V=}g>{E0*if8hwrny?>aSkG(4)oE#~apYIDFLT+bFpXX*AMjalp zqxmbj!fAGq`(DU>v55?~>b@s!Do6O?Mtp4P8*Y>Zeh81hJM}Xzv}0|9Af9V`4OYO2 zIPMY+WpJ?_>fc@b##g`yqWT?9$?9djq;s)Kk*#+uorc^s@=In?hp{l0wpTO0^QWN> zOg3|g(b#erJ9BqEd{qZmueG!l^e6h~ZhnYE;Du2uv@ndj)@`gb6THR^f}IrE&DLvK zJileP@w7YJM-HLQ3oVc&xxkaXIEWpTk0>)&KldDNya(SWw|Wv`hl}!2(!_0z#6U^!Pm9E} zNgMmp7huPqg~&dH^9lECTra`dyPvVT=pBrl_I;%u-x4tvJTnc<+q`+$Dunm?$tNmW zv7DmOU#6`j9oQ>UcRamxzt&(hyc^V_t&!yv(=bk2K#}~dX!+Azxa!8(glUbnb-uRT zS@;N(@g-@K+d=q90c$8rIyTpC{7Q}fcyhMu%}u@)af(cMCd@^KOD=Yve0?%6BmMmk zaDTkQF5-yc-=hr<(|;En9I@FTKV-c$sl?MLreN#j4E`Nm&}7B{<8)NPLjllcm*z3S>&;ttsK z*AKH%lxZ+5k7gZSw6~LuT1=t&MZ}jb>n&aexjtNSnnXXNudv?Cf1wxMB}hWB$cXt= zpkSCwAA4V**vukgcIeXx>MM|f@~Da~Q!x`Lmbhh6YjrK~)KOBin5}WCf~b~W0Ff%w zP;%@!R@hIZ+@qE|j0h&Ter)cWT{~(e)jcM(vlp)jpm#Sr@kCW_qgLmnf3riE;4~L= zX!q*AyKCkgh!p9l%;{RJGTsArh7$0V)M`pqd@AM8B2y-%VI@AVwUuSy6aiLlWUH2fWMoAP`(luSI{8| zS9C}t0mAkWOymcmLN^X7V}P&zR-t2)`tAS90dF+@QhbPhuF5OQ7mwrMUI^Q8aPPf( zC^BW#5$&vLmZS0^{&?#q6LHXdbrsT>WEt_8xzA)Ut~IFJg57!N5_<xIS$57$VzI z>txx>oi;b|Ghv>-fsBa>e!w(RxTffP7Ez7fmU~1h3o2A&t>_Aa)uFn-*RQ{W(2lN!{@UBIh_uWT_%d(9wXG=h7b;mZptDCmdFQN}1m5mS8M=EqNJDzgkTN8B2C zn1$2?y+q#wS==q9P*M^x5Y5BNM^Z7+GeEGGANOA+ zG3)&_(p1g|!e+V61p+v->uYAdQVd{gmalPqIrv@g(IpOkl#ug`(cWmle?90z%stkI z`?7O6pog4?(w`*@4iw=a&dA_R;!xDFiFlOqBnPVC}N6}^V6@LrV!P(T{)!3bj#_v3c0+JX`A!O2ZxIX9mou? z{N74puTSR3)R^|i75bVC-FQnP*Dcw#>M=TGPn$V40E zNkq6Rq_1hlJID7GfHER%$yc3V(!}~jwB+_RayS<3=^2C#| znB3W?9l=G9Q~2V%#ys+0mkb7g`POh+6}(9bfSb3GYyUtm^Sb=+l@5raTM=(dNw* zz#(i6L>^hm8gCuch!dG+TBnoU%t zYJ1K7etw0Vw&t08yNByoHKG=oG3C*GUIW%|0aR!)ZE>{m%nsX1n(U@KN(nq}4Z=9@ zx~gE)qMLo|aK*7)r;lGs4U3|EwJceBocr?UW%&IhTXn34zzlZbuSDqM11>Qc4>fdH zg!x?~fRm3v7&>rj{H~Ans3J=B$J{kL&G$cH9Vj5dqe_625H;+!`>s$=&9Q&aYsWxIPDT;aEn!q3&ORe07TFkmg9_ukbX_;T_&>wKkoSH_RE(y z6}A??les_>0u?f9M&sR5BPSLf@)O3Sw z^?d={Lejy{gbM)yaf(9%2Te}O1aIT@XnVb`JU6m5gw@KB;`h}VIxjdPB`TmtR@4F$ z_eamtJ*x3lP4ZlY$nM4t36-#JbSh6*!ih(Q27zD{I*qZbF#L_kGFHR@e8K0&*__l2Zs%{m{R zx@HUSz`JYW@622~FfYZs|AVvna(uV1DDp^TYOUHg6<(2XE_*#OgSxB#COF`we{J>c zIK`az=p-%34K=Z+h6oseS5q?o`n={Q1YQX{aA!J-Ds6v zqss}r%oak7Q+OEfjh>QN@<}^bEx7n#kvnKRWqfx6ijbpuUnP|ZIe}C3Ij)`19LNm$ z+KOb=g|t-~$kr=fzLO;kYPDuG67h8Vy-I6$zzngMQv@yoWBzXCE)!w4BTGIvxGPS? zzO*woS*ktXaQV_LBMvaBb#bE8_@c{orHJ;GN&}56yZfxyiy#CAsgn7ltrGIMKvwsB zr?xJ@C&Nc+7933)bFQxwmr% zQ07EF5tlIJ8_eUU<^C=?#r+gP+iTO|DJYh8X7AEf*0NEeH(mgd;`U`8$%y~y_W)pW=G{RZ$7RQjr;4uw0(wW=W} zTvhm&jx{18rOK~xyytW{{Rlo8guqzXA$jKOKhN^7h4>i&G_aic;^tCgif2p1vF8?v z$I!5kH*5ywN_y{39@{0x1@K3-1<|q_Z84fs(mQeyC8zvkq*RBH^5ijCC)8?mgPZ8_ zj;7g?=$z_O4xSJZr>{aLkAmenWa+tS(LZ6Vcti{~SL>B_u(1;hsK;;98AIp z;Jo#F6VyEU!O%|Y%Z*&;>EwTmHCzBap&wgYC$Md6cOl4UOBasm9sksKPKinRP3agT z;tsiga(1Rjlu zF@tgJkt-P}k>t!9sN}2Ck;3w)3g9mQlIW`+ml#mORx;bnX{bj^D;ayV z7C(A%yFW3Z@N!qReezq%Oqq9w*lMJu+F{fUL66z)ePqiA9e4O-E8tnD@?=|*Hk)b? z&XspxyFRg0uWoJzzPtB!+2lBs{Pk9;l~$+2i8!2WS~_!Q^0eejXEj24?0|#w*%Jnn zEPBl`%c%}=HjB4d0nY1qtEr6Yw&m@sO(ThHNSe4;(<>`WH*YGsq$m&vO%SChDj!lJ zf8}vP966ZOfNK@h1%dE>sCJkdEV49ibE^;oZ!AfRwQ!* z$goe(J(fMOheE*9k#>Qhl7X%}aq=H@@H>0~#|qe9K98??F1W*UTXs$dpLv8LY^OzL$fX&+1 z{<-T>mlW95kw-DY#Lh3n3*O(OMKdRc}6j8|x z&kt=&tgEx1h~lj{SObW;>MB`&Y6AiqV#R!=o2DOEJV#0FBE_ZsJ?~k6hao>qnz920 z_8XWLmzztNrlfS+9PB?~$PF=Xd!tcqEEiRRDVYJ-#wvBg+dE zQ3DV(bKW=m6(Jr@7%DVLh^q*-5Vba}9%(&XJyc{g>ZMWIzTG$8@6{f&cr}`fXCL5_sasJ`S%h7e2aT*$z32 zM~;iCDAC5|Q#)EjZ@S%xcozUOmH^2>&S@Q^3C(#zBu)?n#`AdKAMx$5mB57e{$ zNY>Sa{<)Vh=bI6Bi<8U&@*F;?xc5OvXo><>zu8NuZ5hHSiYp5dZjgW6f!((Mm5gtu zcB38K4uiIE{(8`tCCZqiGnL4LbzpIrJ^C6E0}SRbZ!#W7%Z;-V8qNSb4P-WPKS)L> z2K|$%_Hr(_l+3~m#l{{BIyiY!21p2qC!m2+H<`=n6{r2C2tYlpvk>)A`1)=?ndPl$ z*yQQSzWb36XSnTs?P#2aNtG@q06Q_ce>(L;nqqaH9+8+wWwp;?bqzxx{{@RXgwCFC z(RaGuBt<24#AuWEiNV@62(uw$LbdvO19T6V z2@xLynuW7>$VbltpvGF`J-g|Wec(vdkx9N2QBvoxPI&ji5?Nau?3@g@}U;*_% zA=gyof(x_vw!z1_detb53t0kQcz|McHY4`n?!lC^TrtgC94M8{>7%ias&X5c78>L? z?T~x#1&Fe)RNkTAN~P$3fTY5O7nWhB5xj4alarHe?@CvUNU~WTf|8>S1H68vQc^cW z!d6}wkj{zA&F4AZ){fk{S8PScr#T#?qVQnm85kB>{;1j8*$Kt}_?}Zx7>^nf7;s^Z z5`1ieLv>Yqn9BLnlupXJ=+2T|4PlR}AZO39z*ctyM66L}7XtaL^8%@Rm+U?MYD|Yf zXCn5EkvGors}11%ObyEZ)Lx1SDTIyryJEa( zIN(+O{0UH|C4Vxa)PDGP)cgIz+In!9G?D6_??@T=G(vno_t*<(+KU19_1<;)>kS*G zpp#XA!_pt^&3An|#{$Z}R|6(dK`}8X0HM=$D>*aTG{%13A%t#QI9K)VnBOx3cEvNO z?=@`u(h%#kI~Y)Jat@SlgN~TKOP$)vMgkZsQ@zv1fH#*H$`B#X3n;Op9v!ef*o(nH zFDvC7;2PEL20mz}`3!6M<|(OGN^oKh#%uDWc2YV7mT9Dpvlm0 zb-R`d9<^R-j;?KalDAg&BzYJ~YwbG;$+7^$pb{vtzFgWk`bcEST(MmXwxlteo1gH} za4>L&8_!R%(T&;8f+_fMuP@JrKNGKj_D?f7W4hb{x)fY)o5~kXQYA1NyuAsDPFvry zw5-07TE_d#P%QS9zma!G<~&4d9d5Kq4e=`Gwni~QOM?83*iU}$uQ$x~UjN!n(AaXg zx_xqq=SSXokWUbF6boV4P8td0(*a|Z#B>Eep1ous746-@{{jV||F+R^{v*=-i^=`0 z07Hk3Va>A=d=c&K*GKpUkEPxxSYgh+uMK}81Pcx4pU7k$oTQqQFA!A#LDU}(WF=Ox zG@|V9rteBsY_s-P)@c zuR}uK*x2wxs5FZHGg*qMROi-(n}czu>D#d2gT|B5mxsKrblqoSGEcOfEr35MH%gsmH`)OEA0y`D{eTj;MC;_}xEknOcIEo~KDeOH6R;(lhZf~%|K48{_l{h>?vmOeS4s&aT5 zlumZZ^NryC0zvDNdUF+Bz!2#=s|FV17Lh^~s|`!{VT@?Vg0^>~%lpQl2$LPi(H#vl z7awP-7RZy3iEE;Ay)niUe`7mNx7=-PrMvZwph?)sM1Nz;b&v`9_on90++r%X&8}UH z{E=TN59fgrwf!?+3i&0LAK8h}mVsz8fC&kgpN_Yw%M;%Op&)2xFf^OuYw=a^`infT z#gy4Un%v&}K!+MFQ4e@iYCKXO^FS7J0|DqH0(h={&IpFvElfZ1(|*c!9sOm|fz^If z<=b(HYTTwy^&lgJWs4y3xO6H>iT`Ekkcq`iNK7>2R-)wQ!JKf=$(wjjhEW|w2Bg(i(+6vdoD z-w#=#plS~NMVR-D>;jLjHA@(Hw-tej{ z?F&qBoor7YL^6G+J8KljtVG6Ten~s6F8m?t{mA>{-Y@jD_QoSLoo1Ys_q``cT|2`v zT#Y#ea=BOxI?ZJFC5i0vDu>>!LCATb=}IMp(vV?UW181AQc)UTTVo^8ga-%pA@J(kas@`cMtid`Me-bUZP~&4KEqetikT2 z9R7wikvLsye6UY~_6ae*w5M+Ro(KV__jTbw`JXB@unl8Hk;B#SM<;Gc!(g7enP2Ay zhcDzAwH_NF90-s=!@%^LPh?9*12b4V2L`zL;@7m!sM72C@%L-5DI;#g=PP-}dv@BFOIn=Ye#u!xO_M))z7UFV-&Y_@cjA~`;{*XXsA z`D<&(2(^LXuk>=F`9>5Xl-w%UlW zfg=0)6D(6YtcWrv1A4O*wKeU&YEp*V`yprRN(b*<2YLxR6dtDkaJAy-kk}ZQ-}KrD zArr2iy&hIha$ZnL*<>)a1a;luBgB+mIdn==`JV{smp?@uKbpwr`pwn9pvy;SPc9%G z%tvU;Tzyu~`2@m11?c}bU}E>xkYs!0|BOfA5IzYVu`K|=NUZ4P)X$nA$G+%_`VhfF zdr1qie=hGIy%vZa_xTCaFsXgnqz|&%*_F3MKPI_61aV6G_`$n|s^ot(2Y96!738Dd zP#Kcd&D$)wc7rE|`HG(QT>V#YDq>b03C?k&=@9F*^D&gMELhz~5&?w>!p^(LhTvqWESjm-*Td z?pH7tSBDI-j_TN`edh4o1u`{x$WF-P{q&l&y+9b+Y?(gM!{eiTiI&^ua0(2WTqy`NaSBmfK3)E4CLzx))D?S5G^9QZ zq**wtsq^@3jnD9Pwpj28QQlCU?wWE;rB28(eMrrG)>sWkoYu3x^SkZ5W5r7@*GS{np zCWErDbB)85GX%&=n>1*Gg60WSnrD}lceu@59iREO(|q2}26Hg~-Bc7Uu=fcAZvUcqHGyB%g=T;xz`=(hR z*lPf&ufIW4x)Dh3cCcLsPph?SVOYfa`{Vz`4gDj&I$tTx0n&q^V|pFO#!It_2PJq~&Q+rDkzF6GP1qaG!AtSAbg2G?b$wEo!M5b7-D*ehWrZ3QKV8-BKu!{*dB7x0> zNrSEAbs8daqw>S~yN3oN{8)*%%S~4Snie>>pNGbL6II*oD-0G>CeRDTs*cYBnpPRBv|F4Nxi*KtAn#3Nm-8;? zDoQF*>%ty+Jb$8ZyzX*c{HXqJV=@)_zx#$0(vOU>>`_QF1hq)MK2xW>`ZovR3n?U^ z?+LMVTOGYF$ooF@Qd9KE5N5JlS~qYHQAOlF%8fsLdv}4B zk0#HpF1LGmC4Qm0N+SEKe*Na?uf;EKj>g&+;Lt93TjE=5C7rfo3JB&H3o7*_zX6EA zIS$i7213J&pl5Rc?gp`(R@|i3Zu(fKGVQ?!22Z`9dPXc&7qlpYKl39g9Y&va?cwO5qXyb`k&4SgxMI7c>BFcBlpfGI@=s;msji4;k zp6%Z6^o2*K@uf>bCnP={dk*mcP>0Kjyd|z~pqjKHkofdn`Hjx|S5NCkA)=rsMOfd<3(||#&~en? z&zQ~dT#u+vS}s8WbplW`_(CidyA+`=0B#cg%VXRv7`Mk@SrNb=fRxvD2fQord+AeL zJq$2L^Ya$d%!nA0XEIb23n}LZ@8%?5mQ!*770%Neh_4`gC`EAwnfCmkU)}r>tf12e zOQ(hW;Prn0;*-D}XsI}E!oZ^E8ODSzv_W-?(JyMKXe3Drd-tk4Atz$ug5-5NHepc@ zWgNkLfpfUUE?0_5>c(^m+<6XTrjzv*{RiY@^Fm;C1vg%&Z-4J5QjI=xbliKhk_N#F zgzSYRwa05&v*YM;tAWfu-&N1nw>4Jw{J&3{pAmifIX}wOg%iLS!qBa?$}%5R0E!0! zg7ycs*pjlm#TQN%YD(+zNe@I}&&NN%6vesLxnh(hq?heNR9?kjZRkNkTWUHbAlQME_*bzp!{?53)Gk82@T{!z>#A%TZ0O&tG%@s^u*I-P#D1;K%^w5fi=4fCBx>1jCN`$n`07Dx+ zEto?S-?^aH!P}c~16(`@stHhF9QKAEB1S!$en+Fj2*v)!_A0E{?}OH22ben`MS%q9 zrF1ur_G3ID&+hh3?Au7X!_+_`jAmc>oKW9HGe#ZtQOi2WZ)V3;%dPL^3i2L%G%gX# zPQ*7Ku@LmOsSw9KG&=2GY6B-4dh#b|n?E9jVuaE<(SAMp>YRe9#T$Z3yEzo8B$S}z zQ%~i+Q8!?`e67dpa|^4CuSQ!ICb9Ia$xA6j5+{KS@PyZ`OwU(5p6j}kR&(0k-M$)= zg2hjrl=@qDL*wS-pCHU;iu^jKL#=#y+navY?8H`(fQ=HjX;nlspG&ACmX{Rz&)j5w z2Zc5ue;p;9kQ5H^QA??TVm8qO z!Z>}C2)E4yxrDx`uH%#=Is!^hT!4KJ>?+^}5%*8=)5>G=a=#ZFqB&up(XQ5~^(JJ8 z@)K;YNSqIw;}^|~G8vhEgn~pbLM_j=tmDHvsPUgY$-21Dn6e-wCgE!P0`z?G!i^T( zgTSU&z!i(Rm&mBwDmoGMc-lRKiri8XmVfbWz;=GP6{U^d$zt$36Q;3b{AWOt!3(43 z2CW|yV6CnZyQ%3d<)rj}?Ms5FR%`7b1pl6Z?zQOp#Q)&o^Q9AR;7bX<#OoIleF}=k#nf2A^%Y>09O(Qa1 zJ)D)ELeT9!L0z$d4M2a}YVi>J6H*X8%dG6kz?+X6tS7}@hg~%N3p4!v==lNy zk%31eXh4>&x4Oc^I|x8&LJ$XCHXrS9>OiaL{oWHou)`u4e)%+8{9?H((xeP^h*pd` z&4R7^7^EEV@cL8|`)sv0GYTQ+OXgPiY%JPX5^1jMcpOY;s|8Ge$P|G? zms_ZoUDnnqu2I2vZ4E_S{3+^}d#$!||4X?9JO@@gny-6L`}IF124S};n?46^qcFBX zV1CMKt2C9hySt=z_3+4YwX;l5qqjpeJ3;d8=TF2`NI24*G|w2RB*c!Z#($@IjxoA7 zDVJZQJTZ^@;^}^xWjw(9mU=Wx`X<*M1tV@|nRmL7SB_$k1jeAn`7z5`atnzr#lUOX zs6wEWodVY$*f*XGP@+f%nbgI)jv zB$ETSFnO;>z#zcE<&@`iL^BjCW#77lS+I$bnp?EjA*Ba+1g+6HX%j4m91MXFOqT|H)KR_@hJf-c) zm3MN}J1CQIbUX!|PQZ8~P%I^y?fPoA=HA8)T>-!~8GyrVjV5!c!Gi=)5`Hog)Cy`{ zzA130Ph~?$^HzA1s#5Ed2zIAS4V@U-9!Dcf9+KexGm-~sK@P22CBzGTaCM&9I=Y%# zH}Jsk!PX|K^@y88uTc%rNjdm6nl70O!O2poyUEzn3Zgpa%5v?gv&U?-hFt=SHt;q^ zEZysb#Q4A2ab!)giDf+Z0+<&gQ_2GOOF-d+L|q~7`jW)Y>6tEdoPB0olJN`qdcyl9 zvD@e!%}=@Bocd`o$fkPk&e*Jms3ltdRBp=*IaXn$3Sd}Zjj2nj;hPa^ysJcy2HssYoj z-%YAk6)}-Uy7N_7o$Z`EnckTHEtA6-4JP$xI6!acN|#ss>L~#DJ72t}7!J-`Bvz+Q zV8_{(!4D>f$t>-s@>fChdBWnC)`dq`@MsM!n*tDrT&>BVAWwOG2LF(VfSz2S+fTl4 zgSg15I5=R1f-i0P9Wn#S9C60UJ=Ubg`+`XCPRe!Akq`NsH|riMN=9i+MY>gj4Dx+m zgOhG(g5AA|g_1Pt^rZly!n~}tJIimneEM@p^)!HHj7zl}CB;2~7?oIux?{uSOOMF{7?ZY6PSscZytQdsFgmT?kz~Rh&q>znKh13& z93)G`WK?z(5+2i=$GV*3ZxT>U9SflYM)Clm^Y#q|DS`zzw`Kr^n5;UJrTQY2Md$qs zn2yDsjecpp$*Ns__uAUki&xXt0scr8iJC%HGLIn}AS;i}$;?dGDFkEN-5YAD#{tz@I$um=;4kd-pOgiommIea+j;um;@)>B# z=$$@fw?=(|+3&hnW5{7PwU}WhpZGjq4K<vuO3KKC})XLE`|D?x^8YM{Ua#=@azRUmKo># zXDi*x04a|gdN1TW2nGdAN%XeP z<3hPp>p-T{YPKV2yw+eu(rh$CC{VfSi29y+{7PG3=u7C#QwvcL;^s>iI1q?7ubE%h z45m6^8XYGqWxkROsQ*)cJN6 zrZf`Yn+Jzs(fW+?+Lq5EQbjPPH;$nrWLu(6DfC5?HhY!+O$ug^1OYNCn>pjc@%_>ocA`cEh^ zGFd+^XnMEO&F|l07?Tc-@V|g*dH4_0^;hf&X-Z$Ao1 z=PQxR%G__O@f}cZ4#jC7Ulo_~w>&i9rSf=?@#6^Q02a?a-*0A_2=nKxt%iq}FctF& z@D4;vnEBEEC!s+8f-o7NO@+_WkKz-KM$?qSPP$#PLpC+{uQxebjq?PG z`jNI$5RU1})q#O}y-$}js2vQn8TF+vjyO>E zreTC)YXcMT`rZM}L%NzUjonTKhQomwXr`u;91vGAZh%N>s@b-w07=Ga@@COL`TOtf z`x){NEO}!yZ6M#!@!5**=SuxYOz}NPiASrv)Y5>vBkMK;f6+B0#XA$GAC?GIPShzO zzoaKLS|Gw3bae~0nX2dIk*fO?4=~XoVLJ0sd7P+ z)pGB`uG8OVy}Lh|Fj!}2xttXlOE{pYhY;wJB2qlZ)&XqskUj3Z9{!{Ph4@g?HPsx=t#Y7#}~9>@qN9RLgeGyRnzzff~y8Fzu#jHn4)#@pG2ny6$1 zC3*7GW|Wh1+AJ?v`R}{p`Ywi=T~WpeVPrg5c5jE}01yHsSgE(5{3{cW6l?(NCy~I z94&K#>;?mhJ@wi{90=OE|Ff;824A_cX%ksrO%!K)$-UF*sWCs4=eAV4;&wLZYYNL~q6| z!G{N=dd6GUm*4QWyQgF1M>mt6SAOM*>-bg$+W|L@R|L8cQfp#r00@ib$q-98i9tzn z#x&I`H{q8qH?r1SfUV97w`o|n1rAdOduW0-wkYV^WT)`2@YFw2VND6h3LUe_;{uAp zTan?2Z_|JgQ|WyV%Jx1#Vwp!DHx8h-azT3k)2+g&<5+u_3Nz*Vt zLeCdjGDfNLmK-7N=D3JVBftN!5)|1848ArH*GhPtZxF!X*dBHM8iLu@kim%UMfx8VB<2k&0z$c>&wpUUf6tan5{PQH>wPwL zN2WZ??43g|i2FB);P6QgRkya7FfJnYA|i}E|AYmAIk4oH27PJk9tK^O%czUR7e4kb zX^elN+>`N+q+>T3M#++1_rao-PFGCt7&ZMo794qD(50`h(q?9Ab6IWy7ut_XS&!dQ z)MxqL(^0w!1Smx1<<0BcSsJ|^&>muOwIOnY*GnAiE`m$=7|mk4J&^E_Ns;z;$+)3o z&+UM`n%L^kv;-)U^~1gZgV@GgCA^K}|(CZaI}c3I{&(2A?|2xTaeXGLM=KXu%)ko`< zZ%b92p3KGaKdY^P{48=}{`sP$-Qxl|$Tk5X-=8r|3OGV$9|e8Tm;bKPThqmu&my-;iOz@B~TPQ`DqbJpU@toBl>P z$v(r}dyC1PpPTZJ)TrzoWWNzT!IgS%$Lgn%m&g=IZG3xgXGA{u9Ypz+onsB$ctlEt z-ekq}`!`trWzwD??oxChu?rn;pSG*f_ym<6t=_j^w!6F=>Veb#5L)i^PV(b)yN**WY;Tcciehs@ zYpi_=8Qp_D{wDYEBu&3IKtjMITJpXU3GTv_O%zXz4f6`?X>66lrsn-|48Knp&_Q)F<;ms9wgy| zdXV501u7i(*IY&+I0W0i|Fl1(DZ2Jh)Uam&G&4oClVSN2HuKo5&Po@{=|*NA^|f;T@B1IkER<8MNwRhc*~8A_U2BS?D4 zY7vRNcML7XLvum1C{{*6f+;ZcW4{XXd$shbddeP2pnN6uLNXCIgLW^Da`Zg^loE62H0`fP zCi}l^*;fL35Q%e?s7eupOGd7w|nFDQK?1}+tfIi@FJ6Y|* zP}~K!Jg8bt??g$MZj#?RiUXF_wOsv?tt}(mmMa|M@0y+WP6xu!{DScHAJW-a3an&N ztv|*qzF#3dz<4{tj(ceGV&k^nap$~Px1bxQow-$6I1v8q2Sc5!ci3*Yyzyp#2Lud( zjHVTG$ClSxH`h-O;m4tI#kTc=HRXH?2LVquTUVr6N=pb!aiCCt?2BN4*6(Mf8n4~| zehmnQLM7}g?DxRqktSlNzlc0=hl+;a03Bp`Vp!(C^D5{G%#C3eAjLl4Bvt>W%^J;g$jb`tUi|+sB7xsqI>$OkhCfYtM zORMPxNN)RNsLxQDG?+hI@%W;ZA;iiD{R_0xAQgB3)Tl1P*p-smkHO_Z8n!n=xP5Z> z2RXr<&$a^Um;Msxp<&px5rI(r>)+Y2{6Yc(`RRZFA>>>2KK$MLImTZ@H%1_6cGV~z z4$52$d5eWSx!&B;QDk^BtX31z_4PY}=Q2>t=dgObnt(J$79)?mN4|4KW%5}sdb3c5 zXKl@wlFAROyk|rPsAlHe=0)24xHk89qb-+;nve1<#H+dK?xYJQb|`s6>L>$m@OmI`rdNZI)iZ^J;8$+t{Atk9WNs?Xm-|oiL zLibZPPk#NG`VP42z5Fy@v#w`V7Lyb`_YTy{Awy?F7=a_Fj5VlM*YtAi7KZ0ot3;u&9k6>}%r~0BhTshnucmZ3 zBDh*}JjS~xDz?h8sSn9>FW0yaxfz{FAC5Nd?WK7M5CFheOdqidmD`96Y?u&NcqUMX z_3sH*O7hzHshp>4^(D6T-1+^<2IGqZ(zfUHegMqita9@7>bR0tRYdON(Ol5;{;LY3 z0&+l)(|jXA4~%5hFBV+ zBx&a1*oZhhzoOcV?A<%A|09nAI5Ib6ek>)fdXIppy>~0F$VrFK5ly)nO}QtL-i_fu zryqtk+eY$2raRtxi$T60!brr)s`pW~d9f~U5(uEyxp190i?YF-)oeuTvB&AN$6>9l z>GD_x0$U+^>-m_Iy`_ysL+z5w#5e&zEPI0N=;QY}rc38H0y@R20!<^+aO2-f=l#5? zi*XklYHcFk`Zf$iVoShQx1y)UsBA(DHI|W!v~e0mk)fson_n5(6NfNVx~!9?VPpG0 z8kR>QIcO}eOc2{Cgyuv@`q~t!9A%h4&Nic4xjrzY*3hR-0yb;rILl&Fd=>18X{bNf zaii(uT|LZicg}%GKC4Avz>qi)`6|1r@|I6RnccNj`12XKn@Qc*7DxwOhSi#%I)8qh zWK(;qqM$rwpVdsR*yv^?q|@RNnjj~*JgIGQqU;A-Tatpm{Xn7~>Yj-=+O&Xj-f32Y zhWCmQj6a9OQ1zGP2Tml=oiHvwA6>xai&qp&wIJ&nQUR<8-dC841Sw*!g?zvy0U%v5 zqYW8bdsYI!RRXEL?}?!@y6`#S|35$ijWGW@0XBD7s!W0 zCwCOMwAHjcrb;<-eQzhY-GmI6guD#A#r=c(K!$4-LxJKvd56_5a$6_+a67`c$pzY_ z=@{+VK$VEOIjzk;lEvnbH5y4VBv#x7>PXSOd!v@Yan;Yf$7&wiSOSpw(_k*WqFSFb zK5fjbe6!Y=A&So=hJ^2MPGVA)FnvPu?l#?EezMNC`{pngaMz_dXXY_UH3J|{^$nn9 zW$n;-E-Bj);*hw$>TLI+Gu^5%6Qz+5MG|PIvG}YPWAFD7^MWr&Q^E%nixgWJMg;!u z!I2e7rA(%0C7UrX4C8fgM+!@9krJ6Ib5vnY!gB8JFPpfdLe4`?<%d80R{Z7kNq4>4 zIQe8e9?^Vz5zL%MN7m|o31iN?4?dm=QLQi)v((~12F#IrDT$=}_@mkuh{i$Z_w)(v zm55=4#gxjt{{lM$`ZU16ekG);%)sN~JU zEs=DBKUmTa6R-f={MD!Z!(jdk6{32<;<6r3LMrRlITj~6A9MAwnAgjLLrWP$alMWM z`~UtR1ZK&&4R^0ua8y5pQvjYa^tHer9X3{I+xhPMk2~X{buQ;fz{@?uShZc!)XGxFOxNK>O}LQP zV$tscg#EALZE4n%fpTRp;LnMf4( z+k+x&1~YL0iis4zVt!v!s-%nE=CfOV*0QPaPvL>uM3a2_JbeERNLs~V2u>s6B25Lil-}LhW)4P&>(qt^8N6; z<_mS##A?6Q@Gp+#o@R(rhOM!@CT(=wFSBZujc5B=pfa1~LUJG!=GA}5P~`+aYiuB; zN!}y7%vMutK_TR>>|LfZzHp^6Y83?f#()%$%ks=^QCpcR)Op~$&9l`HfG(t~#o+EP zmD$!wW_riWVBM}-bLpg7(+>NT4)q7H5e3?C4LGhiK3-rkYn}=XZbT74bP z%69$6>RQYEJ^tCwG)d}r<_MJSv6WOVd|;Q=3(J{uco+Aey|ElKVOc^Rh7K)Y#QtLk z_3>+DsI+l$;<&$UfAT#1_tM3V<<;EsCwcYBp8p;-=%c5N4q>|Z%v`nwun&f0_AX;a z{p(G&Vuc!IoE%+}pwpWfZNR4t*dC6y`riGXO7YS#^~414ju#*Tj&UDm!e-<1T0k_q zI>pjxx%&-R&H=bDZ3eNh?d!r#uX#4q2OVmYbCOm9CA&CS#kvG8x) z0-3K|7klnWH0p@XTwKdlhn%<@*FqIrISazLCasR6aS)kuPpr#HX~t^j6_e;OI7 zFMx<@77$S(;$EIMP`25J%h7$>x9VEI{8F@dxrH zlm&2EW_UQ)3H<+p_)j@~)`ZsNjU1`E9DHa-90=g(FtSw2&>#3mj!ZDI(N6XouKxe_ zaFNu2B@^9Kt3qdOU+R|GmE1^1v-=M_1Esg!os^SJdAU%-hL8Uq_>1t|tLtFvvAL*u z5aXj~TC<_91Giydr?sb`$4u#HylrFFFUW6QGjgbv+_z+1GPFY-q^p$nKn_QjWul zEt#}h2tMY*TLG4y)u4u&zrAm)`I4R^mYMT3uBh3BA{6RQO#(_LkvXNt>GK4jW)TB5 zE7o0;x5T#d& z|9by{@8bJG=th_h<~N+!O}ZiV06>%~Nz99*U+fT?n{ImTVi(cN7#sZK7CqH3c9&06 zH!$81c=_H7=0{Oi6Bs<>$?oGv90}i`d4`~Q3n%?r3nwT2(D}lW{etOv;14VkBc0kO zIroufH!efh5-hf!0f7!p)XPdq=XcT4hJ~=`(IR<}kB?Nh?@v<{o3L zV1mMp#&-7~9wL1sU=OmKaCBvyugQ0kHuX>vZ7E&3sw3JJe1yN#W% zH8)%tG`6Svb?E5MR}WJf>SNQnmV7b3E)}@0826o1kEb33h6(}>dWJ~>YCu51d5CiP zzx>dD_+|SmY&3qmK&InmtJX~t2nI^pIH&T_BVJu zL_q)kL!g|6gJ2q`N`s|w+5h$USrzMk!t$azHaBH_p84rP=d{BT*yH9AFNY&=W`faR zd7Ps+l@I^YsqK~wez)P_`pNAhskYH2HqZTM5XUjO=`$LFgvW9HOv z;kyPcvjigTVe4+I2h@XiCb+35*)=`q=6VDD&T5SgY;?mK8Mv9&;r#@nMd!;Gb{;+COdwEve^teU5LU$H6ivs+GlHQ+O5d7*D^d)^7jdf41Se{ z9^Co5#GSW}%N@m6VZn`nGb#)}MMp!NhmO(60MHKpXz!W9y6`VNVh=zV=VeKK&MRlx zeX~DZc1qzU;xQ@hjra@hV#`acS+Iv`&A_MDc(-O1Sn8EKpZbUm|48PPDku{UJFj8(akw>2&->hH=!<*>T_-@i> zHdmdm%mjXrM09Y=H5|_rJF4XXMjtxBnhxu3Ga>tckLgBtX2n1xZdbuG$*OUf8R zdqIyxwQ)_sK*-X-;L0w9uZ#Lh=Rc=HDuxA*EAxI)G!p>g+$;$Q*I!q#S!cixQvByS ze`B}J7G&ib-Zr6mS#Gq!|H*u8{K)_D@}4F2h^_+7r zIf?-~0mA8$M3Urp$Dy}#^@>fDz~adeAjh2s8n}E4+KHC^c7ebUqYs2G@}Z}W zkIfQwUfMVgB}R~*VFJ1%UPKv}(~55K(21B=Uc`~nzn|^t@JWLZlT%bF7j4%@wAfy} zOIL#~MPg1@^^w-vEROH#)>^w)S>0Ze4+QecyMQ`I@!eKJA%t0cbsY_YRHws}yRXsm z1D{zK8JROq(tO$@DO<(B{z5Ak0fHILryb>HNZuECQ}^zx`<>&0oCh;N9Q>^N_QC!g|l zp={CA%Y~*_6LiVdEjBhLq1W$zq`73<@w;xr4eLJ1*bdF*J{lqujTeMu+tb+{<8bk2 zTlOWe@Vg%;sJ{FzIKlA|>RFbr=Q-1If8~!)W^)x&lHre>9%SeZ=IKL1MC}}yS~zmK zg}FXmg9c~Fm(wi~Dlu6^pWjVbG@S!$bcZ8elG8cLAQ`Td38ANUbj+d9hVXmOO9T*M zp9{O5!ySrx_{93t_Qx_J@g}pS_pCIZUn4lCR;1QOzeZiO!P!H?w7NfL7WTa`rrm9ZwI_JBtPas?N%KQ~vLT{(Fj4!Je)=rO*NfoqZYdb+)!&f7V<7 zwkOEU8GQX?Qm)L+dM{#Y;ZT%6O|N6$t){)uEA=G4N2oMyuQR=3AzE_hg z;+?E^X_+z@H@Id4t&E4sZ}6Lcz3Gs2KiN1YjR;H#1$M^sLv!Rbvo>O0)PgZEpdJBd^HK<(?vj~4 z@cXOKLN_#{ytGaGQmH8Lko65tTz}o$qvPV0U{b7H9-V-*d*HOgiL-p{(-%D-Bf^v+ ztdH}ibYkAC>Ypx`-vLWCNMw_^&Gpb_Nq$DUUJ~&lzLwV=*XR>T-I=dvu`%lMlf2m* z%-+4aY%Q)kT?+oTd*Be-MwhT%ap5kx+%ci4Wja}^DRj0s4OhdfdUe+QJ#@-PLcIDL z2h8kVF!j$Ib@yc8bscA21hudlUnehYv_cY87`J3nb?8A)2TxIa=QnOgFM0wBj;abq zyv+jnKoBq8KS?BN5)mP$J*s8rnKviKNfI?hrA6|jOvYU>B!RX~l*?s|7-WpFCJ+Gm zR_~rr?2iRp(hGs+8<38$WTGaqVg9YePZ9Iy3rGSb1}0|k$@#3e!OtKFJnPyyrKE-(wO5U= z-rH>l@!2e{{#s^n$t~`l`!u_dNx@v8@5mqNL-H;P8>l{eT8!@MYWhv zmm?j9iCr1Ad|!y{7ost_;zh(cm#DHk##q=JM^MIYOSEQE&hXhucq0Lq6(uYALPmU3 zcaDpS)h|SEF-qI~cc|_SRj99p$xlN)_Zu7VxVGfeNW2M_@dL zlT_ye;|o+w4F9>nK49gdn!i+FHUPckC4RpvczVv>S=3LN!SKzO|0^@ZVobYl(cl&T z5~dtFyhUG#j}IQUEHVtWkwo2#Kr1H7G_IwrbG(HCm>)l^S4p3ZZ@}h{54D6Iiyr0- zZpZf#nI^0!f#!l$mLzP+a*gPeoJs+XL&Q{HhYp)6K9qL`JeX~qsv{fd?VGY_Zw}cDhl0d{7$uIDbvh`V(UWsGJg=BV_%l7uPNJBUD z7V#0YFoGW*RT%u^+!YwYZ!RB8gReak4Hlm#kbUtuEL$rL3w}XM#U%y(#*V4pG1x`s zxZxkw*F?dojzdLhe4-1Q@qRia81&wahY#J2shi13_{3yt$j=jA?8 z(U5Dx==63#jwPSe*pZvsJvb3X0Oanrg<<*9w4o@qH3@JK#12!jZM>2i{6&|CxVP9s z;+vC;ot4zbfAL6`E2zVkO=|HBOab*9`@kS~l6{+y521>}Ly+&tacV8-YuIkd?qdm z`IQ970yY{_WgBtn3jc!G@(eiyJh;zHQ`)+!gatd`l}Oi%;( z4gi|0z%(9-6c@8;d@R{j&!|q>{G_8*{yzDl^hhWbI57`z%;V;HYD>Y<@AqE#DQ`Vl zSXU6%26My@NI*sv!P>rBC4RCw&#?2q{Q2)ViD3F7g)uzUF^er>I+7j5jH9{5e~0ya z-JyND`M{lSLy&5|5hvJyiPvW8wU3}-c#1$OP;{g{#f2zr_BaeC?BnyTIZj+{QfYtS z+{aJ==RPJ)*7d)h(%%aKp8yhqr8ob5-Ohh9g{1+teLhg3+^&UK<6gHno9RWl8aQ3i zGzP-*@+D|Qr+HF+6{rs%@Aiy8SFLex^ln8WE%G37_&V*wl9j~BaH2j4Y^EM8;&Op zdu2EMV?_6DgQEoyRjWM(43{$f(EgNO5Pj+7DsUAlc+-M{3Lw2GQ z4Cd60b8&=G#!N6+uL-9Z5T?AxSHS(ZX_TS^?X(6K_@O^}x~ z+V*TZMu12lv%PDtJ<1zJ0uAV&;3))4rF~N^C0UpIKTZ-HHowC%V*?6F;IHoFkB+I0 zABdFQU^E$e44nXFH#1u1weRVhpw;4cLT~fD zF2KCC*8}C|o$`Z;oJc^`TGzjgus8CkdfUf2oy@5*&?-V1qFIYrt$F?#y7)vnp^c zDErxN3WG@jf>Oj{VEBu8ug!xIV#HjyqSxa=^>Xgb9&1qz2<+(zQZ&%xcP zUvd25?zDeeIU^$wosKUhlIsnzH^k32S6J~)g^>}nve45dpUR{kwqii%c;$2ONov$O z32J@v!A2h9qL(W0oTG5SpECodv|)_-Q!^w{L!*5dyPtlMVhjpz4UKxG82W!M@+WWn z)AP{;L7-3?^O`L*Ix3+G2igKCwpF=T<@cgjt1c67bNn3f?G3@^iyn8N#F%eMyj2P& zMgXx`35%T+n?Fx<5x;M{yCyFpJhYpPj^D4Y5x4qq?Os+{{qyQ@+7qRdZdj~wgH^40 zl;v&yg6kQ|{%siaAnA9R!@3(QH&@TXwVU|$&AuYLr_P*6^FUnon#D8kC@Ik^SYaRC zQLcwrVF=k+T+ra;AdKTiL>c=KTt2_F*9XQL@8D^;94t))3T{0L*#{#t_@{>lfulTXGvR4!No6mX zd08{@wokw4twnD6a{h>U@{0|~*#coanI%e~gP?XURc|59@iXT+Zu zs81At^V2~k=dYwp`GME>p>e(2CLamJ8kK|WHKIk^ zXr{*qQgnQz_VSZ+rE7UQvZ643r4ksP8YtOs$e{ezaNw1-#Tdsw@sR}r(J0Em;(IIo z4VVA^q%pkLsLS;Hh47f2UL${>vDFpSw4gpW;&Gg|yBs8AJyA;J09CIIh#d4HzppcV zuyZQX;m6%i;9HB3=o#rK@ug?CHnkZqRlx-WArs)MmEAz{R#231q43_m2l6~`X`EqI z+u-Fa`X_Qu7}>lYsO^D_NjlK>!WkZUJi>VLToL;tum3n-6++Q@9npZu{xL##^qm{3 z8^U7SYlPstjCBT_AbrDc%Wq2$a=A$@=MhX$Uz_N`MHYSSe^4EttNCP23gF@IC2|MSse*)y`c$kHIL6*_; zU%y6(p-dQ$rMt#hu0zBK`lTUY#=1!CL}oD2qs^c`h-esi_F#B@3lC1$KE!NFUuYj1 z_{tLbs*rc(s1JE-teT~vIx>N#3#=@JM)D)bV_wgI>P=0vx*nYpfEdsLRJ2k&^1A8t zI_wLu1-bth)v&wGqNmU5CTpgAwRE0JwU5}fcIzpI`|E~u>u_l`5vOP|i|EcihZ%9p zIcJP9EqHyYR8~owkDKk-XM_T{vHjoMW?pfH>7?S}mG#7*&r06!CC_i7<&V?+G(#uj z!%opTEVE5ulE!zMB(&)$0`@gM5araPNe=Wlq$@Jmu8qG+YWR#huqiuvTUlms&nv50 zhtzrF=sz3h9XuQlq7jA>Tf>iQIRNDuaesNSeXInfied(5E%;KPxWhS5>O>jue_?i2 zR9r>qT}KLwuX%=v$r(mIIlE9Q#;7)a5V z?J;M=2|GZZr!d6+e5OyT<0)i-1HO1%v~z|htPV&DhG@{Tn~$^m`TLvyA{X`GJXz;@ zIMgz$_UI?ZfYlCM>trqtJaPE=RvMXt^HDsHhGrrAHsEiM{0kqZ@3s#EUOQMd<{75{ zTsk*PObe1+_Qag$2?%xeT&#vU{&?+#^5ObEwd_#zep#!Y!?K8F+2K;QBD)PLuv>HB zyBoF8U{Jdx7tlNTMu8}Jza>7#{i%WnPSAc;Zhf+Ts0S)byZSSF{`g2h_sG*6> zUEv6Q*=h6^?_Vl{Z8%|mgY8EFsu1S)MPziF&o0eRHn&b>nMq6Wc&u0Kb?@nmr@-Q3 zMO-Co&mQ(BEXK_yuz@Q6*=-vGXgcwhyQ?45%DKumk6wfk&LOV`p1=8&uvt3SWwK}! z9Fd8pSnu`%hcSxn?eTO>{mX3gQvz}_UD;?eBiW;iqiq?InF`PZMhI*x#iJbwQZC(v-d?eT6PjkpgV4$et??aGs%K_+p zLc7F|e?3VFdraiVrQ<{{iDM{R8b~JkJ5Y zmjXm44PP%-`#5jXljZ&8hEx&$oM`mi>`_Vf}dS0Tod!Mt|xK!P$Sx$QVj|L*Dj85`tt<{vofW4~0YOiX0J91aG>AODXBy_A`J4{Ksd7~4ojs5q*Qd5qy{iElgI z8Ljfw<$x##t$B@?EZq;F?}(z-#LK*xTA!<#LeOe>xINSjMy<0Ph5~Fm_gnpk7>Lz$ zm%w!SBf*9op}&as%n4E4bh$^Pj#d#MU;}X%X|pWMnydFAfB2QLw(%#g34wdXP) z(q3gY98V7AG^<$5z^=>S|Hz-W!0uwmWVs=_ddAkW*B%+QnedB6wt}iun+2zL?it=M zOF~q{2^sJiR#4RK>g25F68;(gx6=G+JclHF?|YKJ?QM|PG8l_fct}7~Gp4t@p(`5G zJ4|e8vY2?f>Dq}p!UvX=<3rd*X9J-xSfvjksI??u?N+{-eJwsg?3*D21@{we2SBtx zhg^vX#(R%AtJD>ehVm;bFJ=wkFjOBP!s`8)(@nP+l8r2o-JJ6>$DfBEoO(XA(K!z3 zWIS@+smkr>&l~K!D@mvE+W#bC)^3FLb#dql`zXOfoAS~VR~tTjl`3!Gbxqqa??cWD z^-$$ixyL8mNX#Uorm5M{(~qS34X>=a+%GnpwupsA&(P3cmUr@L1c#qlZf4M@Z@}^%d3>%11^Tn&?N@kmQCI(ZnWVIeV!Q(xvt;x*oLC8Jr<=02c1 zN0s(&eq_|-lUBQ5x)bru%_zULya{Vw6m(jrQ?;7&->oIzvY&EE4&Fxn-IQAUZM3J6(@LK)9dIOVT6U))9uT;O2Fs%v7C1%7Q;OG+4>URTBVZ zR$?Tg7=T}eAIy}H#?=%r_ixKT?emiSZtx)=>@gV;Zc?mtey?1jNc6h4SQ;ZUtV{}) zR^)oI?R2COgMiGTjnNCkdCxo}&HeebCf@2I9;)#LgjH!~)412Y6SI7=e&uR*u#rv(fR&dX#iF zAuP-Up|2Oi6)%kl7o{Rx&p?218`}UMvh-M9U{v3~Xf5jnsGl96=6u;X8x)~lK|U5~ z+)U9q(rq{4mnlkoJhBX#Tf5WsctVTP*2G(a&s`&velaOF0`#7U zXLv#r*7sNaMg#%^J47t;JSm~gE0u2b_8CgoO2;?sA1SaAC0pqYSmQXI2&cz8-%#J` zuRYrzv6+U7I38}9PZM$tM;%vQUGJ2&XtzV7jXYDl_>Vv|B4cS-zp0vz$jmKIHrWu3 zfy7Ejfz|*5@Eee_F%GIiJt8tOjSl&K-?D%3U@IkLRt(*x0-*FumkTTt*7>DF?UpN# z)so+pGnr1ClK>ZefEcsMy4dw)4F7GNqDRtV>)XTI*O@k8fCc=2MR?G&tH3wUwR5Sd zsIW5OF50><@A>gcoka3}HW5=%8@px1WlFTrVCK;V)W_%J06=S;*avao#lU!o_|AqS6(wq~jnlV4 zwn3-PNrhDqk3bUwF97*~hyN~UFe*u5NGh)W+t0&; zLh)F<;^SY0;JkpN&+X`qWpZ+12sM`i!+3X)uPDe+pp8FXx;bBXNBwq^?Xs?l`J29j zAkx^1?Q8oCLE;A%R?L-$&zvvBUL?ylEJX5T8p>@)cjo*ZF48h`C&sjsA$_=DqKHzM zGcbX}N4Ne($fuiMEt}|@zO_b<1nQg_DS^7e=%xdv%*&EAzxwJ{=HnpUd&n#j*-PL*8rvYls zwgr;|dkqzVYZH!-$M$7hbpUmzZ(%sp3it_b9m5m&JHrrpe&6#{Dd5XGOx!=}@V@EU zorebqPnO|r&mFq2mV!%P2LkmCt>UxJmDs5fkNRXt+jC<2?IHr^O8mdT^d-p>^G9_U4lAM~GS!?wxn*uA!{um*tCQn2yB8&yqC;)_{x(t$lMmE>y`fD<(6|nA~ z2}s}BQ%o`rf4T7g(MfvYc|VnxUwfYIB1`6DMIw{TNj;)-29NU@vlw%Ar%?*;4Bt(} z(RPEYr)m{ww;1_VKXI7)5bZ)V3SaSo;b2#9j`w@NGQlrKPIN)d=;*NcRm{84O~R`K z@h>b^2phj$SIUnCLz;B$exoYah(wQ_|%HO7L&7=}QD3BwzE)G#IMhFF)2`?G^ahzL)+ z$8(|gZ^DJ}c`pSi@L#)mz5N`AP-liXk4{O186(=$bwixumdr*4>GW6B zdNNWhzrA2ViZtb)g64fD4Y_mRp;>e?kIm&~3kU)Yzeu@_q3C+GMxaBc%MV=F2_;_ zVjO`D1(Kc_RaEy3eQngU z!KVdDBYDpZ5X%}FHR0y}f|f$UgGU9=ow|Py@Ewhum7C5M!LVw#c0MLLs3dWjfq}I) zp{pirotLwbYH!$=2@JVD*s>W_*M^=8?oJcf6D3f_mie+cLTWANRoP)kg$VW^oMc4G z<(o&Ee~c{uYGF$lFAW}I+91N>mAG;{X^nsvvA|%x+&tf?C=LO*3~|PqK8*8sU!WAU zfY=AKZcBiyRlJ&%|L0cXUr;`-6d51xX&tn%FN{O!+hh z2?B_qG!)-yCsG>G6;J-x|F(Y)P65LhMR`(BKLT_e=in~y@07>!8L_$2(WICWyXjbx za@UkH&VZd3OV+lVxdDN>o@;y5iCg6M=EQ2vj`n5q!pDzVn7JSg%~qFtH0B?GfUx82 z5yZpmy#J##Z=@%jgLfz-`MAtX`(~IJP-|Vq`?Ja*de8V5){eG}Fs$`{gGFZ}@lqq9 z_ZCt}<}@CAjV-R~}SnYIMT z!+Zs%>hRQq^HjBo3tk>!2S4*mkhAoJ{P+ktcAUrUu}tOsC}QQ(@dhb=N-U#loTsSF zhHTSM8X-2f$7QZLr@bFL;f+xfB3zI4C)Za3stw}l81k^E-g2@i61L6fpRNoc(<783Q$jx*j49-g>k?KGGZD{z_v3W4xznUXZdQ>f~S{2L~!{_lHT|__!xYh zLc;$gLLx7_G~K$`p8(|nd-%I7&lO@yu7CZVfv|(4qxbJz-iRC2QT9H{EeT%VVUpx7Le zV$Yx)4RorQK&SfWCgmqRyVa&UCqv0IN|03%w};|spl1W`R1kmXOt{V2EJ~{wigpV0 z>(Y~^!OZddM<+cTEW;7F+D8D>keZ_9qii0XXJLDKK+V0&8I&sVl0Wrmo5b9Era}Ol z5{uUDB(=UCXNc%dBrrrLX<+f*_V6c{hjm8+Jm1 ziM+7&Q@Y(io9CkcY5~slH}!UcKLz^`8Ga1k&_3$uBxc%>lMGZ1KM$bu)>wfx=b)Uj znI%R~ZRtv9VNxtMP=DZTeBXdZ6!<+w2LTB!*g+d0BHvcoQpVUiLOC96DEaXj(=h#e zoG6|4L<97(H`COX#p~RRLKiH6H&RPLPV@!4U^dgs3VeFqPNPk*|1caOSQrcv6z&sb zAY%+F5>;P0Qu)Iipx?|-mCeE%%V@PZcXgJ_1>%-QkBZkFR9&aWs!@#zEN)q)I#?A_ zwTGDnR55WconCmd_4v(K(xJSLL}MAdT~E6Kra4aov=F@l)9M7Y})ZK*uc;^;#FhgmptS7teO;cF~ zzu&q)24|=wnm6}|$XaNX3MTO84WZ|bC-cQ)@3zEuFQ8?@op}|98@e&X#wabdj{Q9KD4{LGfr7q8o0ys zfiKDD%BG_!sljER8*;1(D!et)J_Omgi3n7hbbcLxH>}rcawOh&iCn{;Bh!8v^d#O) zC6l0EnU0s?uX7dvrXZ5ucIVhh9o$o51Xw@nmBf83HvH-zMNtPw0|EhXU6?CZ35Pi2 z^7xbM^VuG5D#2u>VIjDi{lm|HNai?5`8(qMQ$E8L_QkBYG(39+Z4i&YxcAHKT?$U6 z9@qpxr`Z*ocp1f|sYmO zMWrMqB^RZrNF$AOcZales&scZDBay5-Hn8VARWJn?!DhQ=X~FPT-Rc)XFhX|IpQAo z7{eu*?SurRP++`KR;26GKj{zl@a8$vM3$fcB9+hju`c}^3S7A!LCuMr!nkp2Sv{9G znq_!T7OIbz;sH&eBc(mpxlRI|U;9S}iM8YSjrr@kW~d@Ht|ZcZMi40v^69Uz=HFHC zEfcIGu|oA5nf2ay_!2SKbg3X3HB|T8oeDuA`)yig>5pKBj8ph-^^H9cwYF69k?2i=5}PiR zCyJH8Gq)5tDw$W2sKg^TRs#vV*TaiUp4LtW2f0Uw?Vhp)`fLP7qR~G1FNu$lOOY*- zk5JgkJ0A}RT^q?-#EfZJGt}Y1dDE}KrU(BPJw6oRUI&T7+obrTjkl9w z%=V9tw`BB($baE5lHdlugyLMp%P8Rc2?Y~{ztY8a34Z|WG(O-~&zD!OB_Xq3Z0yh$Eh)gah&ziLULpoRpO8Js;> zjEYFs3+%Y0D{#L)AqkMt6t^*Yp~2Vi>@CU8w#h@}la{QHH|JtwA|kDEPhF`UDFj;2 z40OwMJ{yvSK-ZRXOyKWPA=sS?N))!@7&VJU^!qt`4!38mK+^ zZi2BlgKIvk^}Z{olAvTfu%4~;F}~KP>_@POSt$#E3=9+RPS;cUZOfeDW$G!-ebOFr zd)E@@c|!oxFr>!ku=1(PDz__PAe1Gz(2qKS*+oly%uI`_xoXNGX}MVvDGD>`_-k(J59mP?9|TQi#anO7 z`q!l3n;|3Cr55GpgKLfUp-I}e%zhN;*6gvf<6%3b6UE`hg;m0y{R#!#sZW3Xx=<3j zkg@==B$#yDqb=K9@oAV2TBbVil$!8ZX+f8Jaj9TC5~ zyGLhQz}E@5FSa1o6x*eBo!Pbp^(?&m!Y=7fK@v+W#j%;h?@Dw19m$tzQnnHBQ->9N!0Ei_!AM7(o0z8NTw>n!Bi63#sv+LyR( zsIB^{gMU5!NSNCo;>}#haGVOYTREw=Q2-H^r6}OPBTYz4zZCP5nYpbaEfRTIvnCBS zo)(PatpB~;@;)$Tvihrn7>wlviOp%i$J$&a0nV`QX02X@}ie%=@K2>+8RX~&vU zaT=^twp?x*wTs*04(=|JZKlw-bzvG+l>)Ui3w38GAQZ`sRyd)FpAM%$spz#RCY=(? z<$fdEWN(vs;N$t$vZcXbw_JBo-`+U7oNwoO5BzyYPKz}a3blB7QnK75H-4D%+$9ps z7{dD-L=DH&V6^u6j(Jcm9SRqlQK<7EyQB;i?o|j-DUv)0?>)3SemI4M737+yh|tG9 zE@zi{dHmyr3_lSMfW@6CPaBNGulnxixdw?h>CHW$1tmpa;s&k=?Cy~Q;uP^~cnu@1v z*i&D%PBf+1%JemB?@u}OaY88yU#(=d?qIST_rj%qv+@M~O2k}NEwL?FJxsj33y&+{ zI?nz)OK`E<5?}GTSW(P_NkZRvQC#5p!0oNu8!Rbe9`iQyvga7)q}!9x$8xoz+m8y9 z;XqpPl^233$*(?zg@3zCe;qf5_%c94HF8;6RuqU_CYVVlT9aNrWY-I%yk#emBieU4x%rO|~&JyTV=H5G1)OT+;@&(j-_h0WMaI|2-j${YoqIjx7*SGRiP zOBYnbK@Au`07BHt_vz^oMJ1gwmQI&&p>y|;v_*oCgL|kY2ory; z&4G*p>@6OC4MFKBC|bl9XtHOU^nQZBR4z7Sh-pS<4?{sTu=tR64N#qcn*)jnlm^(G zbS2k`G=3(180oRXLCwzFVZ)s%>NkwL%$KE!R73sH@43?P%|kY?jf=ssoXJ~F+D_iA zFN)}1+`$A(a<^Fuor+YX1B1tdh_Sk67^ieEXd-b@m^65?7Z;o9bbjs4AbZ|OV4oU% zFiTbB3Wgtoo;W=GP$6^Vuc)HrFJLA^KbZ8{)GYXKqyZWNlepeSTi3yipu#na&&bi9uG(1*>(h{quSQbMMEA zFyAWX*qod1(omJg^Qm*fD9B&)ayzuXDzaY+Ct35?l`RdQ7p7(-R!X#A-EvEe8D>`j z?RMlJUY`?qxs%0Yyq!Svj}h?*qDk`!n!*WeOA*yk#r=3eM9WCZ3{X^R2Yj3!&zA9r zuj0r7zRLLW(mW|&Cao()u2-{w+luYS)oQ^|h+!x+4AFV(7qRt`vYvGB zL11yMfA1X9<#ab%$?LYkXSw8wHaVkUVLq$guBJ3vXX37+rjlk+y3$ahp6h4=V5wWo z*j_zn0<&)M$StiY|ph^Il3 zFUK_H8v?wu+fZ4)2}y)81aF?D@RgN-yDHn_RW{sOb5E!EH~4L0Z|oK7|A;!$-FLlRDo~WFv*2Bf8987<=u5JARv0__FKg7= ze9CDdUECOm;TnpQGVVe!0z5@M$<(1kY?LPPtuDjZ8q!By^*4u}M5GTj+?PkMcOR1Df2xy+(?fs_zq$_mWdcW_D{dfL^ zkY&eG^(>bez(8iKwHGfTpRqn(mrllh)_i#Qe2`GHb;yYF9bd<=BL=$|0_XwmAXZ5G zYZc>cFPqLkG_`Zs_S5UMF4}M9hQU(ios^_RXuo7$NkzbMiIr>*NSM{IRo$0v*0|I@ zc)fb!vcKY|uvNOeeo+XZfatDLdmE$s>H-#rf^A3(g^&YmV}OkR>*O7vqJ@M(kNN}p zGNdT;r}L9a$C!N~Z{7@O6(JFQ(&B4C1TZN{Rd^EK3+T^dn2yvtzgNcIfo=Thcr&yt z)W!E#X9AFREWA3b@F9~ExbezvjD`g=i!BJiISqPvxt(OcOGW%ajk)eP2YGLXK-2M} zOHe3&DsIVueXVTC-+nsTgoDRYOb6Ut)v9tOKu9YDmoPpZvwTELh+IRhmkTl3S957LLC62B?(raPYP zv;M6w$>=1wNMJ5?+f3}k6{^i_m!O-5I*37XFd_o*kbzT}j?xpo!h2dpL^MfeT5D05 zUeV4gw$K}aqE8GroGRQNOmJtqGnl|dmLnsRik+w*7jhYZPJpcCbvWm-C?_nWkU$h5 zVCJ;wkox=gpa7w7L!p0g;exVSY6i1$kbf)?0}bsF;7BVgi76YYVw6KrsjLV5n=Ue6 zK`(yeJ&gTIKpvBP^vU^VrUPYinU$q*u?Stu)z$7}Os3elevqq$tIY}qzCF8+vXmYT zA8k&(rzPvpjoxgRcvM4MNNMY^=6g!bk^VLuVEFm5M>BS{;}Tx2IBaneg^=j&Y<>Vl z$`0Xg-KNY+Jip9j3mH>K9uwZBJU{!<&C0nyO;tp)0_y14T@*citGUF}xUKr=PqxQm zy5|A7b4o50Wcee}EaAao-5K#4er&0?-m^yUgrkZ^KWzcj+NSt8t0q_peZ1f;QwZ$B z9e3PI`xmr)4IWppgwl2rfHJchS`J8|9;I|=2wd(GWei51TzfFwh@0o(TzM)bS(A9Q zJ4ucDn9V7E=maA~SQ813n_C|Trf&uie3-cT+l$_onueZ{H6@MI-^GMK_$$cXbXy^h5U7zYK6HKJW8pNPyepk4x>Hpp(=S^1py|V>sSg?X)IX#;QD- z>F#xDz~b7xP1~n-{x#`dq{*4=l%?o25Lz3ET1=U=)Xi^LzzocFC1I(5WhQ)T8sUOU zYn|1MblV?w?L5|-l!Xnul|w8^)-Q6 z^?qlR96YFux4f}s91hY!~YSe$E2Ck8qQrR+t1 z7wPp#BBXfChAKB*g)-Kv1~IcmUt79rkL!Y6-i`z1DZJ0a$@}VuI4Y~E+LE53p9oPW zg@YyrFU6t6E108ajW}1S@QQL_F81;ApV0fHSR#!~5uzXM=hMH8BJ}$!|7|Y{B|f73 z6j4cyaU7`h@s)Ns=#tK#ET2y1LJ!|CIMSuIl+ zvu%VuH)wD7`AI#anS=28r;Pn{K6f*6?|A_%dF|p$rdnxvWmrS@?xDZ8mecU}IZDth zVj8|jI$Gl#zT*->ppKh-nGX}RMQ9zH!5^))P+%q^to#O}tWo0{g5EkU&Pz+E`vz0p zk*tl%*>IJMySOiMTX$!<3vGOp)v3FUU_Wk?4+Ts&TG5dgO}nSU@5_H_-OoSInU)9u zIgahd8YJE<0&h}$pYqCjHKn_@Cd}r{QfwcN6Qcs6T~irR=wH5d}dsq!u#XjbQug^iSy7dS}KfyOZ$6 z8S~Q7BH)umGRAC7&_KzOOG`b|Q@y)J<6qBQy*Az(B)lZHp#5zZFeKA$Ub3_QRCGC3b9`jl0%z@5ED^=3`5TIL1d=gnY$d znsBTq59dpNKXU=99mBD;(K}?B8rBGAc==a1Q-7( zot!qpY#~ zNeDHyERx9eF|W8VHo&I27AXieAJ?k9(NREV)Y;qKXNY96_?>d3hRaX#Vw*?Lu;Qo2 z(pD&jlvgMv5J~8#Y|Fm%;IVqW@z`Mc3zB#mF;O3P(NHKMb+hrpE>iDqI zb<_A2)c7^HTu~~An~ROMVU>?*Z#^00!)^ndjNb%5VquJA91u_#^2T*v=s7K zv8TO2_9bP0%FXiQ%GP@oFplLq7)}K{NDa8nmjZ;nmI@WjnBofRTQf-s&1~^*T0y%A zH!>z!y>DBz!>WB^^UoVTdt9W?=<74H2Gn< zwwr9cR26YtTm^S|0mo2NPR|5;|M3ARD0=RKAU~CI!ww4&_Y7{u8Up- zqmo-NU=1`dh~syGfU8<4ab39N1SwrilIgASv@BgL)X9Tdbl>U`bK776ZQ=d7{`On& z)lIIj)nsm=4wc(rt*su*x{KSLc@j3Y=h2P7|BtJcW94@&P}lA4K?z5rv*H&e^AmlrBUZ&n^f65f!9B@r;u#Gq% zol-vg^#ZV(gmllo1-pD6O;=iTJ~kR8HLKohMGS{`vu_zdZC^bx`i8PwwFCRr@Hn^@ zZqe^VXU%7cnt^;=>GnfiNa`&!W3}Ers|$NzlI)D}w|y|I-G^jJOlfV*g8n8C)1shYw7s%5W7%}wmq zP##4?f2@AtH=c4sNX2u!kW{q8F`I@?TKbZ4m)! z9W&s)3upP1U=#9KNW7_Td6nxp#%`2^AF%b*;@nXA~D%M&z_#`;GN+5ssD(=Y?Z*K zyly7zDR()OObL07Eg(Y#Ovm>`24Ql{s2!V_`3IBzLLHxWZ#G@S8USqSz(C2t$2RZy z(3v%Mj5RY5pUjtQ*SaOa3DDwcXAFYE&9Xm?IFW;4hG&mLy?B?I9#I+o?EHur1J#jZ z(eXAW04KKXb02Tl)6Kqq^NZM`8K03dYY@Qzee1g&#l@ zBJe%p7t0;TLMTCpT+VWqbEbKFhgYovzC@q?Le;Z~VL^AAj5Kwe^LO67>sVlZnE&KYl<>Eut6kgeNrxx+px?0i_Q2sh{U32VKX%oR0~) z5}bU;#eJNxhmHcOXPQA4PWSt{YTmm-(+cTYT`nSk2unen^><(0_q=Mz&T#-lK%odp4-GChTvrz0!(0UxpI z)47!uzZ*8LXws;M&q!W)1+`~eUBWSvtj}DE#$*@T!1g49{K?4+XtvkM8yS>`iy|@o zT$)YTMxV_zb6M6E_+}1dKn>mWK}A@<(eYU#gHBPrD5!wMg^>GXSJJf!RWgI#hkbNN zud`{1`Ll?S&UOZJ8}EySBJUx{*Tg((690Ig|7Ml%Yk)Al4_aAm2F+;ogQ??!E#$tL za2LHf#(MxX*ciPxAR!z*UQVHPd-6>H&=eTM-in$0wyr1mhlhe*bgA4sPS?!=D#qco zk0;y3vldX7mSNT<|2&LA21)=ccj%4+UkZgdQ@}}hEs`t3+2v)`rgQdUMw?JV6L@xp z#~QTTe&4bCw3Gxw6fO=u+ymM3yF0V-RHcek9RDUCwslm50=7of!VX7SeM@+kO+wI8 z<=5qBv7JYe5I8PcSCXe5F>k%4AWC&L9QWB-e}@7)8`8vi#X83)w~+^+)Oj@P8w@?< z)jWSavQ!J-jn&i&Th-`A@|Qc?ovA zHn#PFl(6P&;2oLX+f^4ViJBT;@@B)xBZx@h4b*`NMuP5OPpMCFqg=VHC=VQ;X> zgzeag?#eFR9857mLcQFk+k;7~lH_STc{tVuo6(r$c*$vOE6)eDw9Vu1a74{Fm9`H7 zwa?ql=*+ZJmL3AwebhvwVN{dIz++u+%LIHDowmcKo@9>tRyW$NQHxvKqS-QhOf%*7 zQ!eyX%;-;WU+xX*U0nWqyctlohbQQ=Q5!&H%6-t+smf|a9#T1ku56VK;yI5y83&3F zAVw$t5W5gjs@3e*zvO-af6>1sEeaZ#os>*GmYw^0MxVp1(dy?rfJW38;isU<1=j}h zC&#I&cjZo0%W?#o#9qzJGbhhQF(2Vjr~3waK^Pd*Aac-c8j2_^pOeLCEpae7E`xe3 z(TkeK=i~#a>q}ABIomrU%UdSYM|-qcd$dae*#3`<42K$=6!g#LA5xYA)bq2RxN=p+ zmxQ+V18oVYoJxWaQk6a5 zWP2hHfdCCal(}8O2Mj-O52|55%`T`#d@@{IHPTrsrPJvT7wn27wR+ozjJew* zadw;iO8+9B=cW$%9ad_bE|pxBpwmy3D5jw)XZ;JrWu#gyFGSPYTfAeh|D{j5el~RZ z^E>O?MN>((mW6cAohVZHdX4jlPF0hhFAUlyaQO~$g$FzY7s-rjY6SxUpyz9g8G46F zs?Jn40_8bJ|DHt=BM6~82!I@AFBrB3Ym+YPMV zuH;TLl1AxLc2=6Fqz}@E2h>`rNn|r^)SsPBTkUGczFJW-Mc=S<@+}Pce4U>t;&cQu zcX?|00tHG8tj)!0`Q#c&?^xuCBs8+!8%ML3B$Mi$35wM@+s0Ja6b6;-4e=-vnsyd( zLCrK**CU6wuPr_$7IH8~A9s@x^sfx|t;)DS1`a;%T)sOYd+fAftl0c@e)N7)o$-PL zOo0+hgkYklBzvx2>dLg;cj7uHb7m)&*Q6Qr=ELc0D&@CEuxiUZ9k( z9a``DgBB?~g@q_0=mDQ@(2&g=(#e-!4(UuX=;;g2rO`XOI{TB?rBfTdo@T$+?k%#( zQ<)sDx$XV7#b(>5QF~a@;K@*nKlv>ZC$K@{j5DkYX<@dytz|K_y?tS#sQdYIUrWS= zcJ(l!=-j)Dt4rl3XMud^8wgrmt^QsYw+`+{+v+;iwSbinN2=WT(|nGtjSNZlOM8=$ zuc@38X3CwrLx|6YF1+vvpI}IYY(5C zsK#A$13H$BSc-^!5U!^u9(gdGjMyPBFC-#GAUcHf^K&5{<)rz_(e+=2QyCmAh#K9c zW`r5iVFf?!<)qH`=``27*JCy3GHrZk87Q4r6DBMtVNp@lYQ>}iCI{J!woRqtE2UWS z@ckTEu||ta!Gu9u@5Oju^%ZTa*wFxtt?UQXb+M+FSYGs^?8dq?&Lv+D#T%n8G2sZWO8N6q}hl%Wr@_gg{P^ir>ncMMD_W(jTI}Wi7av$ z>3G-NL_t>l>mMQ78Pw9(@2{@*5CfOUI@FIio|;4*KMC4TR?AdKBrMhZo?^yAh%M?p z1=04NHG{L|`z`DL>M?)ciP=SgT8qfP*=o2oGtkq(Oa3A;{nhBcEWM%&{)gNgC<{KX zqkGcPt~&W(e=(BjMfi|G?z+u=|8baHOV0rQ^nk&fLu;l0|J&NFAe&0;At+jdKU8+a zVsG(=e}AFgH!>1Ou~ZBH-TToSuD9!oX!>DZPd8~4%ay(2`enN`yydT`&A3+!ek+Se z4!8{JH?Z^%MDRMzN;x3hI17{O!rYXRZL9u2{5GhcDFGV12k1jU!kbqQxOS}YCGcdypxq7=sbxP{_N3C>5X(9qh^wKmP_qORChnVa3*eB9Q1KF_;x zeaMRD?&gJz?m_z6`C5m`vmCABYBsAr9)`N?ptd?ybY)S#k&Lm}HeU)FPZ{y6{ zZA?h=K?j%lQUS@P3`P9rNfz9flaf@mhI}|Kx%Wy3nL}Mfbw*t&tL61}H+WGDKd#1X zdrOngv*^ELLwj3ESDae zzkQgi+dj-cBRIHDFsS17U6+|Cw{z)37Q=^gJoNR{Sn~Umm%qgc3|ROgEo)3Avdcxz z=kzU^n;F0`CLy98qs83Y!x#OqT_vd*IG2guf+H8-B0wt>oAYqNfTOv^c3!*NiX+|( z;%3QoxSy$Qh=Ou8+9D8!C@KlG%~(%Xykz&!T{i&{>=*UfKPiXX9Rdbkm3jW zDhI?h#=OcG`E2`oIgLU4lpG0+0ct5$=V7f^`eajicl+wv1J%bDJxRn}N6 zZNv|nj_IG}etCB$mOkbt@o&8(aJNb6si> zT%llMOuA_N*iS_{0fl_6zJ28k-p$?8I^FNFnuD4`3pN?wa}BmiaVYSg47+FQs$Mtg znMnH0_aBm)-1|ERsGLwSL}r&IXg%MK&adtg6ue(hZ|sPS0c_kH>NEYMOd<4I53 z2H83dH9OMTw$Dd+ww>X~11}o9E zZrH?Jh;xpVY%?Ov+cw;8qo&tR+XWhNaUav=^Ot`pp=7(euba{ADUj8JsmW&|ddvGe za85i#H9^%SEVd8gotG9SNGwZA4o|FKGl^e$va6XU_jI72?s6YI0@iWgx%Ztu>uJf@ zGXA{VVNcxiji0x?H5N*B5p?8NVM$C*@A38iIAIH~cLROKct}0qK)Jr7%~m3@fdaIfk7{P=K)!Uip5#FUX9~J6d5s51;P6B8_T=Nt!A>2r44c9 zm8_-qjz@BmS~c1p5Ju`-=RQqmVdrYgI!h02r9-J0I6|5hI4<;B94X)bDfF=YM9#!V z*err75k~A&8~PzNZ@bkykwr6Yzh1A$KLCO!4U1aOaw=}$c1#3&PGB6=CsChmN8x`z z!J~PXnx$cLNKx$S0U=QCJ3kdI;l%#8;%NipZoTpT%;7bo6su`GQS`B#W43vVRc~mFYBW=Utl`-43&sY0aF_U51T+7s&Wsa&q?*nr z6&1*EgLj&ADoU&B(hnYPzQ<@7LivH6?dFm z^p7^bpbMp#rJE@BSh_D{MnWh1KWAP~ zxo$^*nPT!@^G8LSiP1+ZR|h>5H&36^&}5chEz8yVs^82`D7b69Noqtm_EhQLHz9%L zW`B|HjxncxlP2km;9Ja!_X-Hq`f;!-bnr1lWFdmN=vU~CH7o|VRv>F5n(VCV;6=v) zXGU86hial%7nf~5O1M2u{oHr(QrB8pjq`o+~`(=DqioYb27eXjzarJ_nlp#YVmBWiMDU(0^C;DVXT?M{Ro#;Iegyrn@2e zu|QtA6Q^POiV`8cBttXUPHKM#(4UBnYl%UKW?0chJBT&$JuTV4hp$k_qSE70ww)Tjt9|&TH65Tip6D;P zw6L{UtT%MLA$2416Uk}ZY2wDA6ZITUk^d0@>Hq|c zGM75ao$e>F-_xB+!VnH#dWj~BU0AE5$+jdQM%hg1xMdK+*r&5cUoP1BdDGiIZ z4hsZn!#iZ);k{V>mzxqP4=x-oB^ko#V`g4Pm||&OcTT- zA5ttd*<}X=T|GS`vfAn5@{zSo97M4s6M@ zemf;x&{vc*N(;P1&XAQ($K*D%Xly5AbLNy8@VnD8iy`s-bFZ!tAhX>g^T{v<0}{1Y zxg}5{V|06cx{*iwTM0Xl36uvo179SPsOPo+Xk_am4lH%+kc!1^b!Grik*(Oh>~bj55sVq-RruQFhWRyDpwXWBWACvAaMsT zehsg5(kx4yp;habW$!)Ih>JnVtTWgeRzAn4kmd3$q>4z#zFpD>6l+sKf|Su z+<;@uW}e@BO_Qo;;>>r^KG?*WWR7ld(KHVZwT#6(VC8Q4JPfrfO9_pPv$P6{n~`pp z52X@Z)1M73o@Z~V4|_`u`J;xG$d!V#_h?K`_3vHUf7^n$43QOAulpVbu2vx|)v`@r z8m`P>$aW!#61XD;_k5G>)PQ+pk#M#BDvp&C5YB+<|1kIxJMpnkZ5o@VW1Yb^2f zYGS@>+7TDb4_VgKME7qjMNo!1gZ8Wa;%9&TvE%j${J`R1=MY&~ zKl4-m6z_lA2JkC9uq@8X=&7YZQwXU};|i&Xy`e zS~xGpuZ3+{$?`~Zv3wZ79kdW5@SkOO84XjNIQgf({St2y6 zD^OSHZo|n~Pt7WSH~=QSN2Bf4&J%sKaT*-D_5JyJMSs`8Q2_p*Yk&VE-t%;6q1Zly z3qi77ny+1W{V=N**V61f=+v>9>k9IHs=>v@^NQMB%;0TVp26eWs`F~2RkvF={JosW zdc>%57f8LH3A!Ch7Zz_AAA!G3g2hl#(W0M!)-&Ad#$wb;b%0VI z{;K$iTi%#TjGzK@XJjdzO+2f%nVuAU;p$=r zu2%6LUOj31sq%jw<0cw8DtS<@98qY{;qDKgWi-nn*$8ar+e`Ny}iAtm4<^{p0LmVxyRn*_>pN%!pPji9_|eA zziqXYi$bdTYlT-{eCEQ6>HO4uvkj)id#}U}P6!{xCXCD}!$5Y-Uw}i3C&)|7kK8Z zTEhi?Ky-O|;sHt+Drf)8OxsrE4I;5jN3JI+BH-zl2pCB4O_v2kk6u2NP7-uuA*VVX6tBtO7Kz#+gE`=a)>L< zDG$L{6BVW)Nh;OtJ`zgv@p*mtp#%f95GZ{Zv7y%?(m zdwr)b!kWQSIwS<%lC4^X*V}^`!rAv!u&>-+zl?SP#?1u^M8IX4<~Z>G5`mUobl@MI z|9Ed?j5*rXX$qmjICzh#>4l<71G*mAK0Bw zzNg#xri;Bu)9;m6t$v_!ow*{TLO#S=>thTP>FXlZO7= zBWHylCEBP)v#7}6RHyo`x!b-x3xlNoZkL~m1FYd^jMu!TGnJyuq*#7qs>nez@0l{8lELOFLRp1Q20!_fIURz6YzwH0k{P%v6_8=UHB)SHd7rGvY;&8H+6NDzZ|xE=`Y@q zHAXeGA$^)9_{6w$w^S!0|4c015!qY=FJxM=Bogw~OCFxy;_l8#{Q|M|(^$;H4AUlV zt2j`v4NPexLSR$5qmHV*YUX6S7QDVUp}vguk+6ToQ8Vtn_(KrjJ;zT;hJkyiQtXAG zwEi+L#nOv$^BO%@woUsTscS%=tT7r?o=-%+7RJ=*!b#)E>B8Nw%T#8#g8}NDL;&pN z(50Qz|F&!QZ`cxykkYBq?Oo_AuYaxMXJ9=J`I@1?rUWF46@|Qk4!;0mVEN9MmHw`gl<$#03h z&nEzQuWGr0|5Q|cfy51_L`SNuMAC;goR2GCct8Hu#J1AZU)x4Gd6d7mr;iBvYXs)F zV=%1XLQrMW#)Ur6u+SUGIaDZ#Pf0cEDYaa@`A)Iqm1RFv3vX+5|J?Zdt$fKOAHs*N zG~gK|QAa+*a#)c1ZYBkTCksl54kReVyH?=;lAy?Xgj3D!fWzszF0p8aX;Oklp<&R& z*93?`Az{r=V|*4N6{AxU(pYsAB7Ukrk*dDN@_7E|>8}>(0)od6-w9zWmS`YO6eta! z`y{>mM^0^Jp*QAq=KI4^AH7>kAgk`NJ;@zRb|5aRMaZUq8zKa6F#iTRre;_$5d3=| zDzgKF93) z9&+z`jrobBM}S>L{hqOr$lG(U`|#q*hE|wHB`u~mO=BnnQ60bU5QE?hc@ zXtPgYA*c}w_5o{3f95dn5=t`39(#X}qb15Sd9Q6<1oLvkZ~u2hxw zv_o1x7s5r+di74`VcU90iChPrX>tmit5;l!a?Oqop_KDvN{mr2?UG&kC$-0_gCst_ zb2tb*YQHozmXYqef#VayIMvt*QLzYA4Pf4r$8>lV#_=QuSgn6tocllJiP)faZp4am zxeD*qlxwJ}C@qSJ2VwlU5nlZeqpyls_u+a;g-E=b9*MVJ9po7SkAW&H8FV1_>azay zE;Yg^J&`~dEe@oKv{m8CH?W28Jf3)B6E3-};WZQOW~Pq>h^3OEcD|0SE*A=@t*t{V3^@-w1oxy?}?NIHV{`hB&xRp#7_rOHnR8&uN_Cm$Q& zc!BRNdrZGGROOv>UAd{SOOu~XBp9atN5A~B0w$<|L^oz|^&m)aLr7;|8@SE0twl_VD zZ~nF2U~N)=;44=rdW;|*JzRj_;G#Yzicjbp{_U&4AliyU0TT9fha4i8n;y&uZ_t(u zaUnKuz(b$V*lpLgT5P7;>Jh17_(w~Y;ehx;wZ~7J^uL7iUt9JIMUri~`ZyV6>4UlJK8u9+v+#G3e)n{qjzotzzQ^6^WoBHJx+LQNsj*r# zV3pQUjeVYHp-j18`cF1y*S=;8|09x-dT?l(^c}-b4bC6rW!%0Q)f`M?Kytrz9I53( zf^a{JdC2p}6S|j|7$zXkubcP=?tSY2*ww#ZwM@nPZol}R>kxL~!h4ySerFys$iqr! z_!7~Ss8mbrCPFBdH6S^edFbxw$8z{g7B-eqp3Zsj}gH{_)<-*}LtC zvT1e0d#w4`;Bd2{e<8O0`+A5sbcC2VO?F=Uv3~Z8j*b$5c1Em z?>k5Ocf*tpgFbG%BC+xD?>GGK_x3I#3Jk3GZH#S}Dwq5G^Yya1I_ECW7S=Z2`GGvl z>Z-hBj9Q&5zQ>%CidOEMkgo4zr+Sr>8jVLp<}>BW;TDT|u&z!QOq~L9_HSz&JQK_? z$%N4hJuX2*1$x>T3+PISGk36w1*865wmaeGrg-; zN*Vc+F6b`m#W!MYy{4M%D_`LM+I7P2JD5P{lj1MXu6|H0qG%r~u(kYEsY{pJ4t@O9 z)g?6_EfzMVpohs4tRTPMK;)v~Ry%Z;2qmcLgBa|?0lq+hf09NgqJJ41EpkQzZ>CCT zy+7Z4etXr~g;}8J0^jJG&Ez^lg+39_&MF{Mq7oS%!z-XpxjnpizAPj+Py<# z`CwQ`52d$ywWaRnz!vND=@COX?!)Is!<+MePnZVS@aO+W*H?#C!7X1)Bdv6Yh)8$G zkwz)$4nYu*?(QxX=?0OIlF$*7j&JiC@BMl2_n(jGc{qE|o>{YI&5Y;jC|P!T zKb}M6N3=l366_CyPZLDzzR5*xG3m4fDZoQaBRYsfI>I$l@-% zB?jsGOJqnLtrD^bW!p9A=~Io&?fgKe;|XfD_;Wyxs$8*}U}NDn@o51_M#4b?(Mq>tAhF07{s9bIPmPfw(mXNzfEiVzPbym)kHE83s>=r88^uE zgta?+mQ70UC3LAcE3r08Jbn~41RU4sI`%GQP!z|7Mz~Yl(1Jcb)&=8$YYKN2#pvw> ztH!H#1G^MkYtwYxy{g$~ee?6-mkb%2)3Jk+#{Ew>{q=P0SgYV+@^t2xd+{rA?Wgm6 zKK_L8oIicV3F5jf&(Y@CRAt=r%;sjlxxXwU!&7>_UrsRg)K%OM-s(n!EN7;K8QB~V z(0AXY^A*%nC=PN#;o~!L>Q8uhZ-XJ5{7~>Nw{)|yJ--4g_Lw3rTX8_ z6eMtQ5Q(GLL`Zna6q}#1m7AYM&UMRts2G$6x1H;Y-W?4jjPu=P36<`&65;F>knIrn zjJ>J)mZzh*euk#F{g8m!mc8Bc9^;*Dom?&=VxmyyUwD#W39QeKc>IN z6c*h7JPa~%fViU{ZB2jt|2>vYX=oRQV=;p(x25-2$nM_HwRM(1KU%FWp=6Z96xB+v z>`7#{I(hi*Rxh8(M8<29v4Ip4(WI}Vu8x&WpTv$fGHY=-xaR5>oOYN+zt`kq_ws8c zC+KVTk(^_QTGFPIBjk2Mi_V{+@Gu|bydKDUpdcHcZs zO^%lMTd)zvpNH|!?Rn*4$cYnq_a^OkMJrSE?LLu+Z&oWN9{Y#(0|s5>3B}PQ`0QF@ zTK746osAh_?(bp66ZM5m{V@v=LO}*TO8Cpa{h+e=8}E9r_1w=6*}lGu zCHFGjP98TV{ech=G(?bUBYdxV{D05#U#|dCZIPzVlUtr<=Hi;g-dFH=v3PD`w| zhVj|*6ktHbJm4P`8IufM=9Q79HxoU#>;#5MwPlgAGv7T12B9=|*t<*YCBaDkNE}mhbpQQytc&k})qdN`z@Jn3D>Qm-VR8|(p;ri_;c*^W z(uMfnu$C}F?SMGA3}^BqK9+7g5xNYnXH4&UbgtOp5FMo1B(tU?O4`q`vbQIWYBy(x zt9n=zQ%7CK9pBCr%WB(P55~QjPL&ahXmP@!vs_#?m`3M)%_3Yjh=Y1%)Yx19sY@09 zFSpz&12wg&1(Ip=Y585nN5u&!fZDlx-ekDQfTsLDz4gT5A^Z3RS(5`4Wt0Yk0CR-c zuTz3(;{dDHuD{^p{r}#wF?9c{f~CfhXHQ2>e^#tn&CnS>Izdk;rQ+D03fMaHKgT(3 zuL@CNt%KwnU(Rybt=6KHY-VL(tA z|2UIQWsm^qe1~;QdL_G0;Z`TS^0wC};TOpJssZvH-_=zz>LqA$V z=?Nel#zVI*$K{74yBYDax3wa=>_#9MjOGi|qO4C0qv-t8@A{J>gHZQQwwWt zGD=F=e^ZN>p8|2Ou6veUUw!*GQX8asZuiat48*Ym#N>XkDL>RIAI1DikW>Rb$#LSR zT2h0#(IvOZ9pqWx1glF}|A(^3ARHJyOUL^!e_7ctAG4g=*sf!**O+Z=4Ue1^AqMn3 zVH49HXL!OLz236L6tP#m_p(QFrFxFOo%g(%{>%%c&@E{?$_>^t*B*(G{-z}+(`lws z^MUouao$rB-S4sZanTwFeydUhXuIj6gPJwY8U1(Jv-?~T7W*vQjFZu~(sR|X&X3@a zcf4QvI2%g#jaIMw>^1DKg-Ny_MIjNoDmoDlKSwa-moMn$1rC+El!&)9Ld^(hR_?Ff z7Ac4K<^Wg1&)amnjh;5P8O9w0WVjg(k5}8?^TG=0Lt9Z=QXcs`Mk3^DmJ(hem9pV? z+yjKFH7pvbKwxiz2Md*AgS)WniJD7~?_ z&v(?=4EqTdWV6q(?T|i9V(w?E0A5#J^@G%%YW}AaF}Sl={E8*1-|ps*-FlAPr=)yi zwREDz#WP;_RkdxniN%yy;d1W~i|H|0wTE2IeXRdYK3VDgkC zxCe@Jzi(=!2<-k`wqd=!-%wfUxc&j#i&96^R@h|Xoc7}>qu-o|db~+B0HT#xmc-Ii z$6}hU(4!2=;bO<84Op~mW6iZ_GM_cIudW7&H|6@~ID3sVvie#ENjbaP4Aa-Y4FkdQ z7hlS)`eB5Z`=?>gqH3!f8+2(E@~&JtkX3EGCeQTT_V?GWEw>6;Ep6=Dff8QtBK8@z z+B9zhc9oX${lHyvgaQ<=Q4BNdkPpeE>A4k7aM4t_`ru&RnL$61A?lbc>$k9!`=U&2 zyJ2u~TJ-kCyPt)syQA}>dstLAdcXUOY-vM1qCb`P>NU=G`|Drn3l0_84_%iG&W~1J z-+61jVCT5+eZ+~Typx;!I$(TE;Pcw2xkCP2#qT@Sje<@W{;>X0u|)m#mSzKGi&1Bu z9ZTZ9C-V0i+rEr3*=|W)9nL+jqSim34g#`zMx}(#>^HWgY&bxAD{?<2UA4jy{^~^( zQ%|wN+yWpBV%3Us;DQR-2e`MJmY%4x>C*|APEd}NeLxxpSZCqVqQl6sVHwi}6`#>T zj8!Ssez||>t}$R^tROs}b}fE70nVh5sv5f%{dQVS7iBP8^LyUn^X!l1RA%_^&Y=n2 zXM=!Lw6@gJQG_x*U4J=(mzTS_ZK5l$_Yp+~S$$UE!t(k(72LI$Rn)B!e4WzEv&@K) z^wCpwyC^~J{O5366Q$qqSnYOLTq`JxUk&OQN!ERWPQocGWzw=Rf ztw`L1-=~h%X#jOxGN)_f5pAU;`NOmFEAKr&sz`@L>t7F|2TSgakDg0DE0#a?8~!O_ zmB3pP-8hwCwO=uS`knS&ja(&k|Mv^}eQgjZTAa?j=C3OGn4~G5+b(EbenPLW2Y1E| z+CruH1K>owIu?}(_cjZJneb4k)jwhQpIi&|(Xj9k3=A*_1_ue-+Lmg%Qrw7ivz*M6@yh&5FV*&exomkgO>v=vU=ak7$JNuQZlNzLSr31g0<+q;hM z#ba-?U3hJ1&TFo!bF_J5E#CT#PR@mSE{nY1^7KYnk$ve>-7q=I^mPHGmVpQX#-EJm zrnt+mZrUV0dY3xV>JBN=Da<$f9jewk)-zWjVbd)3Fe0cLe*IOmxO*Z7pFtJ9hL%2+ ziE@@r3?+YzX?;4uXq7?p*Mrd=fX>Yx`aVrUu@*beO6$yV$`4{(>nIBV4 zo>?9Xg!Pgi_I94=q)Hj<&?R$ojJS%#WN%h@GgUg^RzcYEfdC(C>u7zLU`PyIrdUVb zE8bFi)3jDL#vYHiRMy`t-)-?Yt6^blW-UU&{$)=UEf`f+7<;t6_*PnXTxI62sYQE| zl@@teCRre0mH09}Rz(kGYvg{4N4t0D+q(6*qBvzzKVhhr2M-)NmQC8GH_|`vj!`Y) zfzwqjXdL;X!elX9(GJ`5@o5MY%tM{n_B;K^&*QSL@w`}|825e4LNcVg>2o${YI9la zB=Gac5G1ICCtuRszdroXOmg3yRs@@n7L2A_cc0&NMl>(}gn07wqkZ{i$n38aq3vxg=hCGR;0Lcf8(EFL!gqe3Are%wp-R&(4}$LmkefVfPk>mh&xZ zTqNSz{7m)wY_VPN_$O%g{bx}$#}vZ?I;AZjsPs-g;)Kr}70m}tFw|P}8PkrMUj&B$ zvtr3T4`07EdJ|>zK!)Lz&3I9B!4llgtjX^(f~FTYqeU0JVn;&vnpcPytg zyaN0Fglpm~ys;$Klq&M1YwX@gNERIt2X_z@PzAKz_x1IiU+!9JujS+8 z+dr8qqi2w%`b{YUvR4R*BcW?NKiy9g z%WoOvdV*@}RAYbIcR1lSd35#NRu7-mUr-G^%~5K=7n;_Ze2e?rsZqas=Cws5=c457 z&Mp9PG{7R!5r}S5uv7<%Et_4a^6UD!<$;Q=aasoqQ`HJ8Aa|cIa6RxONfNm0584;r zc1B~z$^T?Z&g$b(pyM4slDrmM3mWeFdNqrLc04JO3|sMjk{{l7FAT{VvJeC|1rX(7@fsBWtPNxtD342fK{qdPv$o}5G zKFanKcBY%o4ptj9`ys>ES&WDz+-izvqR#S%szpANUz!r?`|h6asU`U?lgs`c)) zwmfxKq%R%IU+stlLJuxKVqhR)k1uVz4hYiv_Q9W;<@(daB^W!$3VL+d<95Fw4S(*} z37-g2?lz5`a$-LBmz;al+95I~Rtz6thnQH&jD6Z78!uJ<$w)!*c*l$-96YoCb5(iI zAV7E+ui=xNmHVBnU>Z#V3Bgn%h5MJ-3Gn^+g!iTr>Hxu=KV}I+li}o~=D)e5K^Dkg zzA7aAt`Gc&5m>7N#LevrRq5srcf(~xkYA7YZs8p4d9l6X1WlTHD8#I80yhFSvxzw% zQ5O(uXoL z9f_>j+uO%vyD3FbeE!(p?1}`t=c3DxKD{y1D2pSOhiAWyzmP`m1r5uk)dCynY|;*P zC3K<Vq66To1Ri=B&m=KpvLT*4Do(PwmguVYivdDu=jw2A}T}U2dW% zn~nR=p%eLO-_|nqwoN?H_dgPiDW@OWs->bv2jX(YydynESD-X=yqT{s%*9sLwbb(1ZMj6z zjC*TgIgYwwR`EJs(b<}%2`i+5_?sjY{rER&+IzDOguAjd6-Xl7`hs9PwjPZq2wE!@`vfSC@ zSbF)PBc6v;FohFNq$1;y$4%14f^dqTe&4C!qM9nK$yj!P|HpF;_b9fMouueq#5U!~cqniaD0?r++3>fMw&X_oX?3KI*f0)MO;~Ij>9f z&!dId-$}-J%c|}K#eXo;-5-~^y#^H4^gu68(d#zN? zXdMI}`myoM92PK8Ky1a;Sxo7=Ytv~XV+Hk_km%H|FZr}QN=db9~28aHVYz;pf5pEtlx54vdn*hl0eoFD40Kx_tGse{3Q{VL}8=FCEC*F z{@kLm1a+&v`ATh9QAtUgM+~&(f;AaWsX3K{@IyFr($Z}|(6X}_X}GI5T3NW#To@XT z5J93p+N?BQwCzxZ97)ZU#8pc=Sz!`A@K}dN4igNJsV7-7q8D;Uci=;H^5>wB@0>&a z(7vYQ2BzoVlBfLW+#f=W2yHG?a0wO70WJj-jw5UeoWW~R+_Fy(2yr7`MG=xUhzn?P z7qgBWf-`iBIR^@k#LDw&)o<<%Tbh*(yDI1fQ%3l~ux z2M+mwiWGx()f<&F?6YwLBACA}O*O-lVgYIkdg`+Tf8VW<1jl*)KG*M%x~C3}w5>l5 zXAk?y@lD+m$l3=-*5+ESRvQbNsP3(d5W=n?!cMgzjQ**RH8vZQPh(tJ2g~*U_z_*L zyCP=6X4~7pitOTR^PgB+VeVCod>$3w=a4iuN0DTmeracAOZr1c4b=(G8kADWl4$lnavrSdfxSXtP< z9YTrfJ{QhcUIMxh)!RcE5z&rUlj~j>aP-F5*{|Dqasc#&j;HnFT&@KaU`XW|EXwX_ zt-gY>4r$J+*&i1`PO&KF$K*qPp0a4( zhlZnEP8UQ}-_&8LvBr;w2H8>&Ih9hW4j#<4$XvPMoRadtN7n7d4-Y@tJE8IRw=?M! zT;irvfqaQ*e&6^K^cNYkbP+uEZ=9;D2Q}q8i1zfZM!M8-%S5%ix*E=7_t3*)IOYHCFqOMV5NP-u>(%{2ETeo8xm)^ju1kM>S7;?q*c+vrnZ zTL%0lPX8UfQ^+>%a>nJ1iXSoBOQ?6^TS!0qf-mK}$FSnrIZnq#CaVo4=y$EqAO2Y7 zc$!pEY;uEjUNyQ!MCvh%KEPZI=B`l!yk0*#3PSU%y;yweO_hg-S>aNr>WfaX8V)<; zdtw;S7SlqF$7G@SlZ2v3I1;Doi9h`wKs9I7|9+d_;S;dE)H0Z&Ch3)VqLJ{bY;GuQ z1PL+rTLN!T+-K}CV4UsSv!C(nIP29=!=4vuF;-S_Ee+2~TiO=M7K@GDWEAP|>XlyY zX?;t&3e#kYbPW_rdJtLPwz}<-IrMmBNz8CGBaVORY68W`TmRtrn?g z=Kd463fQ^ZN;QTn5VA2-%C0cBHQcBRqb4zAeYg3oi4xo=d|RPp?JiOzU z{Oj51^Fb`_rkA$Fm%hvlxCp#B($-2@9fmVkzRyJ02JRFjz4vJEyzW#nojigUjWL;KmSaEWV z4AC@utl<{z7PyF*h(N27PTVK3`QGk%xL=lnS`R-8E66XjHRjvHHe>l+s;!81=04zY zY$c3o#~}a9kC5;Z3f;Tv^XQs2o7QuuT!BvY(?*|3~gM&qF--d1xV`7GMuB*1TwvtgE;X_-%FI?pF9&A4O z5OI=Nwd{n)Er`fzBCv17fdjtS^U+U-89hSWG-mpMEl+EQqUOg^+BnNA=E1ogcRo3xEt($Y$_ z+^Q&}md{SLs&^dxWPKg6Pss(lJNCsdCAycxy-(3gJz!R+2Ohy)JBS9myYq0=>>L$5 zgqC;pI`auo{L2v_nFjNdaDlH*bQ$!&u8#}#+^lGVE*mDr0pzf!M$=_ziXtuX9uR*Q zDb;+wv}(N%2n@UXt(34!67!azx5Vl7Vt9OW_8KRCIKgbvNOb{INhah14jKlA$*7NR zNkmZ41BHN%?i$$&{twzJvIa^t6nm9c)Hsy($krHjC?73jT0#7wUm_|4DG0U;R6OCL zzr*v^%ff)Bc3OR8wS_#ui`O2z6P}+#_7f8ikvU&WyMH?LcpKn|mai5dV3=epx65!4 z_KIFFG^Gp=Ii^t9ggdFu5^lF*$Iw1LjBuE_26HMu)#c5VF?wLak03%7_aiT-He)bS zNgQna(1{!J%6ReslhBC8B1t(SS-8F13e<@Gl9KYfxEGJnck2%AbFIMnm#rT?2GQgs z$~2_U$`2XGQ?|I7TKgMvRL^CGNv1W(d~9<$i8bCMMueyoc5$I@3^xKTS*XJlrYv9J zBHO-iXX$_s=y^Bg-f7?FwGLgEskCnCKRd5*Q{^+Ii|2g4RXGZV5^aHf6NuXR)=s6@ zpPs6_?=b*Lb0~;JJu_`0F~#2qz)2im8X~z*p440!1acYGsaxo6c2~8(8U_9H>HS6b z+u1(MZGTtvn*3xD^J?}hyXwidi0dF-@woY~>YFls?5iUQFuvhe-Wo5C<7d0r1p$n_ z%*WJ-*5ns;4+>wz(1lWLyBjM4T5 zOcsIc;8wbxKg6Mn)#rON@pa{U!|nXEhh_4=GV)Ipsa5PZ zw>zOeJc~?6G9&Ngu4?$8^qKJX&Q<2_O1yiP4t@z=Xh{UzDFi!Wj@+#S>k>R5C1`bk zAf~UHivJSAYCc;Zaz~JuZ>i_K>FzTCVd!3x;B_Yj9jSnOaPDsThmdrcotvkkGC&f# za^+TRFnYLlt1Wf)y*Toqm#dc^G%ZiXyN(Li2N^kc1Zfe@t9(79&8izH!rqznh@H*s z4Q5$D*aH-M0k2+yU^oCcq&5BHzC9( z-gE=i`KrjC7H~0bK!qG;C3)zfQGsXCptKUj&F@a&eP9=#1vb5@Z32pZxy2g_ALAXR zBtu^=7!k##VM~IQblW-uHlP`M0-a)pd{t}z=CL!K_A%z?-b<+TmT`wj|GVKu2WuaK zXYOiLy*&*+@;M@^j+B~-#48OU#b91TERPZXr0X!Oncxl3l(>anQrXcWb5&_1N2)z4 zgJyrP(&nJvNG8eU@`lhEg(O5!_Btdd10fCYBL|~kE(y}U-58MfxHcG;Oy}$`?}S;K ze?}TE-x&v@srH_vL6HtNW`Ubp((r3L_%$>O;Q@*u+1X+UeMte!9@7;mQN#O#`)%=$ z{nKMzCjC6(DtJ}yG`Sk{lEY4kl>*r6!bh|f3_JTIvj_O^W`0-+g7Aa@*O$Z_vfH3z z@GVt7vwM9gO9#!cHUH1qL;CJ#x16@D?ojGOe~>0`Jr}&?+)L~U<^8S37K5ZAducUh zd43Z0?nhZqQrIPlVx4&1TOi3P2Zn#4BUI!=-V4F)U)~5Vr?bB#va_6`8Go`_9(6RW z9t&y!Wogn@TWSo7$grKr-(1pizRJ< zaYGSOfN(64=iZw6%GaCZeq$!+j7n^zdY ztJ&5E*UM{U(x_Gn-@Y5^eQw6ET;jO7IpuQ=c3Mb^w}=nLg*u;}VKS81Rn#8>DPYha;CZbJ`GRT8EP{;6>^vg}No zvZ&pqH*r*Zr*j^9Be`pgEV;`0Jk@raamJfAx=PUgT;n?D81HP`OP5~UB7&(x zUwGgnf3-k>vff1((m3Dw19(El*2{c2tc`D)v+1KeHa9GHVt$&ahYfk!?-oDjr6az; z(svu!(f>vuDAjif6fy^>M50z>Uiq{yNBd7bwr1cQ6;w#!_c-OVAbyKzZDy4y0Z=VT z3oSDX!T}mq4#XUZ3k)p*!uu4Ns$TM`@od-0Hfln`Lu^mWN_Wqb`M)nuKWcDE*kgCw z)u~9im5zPvri`;+Qs_IIcXG(3znQIEOjk~qV$76EWlr}LT7QH#s_jfq$HLOU1S0Kv zGoEuR!FS~B&sX(TuOt3kBB8x)UcMDo7`JdXbe|Ph61yY1AB??@>gk|K;RxhPbwLOv z!YE1cORBL&HDb_?8huQYVm4VUdvR4}SK>UVZdedTGx8L9PWxUGXz0?c;fiLE>QkKWTB1qY7qg*K2 zan7sbj2v*S2vq6u@!2enTi@UU3pYpe=-lKouZx;C<2d7Ox6mz8RPe?#V8o6%Z-vqK z)4r|e9KNcxeZU~Swra9>whLoYzk4nBSs6KympXZ}gaqzj`D3`oS9@ebI?cy!o<|*} z=kjH&#j^WNiR&8W_Oxg9x1KN>(R$z4jVrS#Q}6PU*Y-$l0#!|*22t% zd=+Sy3E((8D5C4s3X-9*0^c_tuJv2)FFL`(!I4u_V^mpJWvG`CFcX9z{3(lheInDn zeoKv&!nj_ZE;EIn%eMWYd9?DUuss#>4YpZ0lg5PQ7$JM;)UUg3�G~kZ+&(ajreT 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