diff --git a/lib/max_subarray.rb b/lib/max_subarray.rb index 5204edb..0ae1e03 100644 --- a/lib/max_subarray.rb +++ b/lib/max_subarray.rb @@ -1,8 +1,17 @@ -# Time Complexity: ? -# Space Complexity: ? +# Time Complexity: O(n) where n is the number of items in the array +# Space Complexity: O(1) def max_sub_array(nums) - return 0 if nums == nil - - raise NotImplementedError, "Method not implemented yet!" + return 0 if nums == nil + return nil if nums.length == 0 + max_sum = nums[0] + sum = 0 + + nums.length.times do |i| + sum = [nums[i], sum + nums[i]].max + if sum > max_sum + max_sum = sum + end + end + return max_sum end diff --git a/lib/newman_conway.rb b/lib/newman_conway.rb index 4c985cd..7a11672 100644 --- a/lib/newman_conway.rb +++ b/lib/newman_conway.rb @@ -1,7 +1,32 @@ -# Time complexity: ? -# Space Complexity: ? +# Time complexity: O(n), where n is the input number +# Space Complexity: O(n), where n is the input number def newman_conway(num) - raise NotImplementedError, "newman_conway isn't implemented" + raise ArgumentError, "input must be greater than 0" if num < 1 + + storage_hash = { + 1 => 1, + 2 => 1 + } + + results = [] + if num <= 2 + num.times do |i| + results.push(storage_hash[i + 1]) + end + else + 2.times do |i| + results.push(storage_hash[i + 1]) + end + end + n = 3 + while n <= num + prev = storage_hash[n - 1] + storage_hash[n] = storage_hash[prev] + storage_hash[n - prev] + results.push "#{storage_hash[n]}" + n += 1 + end + + return results.join(" ") end \ No newline at end of file diff --git a/test/max_sub_array_test.rb b/test/max_sub_array_test.rb index 3253cdf..e27e1ca 100644 --- a/test/max_sub_array_test.rb +++ b/test/max_sub_array_test.rb @@ -1,6 +1,6 @@ require_relative "test_helper" -xdescribe "max subarray" do +describe "max subarray" do it "will work for [-2,1,-3,4,-1,2,1,-5,4]" do # Arrange input = [-2,1,-3,4,-1,2,1,-5,4]