Mercurial > lbo > hg > juliaplay
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