Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions Week_01/id_31/LeetCode_21_031.swift
Original file line number Diff line number Diff line change
@@ -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
}
}
37 changes: 37 additions & 0 deletions Week_01/id_31/LeetCode_24_031.swift
Original file line number Diff line number Diff line change
@@ -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
}
}
68 changes: 68 additions & 0 deletions Week_01/id_31/LeetCode_83_031.swift
Original file line number Diff line number Diff line change
@@ -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
}
}
41 changes: 41 additions & 0 deletions Week_01/id_31/LeetCode_905_031.swift
Original file line number Diff line number Diff line change
@@ -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 }
}
}
24 changes: 24 additions & 0 deletions Week_01/id_31/LeetCode_922_031.swift
Original file line number Diff line number Diff line change
@@ -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..<even.count {
result.append(even[i])
result.append(odd[i])
}
return result
}
}