LeetCodeに毎日挑戦してみた 53. Maximum Subarray(Python、Go)
はじめに
無料英単語サイトE-tanを運営中の@ishishowです。
プログラマとしての能力を上げるために毎日leetcodeに取り組み、自分なりの解き方を挙げていきたいと思います。
Leetcodeとは
leetcode.com
ソフトウェア開発職のコーディング面接の練習といえばこれらしいです。
合計1500問以上のコーデイング問題が投稿されていて、実際の面接でも同じ問題が出されることは多いらしいとのことです。
golang入門+アルゴリズム脳の強化のためにgoとPythonで解いていこうと思います。(Pythonは弱弱だが経験あり)
12問目(問題53)
53. Maximum Subarray
問題内容
Given an integer array
nums
, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.Follow up: If you have figured out the
O(n)
solution, try coding another solution using the divide and conquer approach, which is more subtle.(日本語訳)
整数配列が与えられた場合
nums
、合計が最大である連続するサブ配列(少なくとも1つの数値を含む)を見つけて、その合計を返します。フォローアップ:
O(n)
解決策 を見つけた場合は、分割統治法を使用して別の解決策をコーディングしてみてください。これはより微妙です。
Example 1:
Input: nums = [-2,1,-3,4,-1,2,1,-5,4]
Output: 6
Explanation: [4,-1,2,1] has the largest sum = 6.
Example 2:
Input: nums = [1]
Output: 1
Example 3:
Input: nums = [0]
Output: 0
Example 4:
Input: nums = [-1]
Output: -1
Example 5:
Input: nums = [-2147483647]
Output: -2147483647
Constraints:
1 <= nums.length <= 2 * 104
-231 <= nums[i] <= 231 - 1
考え方
配列の一つ前の数字が正か負か判断する
もし正なら、現在の数字にその数字を足す、負ならそのまま
ループ後に変更した配列の中で一番大きい数字を戻り値として返す
- 解答コード
for i in range(1, len(nums)):
if nums[i-1] > 0:
nums[i] += nums[i-1]
return max(nums)
- Goでも書いてみます!
func maxSubArray(nums []int) int {
for i:=1; i<len(nums); i++{
if nums[i-1] > 0 {
nums[i] += nums[i-1]
}
}
return max_num(nums)
}
func max_num(nums []int) int {
max := nums[0]
for _, num:= range nums {
if max < num {
max = num
}
}
return max
}
Author And Source
この問題について(LeetCodeに毎日挑戦してみた 53. Maximum Subarray(Python、Go)), 我々は、より多くの情報をここで見つけました https://qiita.com/ishishow/items/03772aa01744fdcc22f5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .