- 排列序号
中文English
给出一个不含重复数字的排列,求这些数字的所有排列按字典序排序后该排列的编号。其中,编号从1开始。
Example
样例 1:
输入:[1,2,4]
输出:1
样例 2:
输入:[3,2,1]
输出:6
// An highlighted block
var foo = 'bar';
康托展开:https://www.cnblogs.com/CXYscxy/p/11059191.html
- 排列序号II
中文English
给出一个可能包含重复数字的排列,求这些数字的所有排列按字典序排序后该排列在其中的编号。编号从1开始。
Example
样例 1:
输入:[1,4,2,2]
输出:3
样例 2:
输入 :[1,6,5,3,1]
输出:24
// An highlighted block
var foo = 'bar';
- 整数排序 II
中文English
给一组整数,请将其在原地按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。
Example
例1:
输入:[3,2,1,4,5],
输出:[1,2,3,4,5]。
例2:
输入:[2,3,1],
输出:[1,2,3]。
import random
##2019/8/28
class Solution:
##
"""
@param A: an integer array
@return: nothing
利用分治法可将快速排序的分为三步:
--在数据集之中,选择一个元素作为”基准”(pivot)。
--所有小于”基准”的元素,都移到”基准”的左边;所有大于”基准”的元素,都移到”基准”的右边。
这个操作称为分区 (partition) 操作,分区操作结束后,基准元素所处的位置就是最终排序后它的位置。
--对”基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
"""
def sortIntegers2(self, A):
#快速排序
if not A:
return
self.quicksort(A,0,len(A)-1)
def quicksort(self,A,start,end):
if start >= end:
return
left,right = start,end
#随机给定基准元素
pivot = A[random.randint(left,right)]
while left < right:
while A[left]<pivot:
left += 1
while A[right]> pivot:
right -= 1
if left <= right:
A[left],A[right] = A[right],A[left]
left += 1
right -=1
self.quicksort(A,start,right)
self.quicksort(A,left,end)
a = Solution()
alist =[54,26,93,17,77,31,44,55,20]
a.sortIntegers2(alist)
print(alist)
- 下一个排列
中文English
给定一个整数数组来表示排列,找出其之后的一个排列。
Example
例1:
输入:[1]
输出:[1]
例2:
输入:[1,3,2,3]
输出:[1,3,3,2]
例3:
输入:[4,3,2,1]
输出:[1,2,3,4]
// An highlighted block
var foo = 'bar';
- 下一个排列
中文English
给定一个若干整数的排列,给出按正数大小进行字典序从小到大排序后的下一个排列。
如果没有下一个排列,则输出字典序最小的序列。
Example
样例 1:
输入:1,2,3
输出:1,3,2
样例 2:
输入:3,2,1
输出:1,2,3
样例 3:
输入:1,1,5
输出:1,5,1
Challenge
不允许使用额外的空间。
// An highlighted block
var foo = 'bar';