在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ Given a string Return any permutation
Example 1: Input: [0,4,1,3,2]
Example 2: Input: [0,1,2,3]
Example 3: Input: [3,2,0,1]
Note:
给定只含 返回
示例 1: 输出:"IDID" 输出:[0,4,1,3,2] 示例 2: 输出:"III" 输出:[0,1,2,3] 示例 3: 输出:"DDI" 输出:[3,2,0,1] 提示:
68ms 1 class Solution { 2 func diStringMatch(_ S: String) -> [Int] { 3 let N = S.count 4 var min = 0 5 var max = N 6 7 var res : [Int] = [] 8 9 for c in S { 10 if c == "I" { 11 res.append(min) 12 min += 1 13 } else if c == "D" { 14 res.append(max) 15 max -= 1 16 } 17 } 18 assert(min == max); 19 res.append(min) 20 21 return res 22 } 23 } 84ms 1 class Solution { 2 func diStringMatch(_ S: String) -> [Int] { 3 let array = Array(0...S.count) 4 5 var left = 0 6 var right = S.count 7 8 var result = [Int]() 9 for char in S { 10 if char == "I" { 11 result.append(array[left]) 12 left += 1 13 } else if char == "D" { 14 result.append(array[right]) 15 right -= 1 16 } 17 } 18 result.append(array[left]) 19 20 return result 21 } 22 } 88ms 1 class Solution { 2 func diStringMatch(_ S: String) -> [Int] { 3 4 var out:[Int] = [] 5 6 var i = 0 7 var d = S.count 8 9 for c in S { 10 11 if c == "I" { 12 13 out.append(i) 14 i += 1 15 16 } else { 17 out.append(d) 18 d -= 1 19 } 20 21 } 22 23 if S.last! == "I" { 24 out.append(i) 25 i += 1 26 } else { 27 out.append(d) 28 d -= 1 29 } 30 31 return out 32 } 33 } 120ms 1 class Solution { 2 func diStringMatch(_ S: String) -> [Int] { 3 var arr:[Int] = [] 4 var min = -1, max = S.count + 1 5 for c in S { 6 if c == "I" { 7 min+=1 8 arr.append(min) 9 } else { 10 max-=1 11 arr.append(max) 12 } 13 } 14 arr.append(min+1) 15 return arr 16 } 17 } 312ms 1 class Solution { 2 3 struct HeapElement { 4 let idx: Int 5 let value: Int 6 init(_ idx: Int, _ value: Int) { 7 self.idx = idx 8 self.value = value 9 } 10 } 11 12 func diStringMatch(_ S: String) -> [Int] { 13 let N = S.count 14 var heap: [HeapElement] = [HeapElement(0,0)] 15 var prevValue = 0 16 var idx = 1 17 for ch in S { 18 if ch == "I" { 19 prevValue += 1 20 } else { 21 prevValue -= 1 22 } 23 heap.append(HeapElement(idx, prevValue)) 24 var curInd = heap.count - 1 25 while heap[curInd].value < heap[(curInd - 1) / 2].value && curInd > 0 { 26 let parentInd = (curInd - 1) / 2 27 heap.swapAt(curInd, parentInd) 28 curInd = parentInd 29 } 30 idx += 1 31 } 32 33 var result: [Int] = Array(repeating: 0, count: N + 1) 34 prevValue = 0 35 while !heap.isEmpty { 36 heap.swapAt(0, heap.count - 1) 37 let element = heap.removeLast() 38 result[element.idx] = prevValue 39 prevValue += 1 40 var curInd = 0 41 while (2*curInd + 1 < heap.count && heap[curInd].value > heap[2*curInd + 1].value) || 42 (2*curInd + 2 < heap.count && heap[curInd].value > heap[2*curInd + 2].value) { 43 var childInd = 2*curInd + 1 44 if 2*curInd + 2 < heap.count { 45 if heap[childInd].value > heap[2*curInd + 2].value { 46 childInd = 2*curInd + 2 47 } 48 } 49 heap.swapAt(curInd, childInd) 50 curInd = childInd 51 } 52 } 53 return result 54 } 55 } 2096ms 1 class Solution { 2 func diStringMatch(_ S: String) -> [Int] { 3 var n:Int = S.count + 1 4 var ret:[Int] = [Int](repeating: 0,count: n) 5 var v:Int = n - 1 6 var pre:Int = 0 7 for i in 0..<(n - 1) 8 { 9 if S[i] == "D" 10 { 11 for j in (pre...i).reversed() 12 { 13 ret[j] = v 14 v -= 1 15 } 16 pre = i + 1 17 } 18 } 19 for j in (pre...(n - 1)).reversed() 20 { 21 ret[j] = v 22 v -= 1 23 } 24 return ret 25 } 26 } 27 28 extension String { 29 //subscript函数可以检索数组中的值 30 //直接按照索引方式截取指定索引的字符 31 subscript (_ i: Int) -> Character { 32 //读取字符 33 get {return self[index(startIndex, offsetBy: i)]} 34 } 35 }
|
请发表评论