-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsquares_of_a_sorted_array.go
95 lines (81 loc) · 1.77 KB
/
squares_of_a_sorted_array.go
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
92
93
94
95
package array
import "fmt"
func SortedSquaresFirst(nums []int) []int {
var negatives []int
pointer := 0
for _, v := range nums {
squared := v * v
if v < 1 {
negatives = append([]int{squared}, negatives...)
} else {
for pointer < len(negatives) && squared > negatives[pointer] {
pointer += 1
}
negatives = append(negatives[:pointer], append([]int{squared}, negatives[pointer:]...)...)
pointer += 1
}
}
return negatives
}
func SortedSquares3(nums []int) []int {
result := make([]int, len(nums))
startPointer := 0
endPointer := len(nums) - 1
filled := len(result) - 1
for endPointer >= len(nums)/2 && startPointer <= len(nums)/2 {
startSqueared := nums[startPointer] * nums[startPointer]
endSqueared := nums[endPointer] * nums[endPointer]
if endPointer == startPointer {
result[filled] = startSqueared
} else if startSqueared >= endSqueared {
result[filled] = startSqueared
filled -= 1
result[filled] = endSqueared
filled -= 1
} else {
result[filled] = endSqueared
filled -= 1
result[filled] = startSqueared
filled -= 1
}
endPointer -= 1
startPointer += 1
}
return result
}
func sortedSquares(nums []int) []int {
i := len(nums) - 1
result := make([]int, len(nums))
left := 0
right := i
for i >= 0 {
rightValue := nums[right] * nums[right]
leftValue := nums[left] * nums[left]
if leftValue > rightValue {
result[i] = leftValue
left += 1
i -= 1
} else {
result[i] = rightValue
right -= 1
i -= 1
}
}
return result
}
func SquaresOfASortedArray(nums []int) []int {
s := 0
e := len(nums) - 1
r := make([]int, len(nums))
for s <= e {
if nums[s]*nums[s] < nums[e]*nums[e] {
r[e] = nums[s] * nums[s]
s++
} else {
r[s] = nums[e] * nums[e]
e--
}
}
fmt.Println(r)
return r
}