changeset 13:55c9d0026123

Some more array exercises
author Lewin Bormann <lbo@spheniscida.de>
date Fri, 24 Feb 2023 23:30:45 +0100
parents cb419167dcb3
children c6bc1d41657c
files julia/arrays.jl
diffstat 1 files changed, 63 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/julia/arrays.jl	Mon Feb 20 23:12:58 2023 +0100
+++ b/julia/arrays.jl	Fri Feb 24 23:30:45 2023 +0100
@@ -289,3 +289,66 @@
     end
     L
 end
+
+function max_stock_profit(prices::AbstractArray{<:Real})::Real
+    start = prices[1]
+    i = 2
+    profit = 0
+    while i <= length(prices)
+        if prices[i] >= prices[i-1]
+            i += 1
+        else
+            profit += prices[i-1] - start
+            start = prices[i]
+            i += 1
+        end
+    end
+    profit += prices[end] - start
+    profit
+end
+
+function sort_swapped(a::AbstractArray)
+    count = 0
+    first, second = 0, 0
+    for i = eachindex(a)
+        if i <= 1
+            continue
+        end
+        if count == 0
+            if a[i] < a[i-1]
+                first = i-1
+                count += 1
+            end
+        else
+            if a[i] < a[i-1]
+                second = i
+                count += 1
+                break
+            end
+        end
+    end
+    if second == 0
+        second = first+1
+    end
+    a[first], a[second] = a[second], a[first]
+    a
+end
+
+function max_sum_subarray(a::AbstractArray)
+
+    max_encountered = -10000
+    current_sum = 0
+    lo, hi = 1, length(a)
+
+    for (i, e) = enumerate(a)
+        if e > current_sum+e
+            lo = i
+        end
+        current_sum = max(current_sum+e, e)
+        if current_sum >= max_encountered
+            hi = i
+        end
+        max_encountered = max(max_encountered, current_sum)
+    end
+    max_encountered
+end