853車種
中
Nの車は1車線の道路に沿って同じ目的地に行くされています。先が離れてターゲットマイルです。
各車私は道路に沿ってターゲットに向けて[I](毎時マイル)定速速度を有し、初期位置の位置[i]のマイル。
車は前方のそれの別の車を渡すことはできませんが、それはそれに追いつくと、同じ速度でバンパーためにバンパーを駆動することができます。
これら2台の車の間の距離は無視されます - 彼らは同じ位置を有すると仮定されています。
車の艦隊は、同じ位置と同じ速度で駆動車のいくつかの非空集合です。単一車はまた車の艦隊であることに注意してください。
車が正しい宛先ポイントで車の艦隊に追いつく場合、それはまだ一台の車の艦隊とみなされます。
どのように多くの車艦隊は、目的地に到着しますか?
効果の件名:高速道路上の異なる場所から車の一連の、それぞれ異なる速度、同じ方向から同じエンドポイントに、彼らはオーバーテイクすることはできませんが、前に一度だけ会って、車の艦隊を配置し、そして最後に到達するように求めどのように多くの車の艦隊。
ソリューションの概要は:所望のエンドポイントに、各車両の時間を算出する、長い時間が車フリートなり、短時間によりブロックされます。pythonの問題を解決するには、次の試み。
class Solution:
def carFleet(self, target: int, pos: List[int], speed: List[int]) -> int:
#corner case handle
if len(pos) != len(speed) or len(pos) == 0 :
return 0
cars = []
#car position, time to reach target
for i in range(len(pos)):
cars.append((pos[i], 1.0*(target - pos[i])/speed[i]))
#sort in reverse order
cars.sort(key=lambda tup: tup[0], reverse=True)
car_fleet = 0
max_time = 0
for _, t in cars:
#max_time record the time for prev car fleet, if the next car
# need less time to reach target, it would be blocked and join
# the prev car fleet
if t > max_time:
#new car fleet exist if need to take event more to reach
# the final target
max_time = t
car_fleet += 1
return car_fleet
オンラインテスト
Success
[Details]
Runtime: 76 ms, faster than 93.20% of Python3 online submissions for Car Fleet.
Memory Usage: 15.3 MB, less than 59.78% of Python3 online submissions for Car Fleet.
976最大の境界トライアングル
イージー
正の長さの配列A与えられ、これらの長さの3から形成された非ゼロ領域を有する三角形の最大周長を返します。
それが非ゼロ領域の任意の三角形を形成することができない場合、0を返します。
例1:
入力:[2,1,2]
出力:5
例2:
入力:[1,2,1]
出力:0
例3:
入力:[3,2,3,4]
出力:10
例4:
入力:[3,6,2,3]
出力:8
注意:
3 <= A.length <= 10000
1 <= A[i] <= 10^6
タイトル効果:最長円周を必要3つの三角組成の数を識別するための番号のセット。
ソリューションの概要:三角形を形成し、必要な2つの短辺が長い周長の長い選択三方、加えて、第3の辺よりも大きくされます。
class Solution:
def largestPerimeter(self, nums: List[int]) -> int:
nums.sort(reverse=True) #sort in reverse order
for i in range(len(nums) - 2):
if nums[i] < nums[i+1] + nums[i+2]:
return nums[i] + nums[i+1] + nums[i+2]
return 0
テスト、
Success
[Details]
Runtime: 72 ms, faster than 90.14% of Python3 online submissions for Largest Perimeter Triangle.
Memory Usage: 13.9 MB, less than 62.16% of Python3 online submissions for Largest Perimeter Triangle.
アレイユニークを作るために945の最小インクリメント
中
整数Aの配列を指定し、移動は、任意のA [I]を選択し、1をインクリメントから成ります。
独特のすべての値を作るために動きの最小数を返します。
例1:
入力:[1,2,2]
出力:1
説明:1つの移動した後、アレイは[1、2、3]であり得ます。
例2:
入力:[3,2,1,2,1,7]
出力:6
説明:6に移動した後、アレイがあり得る[3、4、1、2、5、7]。
これは、配列が、すべての一意の値を持つことは不可能である5つの以下の移動を示すことができます。
注:
0 <= A.length <= 40000
0 <= A [i]が<40000
タイトル効果:データ要素が一意になるように、必要最小限の修飾を有するデータのセットは、重複データ、。
問題解決のアイデア:最小の要素から始まり、その後、要素を繰り返し変更]をクリックします。
def minIncrementForUnique(self, nums: List[int]) -> int:
nums.sort(reverse=False)
ans = 0
cnt = {}
for n in nums:
cnt[n] = 1
#1 1 2 2 3 7
#0 +1(2) +1(3) +2(4) +2(5)
for i in range(1, len(nums)):
if nums[i] > nums[i-1]:
continue
#calculate distance between two adjecent num
ans += nums[i-1] - nums[i] + 1
#make following num one more than previous one to
# make it unique
nums[i] = nums[i-1] + 1
return ans
テスト
Success
[Details]
Runtime: 168 ms, faster than 42.89% of Python3 online submissions for Minimum Increment to Make Array Unique.
Memory Usage: 19 MB, less than 7.08% of Python3 online submissions for Minimum Increment to Make Array Unique.
パリティIIにより、922ソート配列
イージー
負以外の整数の配列Aを考えると、Aの整数の半分は奇数であり、整数の半分にもあります。
ソートA [i]が奇数であるときはいつでもそのようにアレイが、iが奇数です。[i]が偶数であるときはいつでもそして、iが偶数です。
あなたは、この条件を満たす任意の答え配列を返すことがあります。
例1:
入力:[4,2,5,7]
出力:[4,5,2,7]
説明:[4,7,2,5]、[2,5,4,7]、[2,7,4 、5]も受け入れされていたであろう。
注意:
2 <= A.length <= 20000
A.length % 2 == 0
0 <= A[i] <= 1000
タイトル効果:奇数ビットの放電が奇数となるように、偶数 - 偶数ビットが置かれているアレイ、調整のための要素の順序を考えます。
問題解決のアイデア:配列が順次要素位置をマーキング走査される第2走査スイッチング素子を調整する必要がある場合、調整する必要があります。
class Solution:
def sortArrayByParityII(self, nums: List[int]) -> List[int]:
stat = {}
is_even = lambda n : n%2 == 0
is_odd = lambda n : n%2 == 1
#mark the element with non-zero value if it needs to swap
for i in range(len(nums)):
if (is_even(nums[i]) and is_even(i)) or ((is_odd(nums[i])) and is_odd(i)):
stat[i] = 0 #well aligned
elif is_even(nums[i]):
stat[i] = 1
else:
stat[i] = 2
for i in range(len(nums)):
if stat[i] == 0:
continue
else:
#find the first valid element for swapping
for j in range(i, len(nums)):
if stat[j] == 0 or stat[i] == stat[j]:
continue
nums[i], nums[j] = nums[j], nums[i]
stat[i] = 0 #reset stats
stat[j] = 0
break
return nums
テスト、
Success
[Details]
Runtime: 352 ms, faster than 5.21% of Python3 online submissions for Sort Array By Parity II.
Memory Usage: 15.9 MB, less than 5.25% of Python3 online submissions for Sort Array By Parity II.
26.ソートされた配列から重複を削除
イージー
ソートされた配列を考えるとNUMS、重複を削除して、場所の各要素にのみ現れるように一度と新しい長さを返します。
あなたがこれを行う必要があり、別のアレイのための余分なスペースを割り当てないでください入力配列の変更インプレースを O(1)余分なメモリで。
例1:
<PRE>を考えるNUMS = [1,1,2]、
あなたの関数は、長さ=を返すべきである2
の最初の2つの要素でnums
ある1
と2
夫々 。
それはあなたが戻った長さを超えて残すかは重要ではありません。</ PRE>
例2:
<PRE>を考えるNUMS = [0,0,1,1,1,2,2,3,3,4]、
あなたの関数は、長さ=を返すべきである5
の最初の5つの要素と、nums
に変更され0
、1
、2
、3
、および4
それぞれ。
値が返された長さを超えて設定されているかは重要ではありません。
</ PRE>
効果の件名:指定された配列のために、すべての重複要素を削除します。
問題解決のアイデア:インデックスを維持し、重複した要素をカバーし、前方のすべての要素を繰り返すことはしません。最終的な指標は、能動素子の長さに等しいです。
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
if len(nums) == 0: return 0
idx = 1
for i in range(1, len(nums)):
if nums[i] != nums[i - 1]:
nums[idx] = nums[i]
idx += 1
return idx
テスト
Success
[Details]
Runtime: 56 ms, faster than 95.70% of Python3 online submissions for Remove Duplicates from Sorted Array.
Memory Usage: 15 MB, less than 11.86% of Python3 online submissions for Remove Duplicates from Sorted Array.
パリティにより、905ソート配列
イージー
非負の整数の配列A与えられ、Aのすべての奇数の要素が続くAのすべての偶数の要素からなる配列を返します
あなたは、この条件を満たす任意の答え配列を返すことがあります。
例1:
入力:[3,1,2,4]
出力:[2,4,3,1]
出力を[4,2,3,1]、[2,4,1,3]、および[4,2、 1,3]も受け入れられます。
タイトル効果:ソート偶数奇数の場所の前に必要な分割指定された配列のために。
問題解決のアイデアを:安定したソート、移動前の偶奇の使用。
class Solution:
def sortArrayByParity(self, nums: List[int]) -> List[int]:
cmp = lambda a : a%2
nums.sort(key=cmp)
return nums
テスト
Success
[Details]
Runtime: 64 ms, faster than 97.07% of Python3 online submissions for Sort Array By Parity.
Memory Usage: 13.8 MB, less than 38.36% of Python3 online submissions for Sort Array By Parity.
899整然としたキュー
ハード
小文字の文字列Sが与えられています。その後、我々は移動し、任意の数を行うことができます。
各動きで、我々は最初のKの文字(左から)のいずれかを選択し、それを削除し、文字列の末尾に置きます。
移動し、任意の数の後に私たちが持っている可能性が辞書順最小の文字列を返します。
例1:
入力:S =「CBA」、K = 1つの
出力:「ACB」
説明:
最初の移動では、我々は、文字列「BAC」を得る、最後に1文字目(「C」)を移動します。
第二の動きでは、我々は最終結果「ACB」を得る、最後に1文字(「B」)を移動します。
効果の件名:移動の定義、左端のKの文字列の末尾に。有限動きを使用して、文字列の配列。
問題解決のアイデア:ときK> 1、あなたがそれ以外の場合は、各要素の中心に折り畳むことしようとすると、ソート完全にソートを選択するために使用できることを意味します。
class Solution:
def orderlyQueue(self, s: str, k: int) -> str:
# sort or rotation
if k > 1:
return ''.join(sorted(s))
ans = s
for i in range(len(s)):
ans = min(ans, s[i:] + s[:i]) #try every kind of break point in rotate
return ans
テスト
Success
[Details]
Runtime: 40 ms, faster than 78.70% of Python3 online submissions for Orderly Queue.
Memory Usage: 13.2 MB, less than 57.14% of Python3 online submissions for Orderly Queue.
ます。https://www.jianshu.com/p/f57b7aeafc3bで再現