这篇文章讲解的是LintCode第248题:Count of Smaller Number
Example
Example 1:
Input: array =[1,2,7,8,5] queries =[1,8,5]
Output:[0,4,2]
Example 2:
Input: array =[3,4,5,8] queries =[2,4]
Output:[0,1]
思路是用二分查找找到第一个比target大的数:
class Solution:
"""
@param A: An integer array
@param queries: The query list
@return: The number of element in the array that are smaller that the given integer
"""
def countOfSmallerNumber(self, A, queries):
# write your code here
A = sorted(A)
results = []
for i in queries:
results.append(self.countNumber(A, i))
return results
def countNumber(self, A, number):
if len(A) == 0 or A[-1] < number:
return len(A)
start, end = 0, len(A) - 1
while start + 1 < end:
mid = start + (end - start) // 2
if A[mid] < number:
start = mid
else:
end = mid
if A[start] >= number:
return start
if A[end] >= number:
return end
return end + 1
注意结尾判断条件,如果没有比number大,则count为A的长度。