From 7bb12708703afb82e49dc37349851c0dbb80eb24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=85=89=E8=80=80?= Date: Sun, 16 Jun 2019 19:30:56 +0800 Subject: [PATCH 1/2] =?UTF-8?q?GitHub=2026=20=20=E9=A2=98=20=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=8E=92=E5=BA=8F=E6=95=B0=E7=BB=84=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Contents.swift" | 46 ++++++++++++++++++ .../Contents.swift | 3 ++ .../contents.xcplayground | 7 +++ ...56\255\347\273\203\350\220\245day01-3.pdf" | Bin 14321467 -> 14367563 bytes 4 files changed, 56 insertions(+) create mode 100644 "Week_01/id_29/week_01_hgy.playground/Pages/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.xcplaygroundpage/Contents.swift" create mode 100644 Week_01/id_29/week_01_hgy.playground/Pages/Untitled Page.xcplaygroundpage/Contents.swift create mode 100644 Week_01/id_29/week_01_hgy.playground/contents.xcplayground diff --git "a/Week_01/id_29/week_01_hgy.playground/Pages/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.xcplaygroundpage/Contents.swift" "b/Week_01/id_29/week_01_hgy.playground/Pages/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.xcplaygroundpage/Contents.swift" new file mode 100644 index 00000000..cce3d54c --- /dev/null +++ "b/Week_01/id_29/week_01_hgy.playground/Pages/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.xcplaygroundpage/Contents.swift" @@ -0,0 +1,46 @@ +//: [Previous](@previous) + +import Foundation + +/*: + [26. 删除排序数组中的重复项](https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/) + ### 解题思路: + #### 方法一 + 不要使用额外的数组空间 所以只能在当前的数组进行操作 ,想法就是把重复的下标记住 ,并且移除 ,因为移除数组会导致数组个数发生改变 ,所以我这里采用while 循环 ,当不重复的时候 index + 1 ,去除重复元素的时候 index 不变 ,这样一轮遍历之后 ,就可以移除掉相应的重复元素 + + */ + +func removeDuplicates(_ nums: inout [Int]) -> Int { + if nums.count == 0 || nums.count == 1{ + return nums.count + } + var curNum = nums[0] + var index = 1 + while index < nums.count { + if curNum == nums[index] { + nums.remove(at: index) + }else{ + curNum = nums[index] + index += 1 + } + + } + return nums.count +} + + +/*: + ### 方法二: + + */ +func removeDuplicates_1(_ nums: inout [Int]) -> Int { + + return 0 +} + +var nums = [1,2,3,3,4,4,4,5,5,6] + +let count = removeDuplicates(&nums) +print(nums) +print(count) + diff --git a/Week_01/id_29/week_01_hgy.playground/Pages/Untitled Page.xcplaygroundpage/Contents.swift b/Week_01/id_29/week_01_hgy.playground/Pages/Untitled Page.xcplaygroundpage/Contents.swift new file mode 100644 index 00000000..abd1cf3a --- /dev/null +++ b/Week_01/id_29/week_01_hgy.playground/Pages/Untitled Page.xcplaygroundpage/Contents.swift @@ -0,0 +1,3 @@ +import Cocoa + + diff --git a/Week_01/id_29/week_01_hgy.playground/contents.xcplayground b/Week_01/id_29/week_01_hgy.playground/contents.xcplayground new file mode 100644 index 00000000..8c0fff27 --- /dev/null +++ b/Week_01/id_29/week_01_hgy.playground/contents.xcplayground @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git "a/\351\242\204\344\271\240\350\257\276\344\273\266/\347\256\227\346\263\225\350\256\255\347\273\203\350\220\245day01-3.pdf" "b/\351\242\204\344\271\240\350\257\276\344\273\266/\347\256\227\346\263\225\350\256\255\347\273\203\350\220\245day01-3.pdf" index 3f8f63993f04b2aa00f1e83d4535a203cc8e1ecf..1b6511d3ac4fe03d9029f46b9ecf70289771b1da 100644 GIT binary patch delta 46283 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 delta 447 zcmV~$S62=I007WqeRlTFPGs+ukxf)~*?Z4yA(cynLiXN!%goFO37PQ|9M7KJoA>W; zAUpj}AW0EL6;oUZ0VS1ES{Y@PQ(lk?DypQiDypicx*BS#rM5bP)m2Y@4K&n9V!Pb}x(nAsPrdXOp^v`$>2H961{rLKNJ9-1C0dN( zMi^<7(Z(1nR-AFhn_!|zCYxfaX{MWDrdej2W3GATTVSC@7F%Mec*`ue!b+>Gw#Hfs z)>&_ZL>nbZmSPh&+alFg+oaiUhn>=8*k!jpGVQg`eg_?)C US%ELU`sTYIek$}U>vwqSe??c+1^@s6 From c85ca9a5934c1b39a48afe3632488f162647451b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=85=89=E8=80=80?= Date: Sun, 23 Jun 2019 16:39:58 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=20=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/id_29/leetcode_101_29.swift | 34 +++++ Week_01/id_29/leetcode_1021_29.swift | 35 +++++ Week_01/id_29/leetcode_1047_29.swift | 28 ++++ Week_01/id_29/leetcode_104_29.swift | 24 ++++ Week_01/id_29/leetcode_111_29.swift | 35 +++++ Week_01/id_29/leetcode_15_29.swift | 132 ++++++++++++++++++ Week_01/id_29/leetcode_189_29.swift | 46 ++++++ Week_01/id_29/leetcode_21_29.swift | 44 ++++++ Week_01/id_29/leetcode_242_29.swift | 77 ++++++++++ Week_01/id_29/leetcode_24_29.swift | 51 +++++++ Week_01/id_29/leetcode_26_29.swift | 61 ++++++++ Week_01/id_29/leetcode_441_29.swift | 69 +++++++++ Week_01/id_29/leetcode_49_29.swift | 74 ++++++++++ Week_01/id_29/leetcode_50_29.swift | 62 ++++++++ Week_01/id_29/leetcode_783_29.swift | 28 ++++ Week_01/id_29/leetcode_84_29.swift | 71 ++++++++++ Week_01/id_29/leetcode_88_29.swift | 94 +++++++++++++ .../Contents.swift" | 46 ------ .../Contents.swift | 3 - .../contents.xcplayground | 7 - 20 files changed, 965 insertions(+), 56 deletions(-) create mode 100644 Week_01/id_29/leetcode_101_29.swift create mode 100644 Week_01/id_29/leetcode_1021_29.swift create mode 100644 Week_01/id_29/leetcode_1047_29.swift create mode 100644 Week_01/id_29/leetcode_104_29.swift create mode 100644 Week_01/id_29/leetcode_111_29.swift create mode 100644 Week_01/id_29/leetcode_15_29.swift create mode 100644 Week_01/id_29/leetcode_189_29.swift create mode 100644 Week_01/id_29/leetcode_21_29.swift create mode 100644 Week_01/id_29/leetcode_242_29.swift create mode 100644 Week_01/id_29/leetcode_24_29.swift create mode 100644 Week_01/id_29/leetcode_26_29.swift create mode 100644 Week_01/id_29/leetcode_441_29.swift create mode 100644 Week_01/id_29/leetcode_49_29.swift create mode 100644 Week_01/id_29/leetcode_50_29.swift create mode 100644 Week_01/id_29/leetcode_783_29.swift create mode 100644 Week_01/id_29/leetcode_84_29.swift create mode 100644 Week_01/id_29/leetcode_88_29.swift delete mode 100644 "Week_01/id_29/week_01_hgy.playground/Pages/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.xcplaygroundpage/Contents.swift" delete mode 100644 Week_01/id_29/week_01_hgy.playground/Pages/Untitled Page.xcplaygroundpage/Contents.swift delete mode 100644 Week_01/id_29/week_01_hgy.playground/contents.xcplayground diff --git a/Week_01/id_29/leetcode_101_29.swift b/Week_01/id_29/leetcode_101_29.swift new file mode 100644 index 00000000..58022f2d --- /dev/null +++ b/Week_01/id_29/leetcode_101_29.swift @@ -0,0 +1,34 @@ +// +// leetcode_101_29.swift +// 极客时间 +// +// Created by gavin hu on 2019/6/23. +// Copyright © 2019 gavin hu. All rights reserved. +// + +import Foundation + +class Solution { + + /* + 思路:使用递归来实现 对称二叉树的规则是 左子树的左子树 等于 右子树的右子树 ,左子树的右子树等于 右子树的左子树 + */ + + func isMirror(_ left:TreeNode? ,_ right:TreeNode?) -> Bool{ + if left == nil && right != nil || left != nil && right == nil{ + return false + } + if left == nil && right == nil { + return true + } + + return left!.val == right!.val && + isMirror(left?.left, right?.right) && + isMirror(left?.right, right?.left) + } + + + func isSymmetric(_ root: TreeNode?) -> Bool { + return isMirror(root?.left,root?.right) + } +} diff --git a/Week_01/id_29/leetcode_1021_29.swift b/Week_01/id_29/leetcode_1021_29.swift new file mode 100644 index 00000000..249e42cd --- /dev/null +++ b/Week_01/id_29/leetcode_1021_29.swift @@ -0,0 +1,35 @@ +// +// leetcode_1021_29.swift +// 极客时间 +// +// Created by gavin hu on 2019/6/23. +// Copyright © 2019 gavin hu. All rights reserved. +// + +import Foundation + +class Solution { + + /* + 实现思路:要删除最外层的括号 所以第一个“(”不需要添加到新创建的字符串里面 保持l括号正确的情况下最后一个“)”不需要添加到新创建的字符串 + */ + + func removeOuterParentheses(_ S: String) -> String { + var res:String = String() + var left = 0 + for c in S { + if c == "(" { + left += 1 + if left > 1 { + res.append(c) + } + }else if c == ")" { + left -= 1 + if left > 0 { + res.append(c) + } + } + } + return res + } +} diff --git a/Week_01/id_29/leetcode_1047_29.swift b/Week_01/id_29/leetcode_1047_29.swift new file mode 100644 index 00000000..4647fab7 --- /dev/null +++ b/Week_01/id_29/leetcode_1047_29.swift @@ -0,0 +1,28 @@ +// +// leetcode_1047_29.swift +// 极客时间 +// +// Created by gavin hu on 2019/6/23. +// Copyright © 2019 gavin hu. All rights reserved. +// + +import Foundation +class Solution { + + /* + 实现思路:使用栈的方式,入栈的时候跟栈顶元素进行比较 如果栈顶元素等于当前元素 则弹出栈顶元素 + 否则入栈 + */ + + func removeDuplicates(_ S: String) -> String { + var res:String = String() + for c in S { + if res.isEmpty || res.last! != c{ + res.append(c) + }else { + res.popLast() + } + } + return res + } +} diff --git a/Week_01/id_29/leetcode_104_29.swift b/Week_01/id_29/leetcode_104_29.swift new file mode 100644 index 00000000..3c07ed07 --- /dev/null +++ b/Week_01/id_29/leetcode_104_29.swift @@ -0,0 +1,24 @@ +// +// leetcode_104_29.swift +// 极客时间 +// +// Created by gavin hu on 2019/6/23. +// Copyright © 2019 gavin hu. All rights reserved. +// + +import Foundation + +class Solution { + + /* + 思路:使用递归来实现 最大深度为左子树的最大深度 或者右子树的最大深度 中的最大值 + 1 + */ + + func maxDepth(_ root: TreeNode?) -> Int { + if root == nil { + return 0 + }else{ + return max(maxDepth(root?.left), maxDepth(root?.right)) + 1 + } + } +} diff --git a/Week_01/id_29/leetcode_111_29.swift b/Week_01/id_29/leetcode_111_29.swift new file mode 100644 index 00000000..f707cd76 --- /dev/null +++ b/Week_01/id_29/leetcode_111_29.swift @@ -0,0 +1,35 @@ +// +// leetcode_111_29.swift +// 极客时间 +// +// Created by gavin hu on 2019/6/23. +// Copyright © 2019 gavin hu. All rights reserved. +// + +import Foundation + +class Solution { + + /* + 使用递归: + 这里重写了 min 方法 + 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。在[1, 2]对应的树中,很明显,结点1不是叶子结点,结点2才是。所以比较的时候 如何左边是0 返回右边的最小值 ,右边是0 返回左边的最小值 左边小于右边返回左边 ,否则就是右边 + */ + + func min(_ a: Int, _ b: Int) -> Int { + if a == 0 { + return b + } else if b == 0 { + return a + } + return a < b ? a : b + } + + func minDepth(_ root: TreeNode?) -> Int { + guard let root = root else { return 0 } + + //min(minDepth(root?.left), minDepth(root?.right)) + + return min(minDepth_1(root.left), minDepth_1(root.right)) + 1 + } +} diff --git a/Week_01/id_29/leetcode_15_29.swift b/Week_01/id_29/leetcode_15_29.swift new file mode 100644 index 00000000..ca5fdf6d --- /dev/null +++ b/Week_01/id_29/leetcode_15_29.swift @@ -0,0 +1,132 @@ +// +// leetcode_15_29.swift +// 极客时间 +// +// Created by gavin hu on 2019/6/23. +// Copyright © 2019 gavin hu. All rights reserved. +// + +import Foundation + +class Solution { + /* + 方法一 暴力法 时间复杂度O(n^3) + */ + func threeSum(_ nums: [Int]) -> [[Int]] { + var result = [[Int]]() + for i in 0.. [[Int]] { + if nums.count < 3 { + return [[Int]]() + } + + var map:[Int:Int] = [Int:Int]() + + for i in 0.. 0 { + let num = [nums[i],nums[j],-(nums[i] + nums[j])].sorted() + if !result.contains(num) { + result.append(num) + } + } + } + } + } + return result + } +} + + +class Solution_2 { + + /* + 方法三 : 先排序 然后遍历 数组 ,遍历的时候才去两个指针一个从当前数的下一个开始 另一个从数组结尾开始 ,判断这两个数的和是否等于当前的数 + + */ + + func threeSum(_ nums: [Int]) -> [[Int]] { + if nums.count < 3 { + return [[Int]]() + } + var newNums = nums.sorted() + + var result:[[Int]] = [[Int]]() + + for i in 0.. 0 && newNums[i] == newNums[i-1] { + continue + } + + var left = i + 1 + var right = newNums.count - 1 + let need = 0 - newNums[i] + + while left < right { + if newNums[left] + newNums[right] == need { + + let num = [newNums[i],newNums[left],newNums[right]] + + result.append(num) + + + while left < right && newNums[left] == newNums[left + 1] { + left += 1 + } + while left < right && newNums[right] == newNums[right - 1] { + right -= 1 + } + + left += 1 + right -= 1 + + }else if newNums[left] + newNums[right] >= need { + right -= 1 + }else { + left += 1 + } + } + } + return result + } +} diff --git a/Week_01/id_29/leetcode_189_29.swift b/Week_01/id_29/leetcode_189_29.swift new file mode 100644 index 00000000..e8ffca98 --- /dev/null +++ b/Week_01/id_29/leetcode_189_29.swift @@ -0,0 +1,46 @@ +// +// leetcode_189_29.swift +// 极客时间 +// +// Created by gavin hu on 2019/6/23. +// Copyright © 2019 gavin hu. All rights reserved. +// + +import Foundation + + +/* + 采用取反的方式 + */ +class Solution { + + func rotate(_ nums: inout [Int], _ k: Int) { + var rotateCount = k + if k > nums.count { + rotateCount = k % nums.count + } + nums[0.. nums.count { + rotateCount = k % nums.count + } + while rotateCount > 0 { + let lastNum = nums.last! + for i in 0.. ListNode? { + if l1 == nil || l2 == nil { + return l1 == nil ? l2 : l1 + } + + if l1!.val < l2!.val { + l1?.next = mergeTwoLists(l1?.next, l2) + return l1 + }else{ + l2?.next = mergeTwoLists(l1, l2?.next) + return l2 + } + } +} diff --git a/Week_01/id_29/leetcode_242_29.swift b/Week_01/id_29/leetcode_242_29.swift new file mode 100644 index 00000000..85c54659 --- /dev/null +++ b/Week_01/id_29/leetcode_242_29.swift @@ -0,0 +1,77 @@ +// +// leetcode_242_29.swift +// 极客时间 +// +// Created by gavin hu on 2019/6/23. +// Copyright © 2019 gavin hu. All rights reserved. +// + +import Foundation + +class Solution { + + /* + 方法一: + #1 将字符串S 中的字符作为key 出现的次数作为value 存储到map 这个数据结构中 + #2 将字符串T 中的字符作为key 遍历是否在map 中有 ,如果有的话 所对应的value - 1 + #3 遍历这个map 是否存在value 不为1 的情况 如果存在 返回false + */ + + func isAnagram(_ s: String, _ t: String) -> Bool { + let char_s:[Character] = Array.init(s) + let char_t:[Character] = Array.init(t) + + var map:[Character:Int] = [Character:Int]() + + for char in char_s { + let count = (map[char] ?? 0) + 1 + map[char] = count + } + + for char in char_t { + let count = (map[char] ?? 0) - 1 + map[char] = count + } + + for val in map.values { + if val != 0 { + return false + } + } + + return true + } +} + +class Solution_1 { + + /* + 方法同 方法一 但是可以减少一次for循环 + */ + + func isAnagram(_ s: String, _ t: String) -> Bool { + let char_s:[Character] = Array.init(s) + let char_t:[Character] = Array.init(t) + + if char_s.count != char_t.count { + return false + } + + var map:[Character:Int] = [Character:Int]() + + for i in 0.. ListNode? { + let dummyHead = ListNode.init(-1) + dummyHead.next = head + + var pre = dummyHead + var cur = head + var next = head?.next + + while next != nil { + cur?.next = next?.next + next?.next = cur + pre.next = next + pre = cur! + cur = cur?.next + next = cur?.next + } + return dummyHead.next + } +} + + + +class Solution_1 { + /*: + 方法二 递归的方式去做 交换前面两个 然后后面的子串使用递归的方式继续交换 + */ + func swapPairs(_ head: ListNode?) -> ListNode? { + if head != nil || head?.next != nil { + return head + } + let next = head?.next + head?.next = swapPairs_1(next?.next) + next?.next = head + return next + } +} diff --git a/Week_01/id_29/leetcode_26_29.swift b/Week_01/id_29/leetcode_26_29.swift new file mode 100644 index 00000000..a8401935 --- /dev/null +++ b/Week_01/id_29/leetcode_26_29.swift @@ -0,0 +1,61 @@ +// +// leetcode_26_29.swift +// 极客时间 +// +// Created by gavin hu on 2019/6/23. +// Copyright © 2019 gavin hu. All rights reserved. +// + +import Foundation + + +class Solution { + + /*双指针法.慢指针维护目标排序位置,快指针用于遍历整个原数组.遍历时比较两指针的值,若相同则说明对于当前的 i 位置,快指针经历的 j 位置仍处于重复值,不同则时说明此时 nums[j] 是刚好紧邻且比 nums[i] 大的值,应当写入 nums[i+1] .最后别忘了右移 i.最终的长度比 i 多 1,故返回 i+1 即可. + + # 时间复杂度: O(n) + # 空间复杂度: O(1) +*/ + + func removeDuplicates(_ nums: inout [Int]) -> Int { + if nums.count == 0 || nums.count == 1 { + return nums.count + } + + var i = 0 + for j in 1.. Int { + if nums.count == 0 || nums.count == 1{ + return nums.count + } + var curNum = nums[0] + var index = 1 + while index < nums.count { + if curNum == nums[index] { + nums.remove(at: index) + }else{ + curNum = nums[index] + index += 1 + } + + } + return nums.count + } +} + + diff --git a/Week_01/id_29/leetcode_441_29.swift b/Week_01/id_29/leetcode_441_29.swift new file mode 100644 index 00000000..222bd21f --- /dev/null +++ b/Week_01/id_29/leetcode_441_29.swift @@ -0,0 +1,69 @@ +// +// leetcode_441_29.swift +// 极客时间 +// +// Created by gavin hu on 2019/6/23. +// Copyright © 2019 gavin hu. All rights reserved. +// + +import Foundation + +class Solution { + /* + 方法一 :暴力法 时间复杂度o(n) + */ + func arrangeCoins(_ n: Int) -> Int { + if n <= 1 { + return n + } + var row = 0 + var num = n + while row + 1 <= num { + row += 1 + num -= (row) + } + return row + } +} + + +class Solution1 { + /* + 方法二: 推导数学公式 row*(row+1) = 2n 时间复杂度o(n) + */ + + func arrangeCoins_1(_ n: Int) -> Int { + if n <= 1 { + return n + } + + var row = 1 + while row * (row + 1) <= 2*n { + row += 1 + } + return row - 1 + } +} + +class Solution2 { + /* + 方法三: 二分法 还是运用了 求和公式row*(row+1) = 2n ,但是我们这里在找这个row的时候 不是从1开始遍历 ,因为是有序的 所以我们可以 使用二分查找的方式 在1...n 里面进行查找 极大的提高查找效率 时间复杂度n(logn) + */ + + func arrangeCoins_2(_ n: Int) -> Int { + if n <= 1 { + return n + } + var left = 1 + var height = n + while left < height { + let mid = left + (height - left) / 2 + if mid * (mid + 1) / 2 <= n { + left = mid + 1 + }else{ + height = mid + } + } + return left - 1 + } +} diff --git a/Week_01/id_29/leetcode_49_29.swift b/Week_01/id_29/leetcode_49_29.swift new file mode 100644 index 00000000..736ea5ed --- /dev/null +++ b/Week_01/id_29/leetcode_49_29.swift @@ -0,0 +1,74 @@ +// +// leetcode_49_29.swift +// 极客时间 +// +// Created by gavin hu on 2019/6/23. +// Copyright © 2019 gavin hu. All rights reserved. +// + +import Foundation + +class Solution { + + /* + 方法一: + #1 遍历的时候 对数组里面的字符进行排序 ,并将其放入相应的map 里面 + #2 遍历map 获取它的所有value + 时间复杂度O(n)*O(klog(k)) + */ + + func groupAnagrams(_ strs: [String]) -> [[String]] { + var result:[[String]] = [[String]]() + + var map:[String:[String]] = [String:[String]]() + + for str in strs { + var strChars = Array.init(str) + strChars.sort() + if map[String.init(strChars)] == nil { + map[String.init(strChars)] = [str] + }else{ + map[String.init(strChars)]!.append(str) + } + } + + for val in map.values { + result.append(val) + } + + return result + } +} + +class Solution_1 { + + /* + 方法二: + */ + + func groupAnagrams(_ strs: [String]) -> [[String]] { + var result:[[String]] = [[String]]() + var map:[[Int]:[String]] = [[Int]:[String]]() + + for str in strs { + var num:[Int] = Array .init(repeating: 0, count: 26) + let strChars:[Character] = Array.init(str) + + for char in strChars { + let index = char.toInt() - Character.init("a").toInt() + num[index] = num[index] + 1 + } + + if map[num] == nil { + map[num] = [str] + }else{ + map[num]?.append(str) + } + } + + for val in map.values { + result.append(val) + } + return result + } +} diff --git a/Week_01/id_29/leetcode_50_29.swift b/Week_01/id_29/leetcode_50_29.swift new file mode 100644 index 00000000..ff392a77 --- /dev/null +++ b/Week_01/id_29/leetcode_50_29.swift @@ -0,0 +1,62 @@ +// +// leetcode_50_29.swift +// 极客时间 +// +// Created by gavin hu on 2019/6/23. +// Copyright © 2019 gavin hu. All rights reserved. +// + +import Foundation + + +class Solution { + /* + 方法一 :暴力法 遍历 1 到 n 每次都做 x*x 时间复杂度 O(n) + */ + + func myPow(_ x: Double, _ n: Int) -> Double { + if x == Double(0) { + return 0 + } + + if n == 0 { + return 1 + } + + var res:Double = 1 + let p = n < 0 ? -n : n + + for _ in 1...p { + res = res * x + } + return n > 0 ? res : 1/res + } +} + + +class Solution1 { + /* + 方法二 : 二分法 因为x^n = x^(n/2) * x^(n/2) 这样的话时间复杂度是O(log(n)) + */ + + func myPow_1(_ x: Double, _ n: Int) -> Double { + if x == Double(0) || n == 0 { + return 1 + } + + let p = n < 0 ? -n : n + var res:Double = 1 + + if n == 1 { + return x + } + res = myPow_1(x, p/2) + if p % 2 == 0 { + res = res * res + }else { + res = res * res * x + } + + return n > 0 ? res : 1/res + } +} diff --git a/Week_01/id_29/leetcode_783_29.swift b/Week_01/id_29/leetcode_783_29.swift new file mode 100644 index 00000000..c7eede20 --- /dev/null +++ b/Week_01/id_29/leetcode_783_29.swift @@ -0,0 +1,28 @@ +// +// leetcode_783_29.swift +// 极客时间 +// +// Created by gavin hu on 2019/6/23. +// Copyright © 2019 gavin hu. All rights reserved. +// + +import Foundation + +class Solution { + + func dfs(_ root: TreeNode? ,_ low:Int,_ high:Int , _ res:inout Int) { + if root == nil { return } + if low != Int.min { res = min(res, root!.val - low) } + if high != Int.min { res = min(res, high - root!.val) } + dfs(root?.left,low,root!.val,&res) + dfs(root?.right,root!.val,high,&res) + } + + + func minDiffInBST(_ root: TreeNode?) -> Int { + var res:Int = Int.max + dfs(root, Int.min, Int.max, &res) + return res + } + +} diff --git a/Week_01/id_29/leetcode_84_29.swift b/Week_01/id_29/leetcode_84_29.swift new file mode 100644 index 00000000..478c81c7 --- /dev/null +++ b/Week_01/id_29/leetcode_84_29.swift @@ -0,0 +1,71 @@ +// +// leetcode_84_29.swift +// 极客时间 +// +// Created by gavin hu on 2019/6/23. +// Copyright © 2019 gavin hu. All rights reserved. +// + +import Foundation + + + +class Solution { + + /* + 方法一 :暴力法 我们可以想到,两个柱子间矩形的高由它们之间最矮的柱子决定 因此,我们可以考虑所有两两柱子之间形成的矩形面积,该矩形的高为它们之间最矮柱子的高度,宽为它们之间的距离,这样可以找到所要求的最大面积的矩形。 + + 这个方法 时间复杂度是o(n^2) 空间复杂度 o(1) + + */ + + func largestRectangleArea(_ heights: [Int]) -> Int { + var area = 0 + for index in 0..= 0 && heights[cur - 1] >= heights[index] { + width += 1 + cur -= 1 + } + cur = index + while cur + 1 < heights.count && heights[cur + 1] > heights[index] { + width += 1 + cur += 1 + } + if width * heights[index] > area { + area = width * heights[index] + } + } + return area + } +} + + +class Solution_1 { + + /* + 方法二: + */ + + func largestRectangleArea(_ heights: [Int]) -> Int { + var area = 0 + var stack:[Int] = [Int]() + stack.append(-1) + + for index in 0..= 0 && j >= 0 { + if nums1[i] > nums2[j] { + nums1[k] = nums1[i] + i -= 1 + k -= 1 + }else { + nums1[k] = nums2[j] + k -= 1 + j -= 1 + } + } + + while j >= 0 { + nums1[k] = nums2[j] + k -= 1 + j -= 1 + } + } +} + + +class Solution2 { + /* + 新创建一个数组 空间复杂度O(n) 时间复杂度O(n) + */ + func merge(_ nums1: inout [Int], _ m: Int, _ nums2: [Int], _ n: Int) { + var array = [Int]() + + if n == 0 { + return + } + + var p = 0 ,q = 0 + + while p < m && q < n { + if nums1[p] < nums2[q] { + array.append(nums1[p]) + p += 1 + } else { + array.append(nums2[q]) + q += 1 + } + } + + if m > p { + for i in p.. q { + for i in q.. Int { - if nums.count == 0 || nums.count == 1{ - return nums.count - } - var curNum = nums[0] - var index = 1 - while index < nums.count { - if curNum == nums[index] { - nums.remove(at: index) - }else{ - curNum = nums[index] - index += 1 - } - - } - return nums.count -} - - -/*: - ### 方法二: - - */ -func removeDuplicates_1(_ nums: inout [Int]) -> Int { - - return 0 -} - -var nums = [1,2,3,3,4,4,4,5,5,6] - -let count = removeDuplicates(&nums) -print(nums) -print(count) - diff --git a/Week_01/id_29/week_01_hgy.playground/Pages/Untitled Page.xcplaygroundpage/Contents.swift b/Week_01/id_29/week_01_hgy.playground/Pages/Untitled Page.xcplaygroundpage/Contents.swift deleted file mode 100644 index abd1cf3a..00000000 --- a/Week_01/id_29/week_01_hgy.playground/Pages/Untitled Page.xcplaygroundpage/Contents.swift +++ /dev/null @@ -1,3 +0,0 @@ -import Cocoa - - diff --git a/Week_01/id_29/week_01_hgy.playground/contents.xcplayground b/Week_01/id_29/week_01_hgy.playground/contents.xcplayground deleted file mode 100644 index 8c0fff27..00000000 --- a/Week_01/id_29/week_01_hgy.playground/contents.xcplayground +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file