It seems that coding tests are conducted overseas in interviews with engineers, and in many cases, the main thing is to implement specific functions and classes according to the theme.
As a countermeasure, it seems that a site called Let Code will take measures.
A site that trains algorithmic power that can withstand coding tests that are often done in the home.
I think it's better to have the algorithm power of a human being, so I'll solve the problem irregularly and write down the method I thought at that time as a memo.
Leet Code Table of Contents Starting from Zero
Last time Leet Code Day 17 "169. Majority Element" starting from zero
Basically, I would like to solve the easy acceptance in descending order.
The difficulty level is easy. One of the Top 100 Liked Questions.
Given an array of integers only nums
.
The problem is to find a sub-array in that array that has a maximum sum that contains at least one number, and return that sum.
Input: [-2,1,-3,4,-1,2,1,-5,4], Output: 6
For example, if you add all the consecutive elements from nums [3]
to nums [6]
, you get 4 + (-1) + 2 + 1 = 6, which is the maximum value in the array. It will be a calculation.
I'm a Zub amateur about dynamic programming, but I happened to read it. [Data Structures and Algorithms (New Information and Communication Systems Engineering) (Japanese)](https://www.amazon.co.jp/%E3%83%87%E3%83%BC%E3%82%BF% E6% A7% 8B% E9% 80% A0% E3% 81% A8% E3% 82% A2% E3% 83% AB% E3% 82% B4% E3% 83% AA% E3% 82% BA% E3% 83% A0-% E6% 96% B0% E3% 83% BB% E6% 83% 85% E5% A0% B1-% E9% 80% 9A% E4% BF% A1% E3% 82% B7% E3% 82% B9% E3% 83% 86% E3% 83% A0% E5% B7% A5% E5% AD% A6-% E4% BA% 94% E5% 8D% 81% E5% B5% 90-% E5% 81% A5% E5% A4% AB / dp / 4901683497) [Organize typical DP (Dynamic Programming) patterns Part 1 ~ Knapsack DP ~](https://qiita.com/drken/items/a5e6fe22863b7992efdb#3-%E9%83%A8%E5%88 % 86% E5% 92% 8C% E5% 95% 8F% E9% A1% 8C% E3% 81% A8% E3% 81% 9D% E3% 81% AE% E5% BF% 9C% E7% 94% A8 % E3% 81% 9F% E3% 81% A1) Well, it doesn't look like it can be solved! ?? I thought, so I thought about it while referring to it.
First, prepare the maximum value max_num
and the temporary variable temp
.
Substitute the elements of the array so that they are licked from the beginning. If temp
is 0 or more, compare it with max_num
and temp
, and the larger one is assigned to max_num
, otherwise 0 is assigned to temp
. If you try to write such a flow, it will be as follows.
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
temp = 0
max_num = max(nums)
for i in range(len(nums)):
temp += nums[i]
if temp >= 0:
max_num = max(max_num,temp)
else:
temp = 0
return max_num
# Runtime: 60 ms, faster than 93.50% of Python3 online submissions for Maximum Subarray.
# Memory Usage: 14.5 MB, less than 5.69% of Python3 online submissions for Maximum Subarray.
I didn't read much because there was an image that dynamic programming was difficult to understand, but when I wrote it, it seems that memory can be made more efficient and faster, so it seems better to study hard.
If there is a good answer, I will add it.
Recommended Posts