已知一个数组A及它的大小n,在读入这串数的时候算出每个数的秩,即在当前数组中小于等于它的数的个数(不包括它自身)。从而返回一个int数组,元素为每次加入的数的秩。保证数组大小小于等于5000。
测试样例:
[1,2,3,4,5,6,7],7
返回:[0,1,2,3,4,5,6]
def getRankOfNumber(self, A, n):
newList = [0]
for i in range(1, n):
num = 0
for j in range(0, i):
if A[j] <= A[i]:
num += 1
newList.append(num)
return newList
# -*- coding:utf-8 -*-
class Node:
def __init__(self, val):
self.leftSize = 0
self.val = val
self.left = None
self.right = None
def insert(self, val):
if self.val >= val:
if self.left is not None:
self.left.insert(val)
else:
self.left = Node(val)
self.leftSize += 1
else:
if self.right is not None:
self.right.insert(val)
else:
self.right = Node(val)
def getRank(self, val):
if self.val == val:
return self.leftSize
if self.val > val:
return self.left.getRank(val)
if self.val < val:
return self.leftSize + 1 + self.right.getRank(val)
class Rank:
def __init__(self):
self.root = None
def getRankOfNumber(self, A, n):
res = []
for i in range(n):
res.append(self.helper(A[i]))
return res
def helper(self, val):
if self.root == None:
self.root = Node(val)
else:
self.root.insert(val)
return self.root.getRank(val)