diff --git a/lib/max_subarray.rb b/lib/max_subarray.rb index 5204edb..60f04e2 100644 --- a/lib/max_subarray.rb +++ b/lib/max_subarray.rb @@ -1,8 +1,31 @@ - -# Time Complexity: ? -# Space Complexity: ? +# Time Complexity: o(n) +# Space Complexity: o(1) def max_sub_array(nums) return 0 if nums == nil - - raise NotImplementedError, "Method not implemented yet!" -end + return nil if nums.empty? + return nums[0] if nums.length == 1 + + max_so_far = nums.min + max_ending_here = 0 + + index = 0 + pointer2 = 1 + while index <= nums.length - 1 || pointer2 <= nums.length - 1 + max_ending_here = max_ending_here + nums[index] + if max_ending_here > max_so_far + max_so_far = max_ending_here + index += 1 + else + max_ending_here = 0 + max_ending_here = max_ending_here + nums[pointer2] + pointer2 += 1 + index = pointer2 + end + end + + if max_so_far < max_ending_here + max_so_far = max_ending_here + end + + return max_so_far +end \ No newline at end of file diff --git a/lib/newman_conway.rb b/lib/newman_conway.rb index 4c985cd..bbf262c 100644 --- a/lib/newman_conway.rb +++ b/lib/newman_conway.rb @@ -1,7 +1,20 @@ +# Time complexity: o(n) +# Space Complexity: o(1) +def newman_conway(num) + raise ArgumentError if num == 0 + return "1" if num == 1 + return "1 1" if num == 2 + array = [0,1,1] + string = "" -# Time complexity: ? -# Space Complexity: ? -def newman_conway(num) - raise NotImplementedError, "newman_conway isn't implemented" + (3..num).each do |i| + array.push(array[array[i - 1]] + array[i - array[i - 1]]) + end + + (1..array.length - 1).each do |i| + array.length - 1 == i ? string << "#{array[i]}" : string << "#{array[i]} " + end + + return string 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..d9655f6 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] @@ -25,7 +25,7 @@ it "will work with a totally negative array with the largest element at the rear" do # Arrange - input = [ -4, -5, -6, -7, -3] + input = [-4, -5, -6, -7, -3] # Act answer = max_sub_array(input) @@ -46,14 +46,14 @@ end it "will return nil for an empty array" do - # Arrange - input = [] + # Arrange + input = [] - # Act - answer = max_sub_array(input) + # Act + answer = max_sub_array(input) - # Assert - expect(answer).must_be_nil + # Assert + expect(answer).must_be_nil end it "will work for [50, -50, 50]" do