面试题45:把数组排成最小的数 题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3, 32, 321},则打印出这3个数字能排成的最小数字321323。 问题分析 之前我们做过字符全排列的习题 "剑指Offer对答如流系列 字符串的 ...
分类:
编程语言 时间:
2020-01-31 20:57:17
阅读次数:
102
题目链接: "Click here" Solution: 看到恰好,首先考虑容斥,设$f[i]$表示我们 钦定 $i$种颜色在序列中恰好出现了$S$次有多少种方案 那么现在就有$i+1$个部分,把他看作是可重集的全排列,方案数即 ${n! \over (S!)^i (n Si)}$ ,后面每个都可以 ...
分类:
其他好文 时间:
2020-01-31 14:31:32
阅读次数:
61
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 实例 import sys A = [6 ...
分类:
编程语言 时间:
2020-01-31 14:25:52
阅读次数:
63
冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。 def bu ...
分类:
编程语言 时间:
2020-01-31 14:21:21
阅读次数:
71
插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 def insertionSort(arr): for i in range(1, len(arr)): key = arr[i] ...
分类:
编程语言 时间:
2020-01-31 14:05:49
阅读次数:
76
题解: 此题需要先排序在进行计算 #include<stdio.h>void swap(int *a,int *b){ int t=*a; *a=*b; *b=t;} //void sort(int a[],int s,int e,int b[]){// if(s>=e){// return;// ...
分类:
移动开发 时间:
2020-01-31 14:01:59
阅读次数:
127
归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 分治法: 分割:递归地把当前序列平均分割成两半。 集成:在保持元素顺序的同时将上一步得到的子序列集成到一起(归并)。 ...
分类:
编程语言 时间:
2020-01-31 14:00:22
阅读次数:
75
题目描述 给出1-n的两个排列P1和P2,求它们的最长公共子序列。 输入格式 第一行是一个数n, 接下来两行,每行为n个数,为自然数1-n的一个排列。 输出格式 一个数,即最长公共子序列的长度 找出两个序列共同出现的元素,每个元素包括两个维度,一个为在a中的位置,一个为在b中的位置,我们首先保证一个 ...
分类:
其他好文 时间:
2020-01-31 12:35:51
阅读次数:
58
PAT 甲级 Advanced 1067 Sort with Swap(0,*) (25) [贪?算法] ...
分类:
编程语言 时间:
2020-01-31 12:14:44
阅读次数:
63
1.排序模拟枚举 复杂度 一般(最坏)复杂度 :记号为 O(……) 均摊复杂度 $\qquad\quad\,$ :记号为 Θ(……),但一般写成O(……) 约定 1. 省略系数O(100n)=O(10n)=O($\frac{1}{2}$n)=O(n). 2. log底数省略 排序 选择排序 这个大家 ...
分类:
其他好文 时间:
2020-01-31 12:10:09
阅读次数:
75