第零章 basic coding

  1. 排列序号
    中文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

  1. 排列序号II
    中文English
    给出一个可能包含重复数字的排列,求这些数字的所有排列按字典序排序后该排列在其中的编号。编号从1开始。

Example
样例 1:

输入:[1,4,2,2]
输出:3
样例 2:

输入 :[1,6,5,3,1]
输出:24

// An highlighted block
var foo = 'bar';
  1. 整数排序 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)
  1. 下一个排列
    中文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';
  1. 下一个排列
    中文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';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值