Skip to content

Commit

Permalink
global and local inversions medium
Browse files Browse the repository at this point in the history
  • Loading branch information
weiy committed Nov 2, 2018
1 parent 7e0ea2c commit bd03550
Showing 1 changed file with 55 additions and 0 deletions.
55 changes: 55 additions & 0 deletions Array/GlobalAndLocalInversions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
"""
We have some permutation A of [0, 1, ..., N - 1], where N is the length of A.
The number of (global) inversions is the number of i < j with 0 <= i < j < N and A[i] > A[j].
The number of local inversions is the number of i with 0 <= i < N and A[i] > A[i+1].
Return true if and only if the number of global inversions is equal to the number of local inversions.
Example 1:
Input: A = [1,0,2]
Output: true
Explanation: There is 1 global inversion, and 1 local inversion.
Example 2:
Input: A = [1,2,0]
Output: false
Explanation: There are 2 global inversions, and 1 local inversion.
Note:
A will be a permutation of [0, 1, ..., A.length - 1].
A will have length in range [1, 5000].
The time limit for this problem has been reduced.
思路:
二分法。
测试地址:
https://leetcode.com/contest/weekly-contest-69/problems/global-and-local-inversions/
"""
import bisect

class Solution(object):
def isIdealPermutation(self, A):
"""
:type A: List[int]
:rtype: bool
"""
global_inversions = []
_g = 0

for i in A[::-1]:
_g += bisect.bisect_left(global_inversions, i)
bisect.insort_left(global_inversions, i)

_l = 0

for i in range(len(A)-1):
if A[i] > A[i+1]:
_l += 1

return _g == _l

0 comments on commit bd03550

Please sign in to comment.