diff --git a/Week_01/id_31/LeetCode_21_031.swift b/Week_01/id_31/LeetCode_21_031.swift new file mode 100644 index 00000000..637afa82 --- /dev/null +++ b/Week_01/id_31/LeetCode_21_031.swift @@ -0,0 +1,71 @@ +// +// LeetCode_21_031.swift +// TestCoding +// +// Created by 龚欢 on 2019/4/15. +// Copyright © 2019 龚欢. All rights reserved. +// + +import Foundation + +// 时间复杂度O(n) ; n为maxCount(l1.count, l2.count) +class Solution { + func mergeTwoLists(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? { + var result: [Int] = [] + + let a1 = converToArryFrom(l1) + let a2 = converToArryFrom(l2) + + var i = 0 + var j = 0 + + while true { + if (i >= a1.count || j >= a2.count) { + if (j <= a2.count - 1) { result = result + a2[j...a2.count - 1] } + if (i <= a1.count - 1) { result = result + a1[i...a1.count - 1] } + break; + } + + if (a1[i] == a2[j]) { + result.append(a1[i]) + result.append(a2[j]) + i += 1 + j += 1 + } else if ((a1[i] < a2[j])) { + result.append(a1[i]) + i += 1 + } else { + result.append(a2[j]) + j += 1 + } + } + return convertToNodeFrom(result) + } + + private func converToArryFrom(_ node: ListNode?) -> [Int] { + var resultArr: [Int] = [] + guard let _ = node else { return resultArr } + var currentNode = node + while let current = currentNode { + resultArr.append(current.val) + currentNode = currentNode?.next + } + return resultArr + } + + private func convertToNodeFrom(_ arr: [Int]) -> ListNode? { + guard arr.count > 0 else { return nil } + var result: ListNode? + var resultHeader: ListNode? + for v in arr { + if result == nil { + result = ListNode(v) + resultHeader = result + } else { + result?.next = ListNode(v) + result = result?.next + } + } + return resultHeader + } +} diff --git a/Week_01/id_31/LeetCode_24_031.swift b/Week_01/id_31/LeetCode_24_031.swift new file mode 100644 index 00000000..6b6ce5f7 --- /dev/null +++ b/Week_01/id_31/LeetCode_24_031.swift @@ -0,0 +1,37 @@ +// +// LeetCode_24_031.swift +// TestCoding +// +// Created by 龚欢 on 2019/4/15. +// Copyright © 2019 龚欢. All rights reserved. +// + +import Foundation + +// 时间复杂度O(n) +class Solution { + var stack: [Int] = [] + func swapPairs(_ head: ListNode?) -> ListNode? { + guard let h = head else { return nil } + + var currentNode: ListNode? = head + var dump: ListNode? = ListNode(h.val) + let resultHeader: ListNode? = dump + + while let current = currentNode { + if (stack.count == 0) { + stack.append(current.val) + } else { + let willPopNodeValue = stack.removeFirst() + dump?.next = ListNode(current.val) + dump = dump?.next + dump?.next = ListNode(willPopNodeValue) + dump = dump?.next + } + currentNode = currentNode?.next + } + if (stack.count > 0) { dump?.next = ListNode(stack[0])} + + return resultHeader?.next + } +} diff --git a/Week_01/id_31/LeetCode_83_031.swift b/Week_01/id_31/LeetCode_83_031.swift new file mode 100644 index 00000000..63f7778e --- /dev/null +++ b/Week_01/id_31/LeetCode_83_031.swift @@ -0,0 +1,68 @@ +// +// LeetCode_83_031.swift +// TestCoding +// +// Created by 龚欢 on 2019/4/15. +// Copyright © 2019 龚欢. All rights reserved. +// + +import Foundation + +// 解法1:时间复杂度O(n), 空间复杂度O(Node中不同的value的结点个数) +class Solution { + var temp: [Int] = [] + func deleteDuplicates(_ head: ListNode?) -> ListNode? { + guard let _ = head else { return nil } + var currentNode: ListNode? = head + var preNode: ListNode? = nil + var result: ListNode? + var resultHeader: ListNode? + while let current = currentNode { + if (temp.contains(current.val)) { + preNode?.next = currentNode?.next + } else { + if (result == nil) { + result = ListNode(current.val) + resultHeader = result + } else { + result?.next = ListNode(current.val) + result = result?.next + } + temp.append(current.val) + } + preNode = currentNode + currentNode = currentNode?.next + } + return resultHeader + } +} + +// 解法2:时间复杂度O(2n), 空间复杂度O(Node中不同的value的结点个数) +class Solution { + var temp: [Int] = [] + func deleteDuplicates(_ head: ListNode?) -> ListNode? { + guard let _ = head else { return nil } + var currentNode: ListNode? = head + while let current = currentNode { + if (!temp.contains(current.val)) { temp.append(current.val) } + currentNode = currentNode?.next + } + return convertToNodeFrom(temp) + } + + private func convertToNodeFrom(_ arr: [Int]) -> ListNode? { + guard arr.count > 0 else { return nil } + var result: ListNode? + var resultHeader: ListNode? + for v in temp { + if result == nil { + result = ListNode(v) + resultHeader = result + } else { + result?.next = ListNode(v) + result = result?.next + } + } + return resultHeader + } +} diff --git a/Week_01/id_31/LeetCode_905_031.swift b/Week_01/id_31/LeetCode_905_031.swift new file mode 100644 index 00000000..1881c1da --- /dev/null +++ b/Week_01/id_31/LeetCode_905_031.swift @@ -0,0 +1,41 @@ +// +// LeetCode_905_031.swift +// TestCoding +// +// Created by 龚欢 on 2019/4/15. +// Copyright © 2019 龚欢. All rights reserved. +// + +import Foundation + +// 时间复杂度 O(n) +// 方法 1 +class Solution { + func sortArrayByParity(_ A: [Int]) -> [Int] { + guard A.count > 0 else { return [] } + var tempA = A + var i = 0 + var j = tempA.count - 1 + while i <= j { + if (tempA[i] % 2 == 0) { + i += 1 + } else { + if (tempA[j] % 2 == 0) { + tempA.swapAt(i, j) + j -= 1 + i += 1 + } else { + j -= 1 + } + } + } + return tempA + } +} + +// 方法 2 +class Solution { + func sortArrayByParity(_ A: [Int]) -> [Int] { + return A.filter { $0 % 2 == 0 } + A.filter { $0 % 2 != 0 } + } +} diff --git a/Week_01/id_31/LeetCode_922_031.swift b/Week_01/id_31/LeetCode_922_031.swift new file mode 100644 index 00000000..fe0e4286 --- /dev/null +++ b/Week_01/id_31/LeetCode_922_031.swift @@ -0,0 +1,24 @@ +// +// LeetCode_922_031.swift +// TestCoding +// +// Created by 龚欢 on 2019/4/15. +// Copyright © 2019 龚欢. All rights reserved. +// + +import Foundation + +// 时间复杂度: O(n/2) 空间复杂度:O(n) +class Solution { + func sortArrayByParityII(_ A: [Int]) -> [Int] { + guard A.count > 0 else { return [] } + var result: [Int] = [] + let even = A.filter { $0 % 2 == 0 } + let odd = A.filter { $0 % 2 != 0 } + for i in 0..