高度なプログラミング技術(Python)ジョブ12
4813 ワード
LeetCode 11.最大水を盛る容器は、n個の非負の整数a 1,a 2,...,anを与え、各数は座標の1つの点(i,ai)を表す.垂直線iの2つの端点がそれぞれ(i,ai)と(i,0)になるようにn本の垂直線を引く.x軸と共に構成された容器が最も多くの水を収容できるように、その中の2本の線を探し出す.
注意:容器を傾けてはいけません.nは少なくとも2です.
Solution:
考え方:面積は高さの小さい端点に依存するので、両端から高さを取り、毎回小さい高さに距離を乗じて面積を計算し、前の最大面積と比較して最大面積を保存し、小さい端点は中間に2つの端点が重なるまで移動します.
62.異なる経路のロボットがm x nメッシュの左上隅に位置する(開始点は下図で「Start」と表記される).
ロボットは毎回、下または右に1歩しか移動できません.ロボットはメッシュの右下隅に到達しようとします(下図では「Finish」と表記されています).
全部で何本の違う経路がありますか?
説明:mとnの値はいずれも100を超えない.例1:
例2:
Solution:
考え方:再帰計算階乗を用いて,その後組合せ数を用いて問題を解決する.配列を使用して階乗結果を保存して最適化できます.本題のデータは小さく、使用しなくてもいいです.
217.所定の整数配列が重複して存在し、重複要素が存在するか否かを判定する.
任意の値が配列に少なくとも2回現れる場合は、関数はtrueを返します.各要素が異なる場合はfalseを返します.
Solution:
考え方:set関数を使用してリスト内の重複要素を削除し、前後のリスト長が同じかどうかを比較します.私は最初pythonを使ってhash表を書いて繰り返し要素を判断し、提出して合格したが、時間がかかりすぎて、後で他の人のコードを見て、setがこのような問題を解決できることを発見したが、pythonのsetの実現は実はhash表を通じて実現した.
注意:容器を傾けてはいけません.nは少なくとも2です.
Solution:
class Solution:
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
maxSpace = 0
i = 0
j = len(height) - 1
while(i <= j):
length = j - i
if (height[i] < height[j]):
h = height[i]
i += 1
else:
h = height[j]
j -= 1
maxSpace = maxSpace if maxSpace > h * length else h * length
return maxSpace
考え方:面積は高さの小さい端点に依存するので、両端から高さを取り、毎回小さい高さに距離を乗じて面積を計算し、前の最大面積と比較して最大面積を保存し、小さい端点は中間に2つの端点が重なるまで移動します.
62.異なる経路のロボットがm x nメッシュの左上隅に位置する(開始点は下図で「Start」と表記される).
ロボットは毎回、下または右に1歩しか移動できません.ロボットはメッシュの右下隅に到達しようとします(下図では「Finish」と表記されています).
全部で何本の違う経路がありますか?
説明:mとnの値はいずれも100を超えない.例1:
: m = 3, n = 2
: 3
:
, 3 。
1. -> ->
2. -> ->
3. -> ->
例2:
: m = 7, n = 3
: 28
Solution:
class Solution:
def factorial(self, num):
if (num == 1 or num == 0):
return 1
else:
return num * self.factorial(num-1)
def uniquePaths(self, m, n):
"""
:type m: int
:type n: int
:rtype: int
"""
x = min(m, n) - 1
y = m + n - 2
return int(self.factorial(y) / (self.factorial(x) * self.factorial(y - x)))
考え方:再帰計算階乗を用いて,その後組合せ数を用いて問題を解決する.配列を使用して階乗結果を保存して最適化できます.本題のデータは小さく、使用しなくてもいいです.
217.所定の整数配列が重複して存在し、重複要素が存在するか否かを判定する.
任意の値が配列に少なくとも2回現れる場合は、関数はtrueを返します.各要素が異なる場合はfalseを返します.
Solution:
class Solution:
def containsDuplicate(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
if(len(nums) > 0):
if (len(nums) != len(set(nums))):
return True
else:
return False
return False
考え方:set関数を使用してリスト内の重複要素を削除し、前後のリスト長が同じかどうかを比較します.私は最初pythonを使ってhash表を書いて繰り返し要素を判断し、提出して合格したが、時間がかかりすぎて、後で他の人のコードを見て、setがこのような問題を解決できることを発見したが、pythonのsetの実現は実はhash表を通じて実現した.