上一次刷算法已经是两年前了,今年四月份的时候把之前刷的重新过一遍,但毕竟只是 easy 题集,还得按着各个数据结构逐一复习,今天先开始 LeetCode 数组 101 。
485-c1.swift view raw 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 func findMaxConsecutiveOnes (_ nums : [Int ]) -> Int { var maxCount = 0 var currentCount = 0 for number in nums { if number == 1 { currentCount += 1 } else { maxCount = max (currentCount, maxCount) currentCount = 0 } } maxCount = max (currentCount, maxCount) return maxCount }
1295-c2.swift view raw 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 func findNumbers (_ nums : [Int ]) -> Int { var result = 0 for var number in nums { var count = 0 while number != 0 { count += 1 number /= 10 } if count.isMultiple(of: 2 ) { result += 1 } } return result }
977-c3.swift view raw 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 func sortedSquares (_ nums : [Int ]) -> [Int ] { var leftIndex = nums.startIndex var rightIndex = nums.index(before: nums.endIndex) var result = Array (repeating: 0 , count: nums.count) var currentIndex = result.index(before: result.endIndex) while leftIndex <= rightIndex { let lhs = nums[leftIndex] * nums[leftIndex] let rhs = nums[rightIndex] * nums[rightIndex] if lhs > rhs { result[currentIndex] = lhs nums.formIndex(after: & leftIndex) } else { result[currentIndex] = rhs nums.formIndex(before: & rightIndex) } result.formIndex(before: & currentIndex) } return result }
1089-e1.swift view raw 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 func duplicateZeros (_ arr : inout [Int ]) { var fastIndex = arr.index(before: arr.startIndex) var slowIndex = arr.index(before: arr.startIndex) var duplicateLast = false while arr.index(after: fastIndex) < arr.endIndex { arr.formIndex(after: & fastIndex) arr.formIndex(after: & slowIndex) if arr[slowIndex] == 0 { if arr.index(after: fastIndex) == arr.endIndex { duplicateLast = true } else { arr.formIndex(after: & fastIndex) } } } while arr.index(before: fastIndex) >= arr.startIndex { arr[fastIndex] = arr[slowIndex] if arr[slowIndex] == 0 { if duplicateLast { duplicateLast = false } else { arr.formIndex(before: & fastIndex) arr[fastIndex] = 0 } } arr.formIndex(before: & fastIndex) arr.formIndex(before: & slowIndex) } }
88-c3.swift view raw 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 func merge (_ nums1 : inout [Int ], _ m : Int , _ nums2 : [Int ], _ n : Int ) { var indexI = m - 1 var indexJ = n - 1 var indexTail = m + n - 1 while indexI >= nums1.startIndex || indexJ >= nums2.startIndex { if indexI < nums1.startIndex { nums1[indexTail] = nums2[indexJ] nums2.formIndex(before: & indexJ) } else if indexJ < nums2.startIndex { nums1[indexTail] = nums1[indexI] nums1.formIndex(before: & indexI) } else if nums1[indexI] > nums2[indexJ] { nums1[indexTail] = nums1[indexI] nums1.formIndex(before: & indexI) } else { nums1[indexTail] = nums2[indexJ] nums2.formIndex(before: & indexJ) } nums1.formIndex(before: & indexTail) } }
27-e2.swift view raw 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 func removeElement (_ nums : inout [Int ], _ val : Int ) -> Int { var leftIndex = nums.startIndex var rightIndex = nums.index(before: nums.endIndex) while leftIndex < nums.index(after: rightIndex) { if nums[leftIndex] == val { nums[leftIndex] = nums[rightIndex] nums.formIndex(before: & rightIndex) } else { nums.formIndex(after: & leftIndex) } } let distance = nums.distance(from: nums.startIndex, to: rightIndex) return distance + 1 }
26-e1.swift view raw 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 func removeDuplicates (_ nums : inout [Int ]) -> Int { guard nums.count > 1 else { return nums.count } var leftIndex = nums.startIndex for rightIndex in nums.indices.dropFirst() { if nums[leftIndex] != nums[rightIndex] { nums.formIndex(after: & leftIndex) nums[leftIndex] = nums[rightIndex] } } let distance = nums.distance(from: nums.startIndex, to: leftIndex) return distance + 1 }
1346-c3.swift view raw 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 func checkIfExist (_ arr : [Int ]) -> Bool { let counts = arr.reduce(into: [Int: Int ]()) { $0 [$1 , default : 0 ] += 1 } for number in arr { if number != 0 , counts[2 * number, default : 0 ] >= 1 { return true } if number == 0 , counts[2 * number, default : 0 ] >= 2 { return true } } return false }
941-e1.swift view raw 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 func validMountainArray (_ arr : [Int ]) -> Bool { var index = arr.startIndex while arr.index(after: index) < arr.endIndex, arr[index] < arr[arr.index(after: index)] { arr.formIndex(after: & index) } if index == arr.startIndex || index == arr.index(before: arr.endIndex) { return false } while arr.index(after: index) < arr.endIndex, arr[index] > arr[arr.index(after: index)] { arr.formIndex(after: & index) } return index == arr.index(before: arr.endIndex) }
1299-c1.swift view raw 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 func replaceElements (_ arr : [Int ]) -> [Int ] { var result = arr var index = result.index(before: result.endIndex) result[index] = - 1 result.formIndex(before: & index) while index >= result.startIndex { let nextIndex = result.index(after: index) result[index] = max (result[nextIndex], arr[nextIndex]) result.formIndex(before: & index) } return result }
26-e1.swift view raw 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 func removeDuplicates (_ nums : inout [Int ]) -> Int { guard nums.count > 1 else { return nums.count } var leftIndex = nums.startIndex for rightIndex in nums.indices.dropFirst() { if nums[leftIndex] != nums[rightIndex] { nums.formIndex(after: & leftIndex) nums[leftIndex] = nums[rightIndex] } } let distance = nums.distance(from: nums.startIndex, to: leftIndex) return distance + 1 }
283-e1.swift view raw 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 func moveZeroes (_ nums : inout [Int ]) { let count = nums.filter { $0 == 0 }.count nums.removeAll { $0 == 0 } nums.append(contentsOf: Array (repeating: 0 , count: count)) }
283-e3.swift view raw 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 func moveZeroes (_ nums : inout [Int ]) { var leftIndex = nums.startIndex for rightIndex in nums.indices { if nums[rightIndex] != 0 { nums.swapAt(rightIndex, leftIndex) nums.formIndex(after: & leftIndex) } } }
905-s1.swift view raw 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 func sortArrayByParity (_ nums : [Int ]) -> [Int ] { var result = nums var leftIndex = nums.startIndex var rightIndex = nums.index(before: nums.endIndex) for number in nums { if number.isMultiple(of: 2 ) { result[leftIndex] = number result.formIndex(after: & leftIndex) } else { result[rightIndex] = number result.formIndex(before: & rightIndex) } } return result }
27-e2.swift view raw 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 func removeElement (_ nums : inout [Int ], _ val : Int ) -> Int { var leftIndex = nums.startIndex var rightIndex = nums.index(before: nums.endIndex) while leftIndex < nums.index(after: rightIndex) { if nums[leftIndex] == val { nums[leftIndex] = nums[rightIndex] nums.formIndex(before: & rightIndex) } else { nums.formIndex(after: & leftIndex) } } let distance = nums.distance(from: nums.startIndex, to: rightIndex) return distance + 1 }
1051-s1.swift view raw 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 func heightChecker (_ heights : [Int ]) -> Int { var buckets = Array (repeating: 0 , count: 101 ) for height in heights { buckets[height] += 1 } var result = 0 var heightIndex = heights.startIndex for bucketIndex in buckets.indices.dropFirst() { while buckets[bucketIndex] > 0 { if heights[heightIndex] != bucketIndex { result += 1 } heights.formIndex(after: & heightIndex) buckets[bucketIndex] -= 1 } } return result }
414-s1.swift view raw 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 func thirdMax (_ nums : [Int ]) -> Int { var counts: [Int ] = [] for number in nums { if counts.firstIndex(of: number) != nil { continue } if let index = counts.firstIndex(where: { $0 > number }) { counts.insert(number, at: index) } else { counts.append(number) } if counts.count > 3 { counts.removeFirst() } } return counts.count < 3 ? counts.last! : counts.first! }
448-c1.swift view raw 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 func findDisappearedNumbers (_ nums : [Int ]) -> [Int ] { var numbers = nums for number in numbers { let index = number - 1 numbers[index] += nums.count } var result: [Int ] = [] for index in numbers.indices { if numbers[index] <= nums.count { result.append(index + 1 ) } } return result }
977-c3.swift view raw 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 func sortedSquares (_ nums : [Int ]) -> [Int ] { var leftIndex = nums.startIndex var rightIndex = nums.index(before: nums.endIndex) var result = Array (repeating: 0 , count: nums.count) var currentIndex = result.index(before: result.endIndex) while leftIndex <= rightIndex { let lhs = nums[leftIndex] * nums[leftIndex] let rhs = nums[rightIndex] * nums[rightIndex] if lhs > rhs { result[currentIndex] = lhs nums.formIndex(after: & leftIndex) } else { result[currentIndex] = rhs nums.formIndex(before: & rightIndex) } result.formIndex(before: & currentIndex) } return result }