-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFindAllTriplets.swift
More file actions
91 lines (64 loc) · 2.01 KB
/
FindAllTriplets.swift
File metadata and controls
91 lines (64 loc) · 2.01 KB
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
//
// FindAllTriplets.swift
// Test
//
// Created by Héctor Flores on 7/3/19.
// Copyright © 2019 Héctor Flores. All rights reserved.
//
import Foundation
public func getPairs(theList list: [Int],theValue value:Int,_ val:Int,_ actual:[Int]) -> [[Int]] {
var mylistOfPairs = [[Int]]()
var left = 0, right = list.count - 1
var count = 0
while left < right {
let sum = list[right] + list[left]
if sum == value{
let auxList = [actual[left+val],actual[right+val],actual[val-1]]
mylistOfPairs.append(auxList)
break;
count += 1
right -= 1
left += 1
}else if(sum > value){
right -= 1
}else{
left += 1
}
}
return mylistOfPairs
}
public func getTriplets(theList list: inout [Int], theValue value: Int) -> [[Int]]{
if list.count < 4 {
if list.count == 3 && (list[0] + list[1] + list[2]) == 0{
return [list]
}else{
return []
}
}
list.sort()
var listOfLists : [[Int]] = []
let range = list[0...list.count-3]
var emptyDict: [[Int]: Bool] = [:]
for (a,b) in range.enumerated() {
let rest = value - b
let sublist = Array(list[a+1...list.count-1])
var left = 0, right = sublist.count - 1
while left < right {
let sum = sublist[right] + sublist[left]
if sum == rest{
let auxList = [list[left+a+1],list[right+a+1],list[a]]
if emptyDict[auxList] == nil {
emptyDict.updateValue(true, forKey: auxList)
listOfLists.append(auxList)
}
right -= 1
left += 1
}else if(sum > rest){
right -= 1
}else{
left += 1
}
}
}
return listOfLists
}