算法-排序
sparksnail
这个作者很懒,什么都没留下…
展开
-
nowcoder 计数排序
题目 对于一个int数组,请编写一个计数排序算法,对数组元素排序。 给定一个int数组A及数组的大小n,请返回排序后的数组。 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] 思路 定义一个桶,把相同的数字放到桶里,最后输出。 代码 def countingSort(self, A, n): # write code here原创 2018-01-22 16:39:54 · 150 阅读 · 0 评论 -
nowcoder 快速排序
题目 对于一个int数组,请编写一个快速排序算法,对数组元素排序。 给定一个int数组A及数组的大小n,请返回排序后的数组。 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] 思路 快速排序,每次寻找一个中心点,中心店左边的数字小于它,右边的数字大于它。 代码 class QuickSort: def partition(self, A, fir原创 2018-01-19 20:16:21 · 181 阅读 · 0 评论 -
nowcoder 堆排序
题目 对于一个int数组,请编写一个堆排序算法,对数组元素排序。 给定一个int数组A及数组的大小n,请返回排序后的数组。 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] 思路 堆排序,建立一个大根堆,然后交换第一个和最后一个元素,不断调整堆。 代码 class HeapSort: def adjustHeap(self, A, paren原创 2018-01-19 21:06:42 · 179 阅读 · 0 评论 -
nowcoder 插入排序
题目 对于一个int数组,请编写一个插入排序算法,对数组元素排序。 给定一个int数组A及数组的大小n,请返回排序后的数组。 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] 思路 插入排序,对于每一个数,向前找合适的位置,插入。 代码 class InsertionSort: def insertionSort(self, A, n):原创 2018-01-18 21:25:29 · 173 阅读 · 0 评论 -
nowcoder 希尔排序
题目 对于一个int数组,请编写一个希尔排序算法,对数组元素排序。 给定一个int数组A及数组的大小n,请返回排序后的数组。保证元素小于等于2000。 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] 思路 类似直接插入排序,希尔排序增加了一个gap,使得每次插入的步长不断变化。 代码 class ShellSort: def shellSort原创 2018-01-19 21:43:46 · 173 阅读 · 0 评论 -
LintCode 105. Copy List with Random Pointer
题目 思路 1.复制结点 2.复制random 3.拆解链表 代码 """ Definition for singly-linked list with a random pointer. class RandomListNode: def __init__(self, x): self.label = x self.next = Non...原创 2018-02-21 18:19:55 · 213 阅读 · 0 评论 -
nowcoder 冒泡排序
题目 对于一个int数组,请编写一个冒泡排序算法,对数组元素排序。 给定一个int数组A及数组的大小n,请返回排序后的数组。 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] 思路 不断把最大的数放到最右边。 代码 # -*- coding:utf-8 -*- class BubbleSort: def bubbleSort(self, A...原创 2018-03-05 22:43:46 · 224 阅读 · 0 评论 -
nowcoder 选择排序
题目 对于一个int数组,请编写一个选择排序算法,对数组元素排序。 给定一个int数组A及数组的大小n,请返回排序后的数组。 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] 思路 对于每一个位置,在后面找到一个最小的数,和当前位置的数交换。遍历所有的位置。 代码 # -*- coding:utf-8 -*- class SelectionSort: ...原创 2018-03-05 22:47:19 · 123 阅读 · 0 评论 -
nowcoder 插入排序
题目 对于一个int数组,请编写一个插入排序算法,对数组元素排序。 给定一个int数组A及数组的大小n,请返回排序后的数组。 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] 思路 对于每一个数字,在前面找到合适的位置插入。 代码 # -*- coding:utf-8 -*- class InsertionSort: def inser...原创 2018-03-05 23:02:27 · 119 阅读 · 0 评论 -
nowcoder 归并排序
题目 对于一个int数组,请编写一个归并排序算法,对数组元素排序。 给定一个int数组A及数组的大小n,请返回排序后的数组。 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] 思路 归并,分治。 代码 # -*- coding:utf-8 -*- class MergeSort: def merge(self, A, first, mid, l...原创 2018-03-05 23:35:34 · 146 阅读 · 0 评论 -
nowcoder 归并排序
题目 对于一个int数组,请编写一个归并排序算法,对数组元素排序。 给定一个int数组A及数组的大小n,请返回排序后的数组。 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] 思路 分治法,归并排序。 代码 class MergeSort: def merge(self, A, first, mid, last): tmp = [原创 2018-01-19 20:00:13 · 240 阅读 · 0 评论 -
nowcoder 选择排序
题目 对于一个int数组,请编写一个选择排序算法,对数组元素排序。 给定一个int数组A及数组的大小n,请返回排序后的数组。 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] 思路 选择排序,对于一个位置上的值,从后面找一个最小的值和它互换,然后继续寻找下一个位置上的值。 代码 class SelectionSort: def selection原创 2018-01-18 20:50:17 · 130 阅读 · 0 评论 -
nowcoder 基数排序
题目 对于一个int数组,请编写一个基数排序算法,对数组元素排序。 给定一个int数组A及数组的大小n,请返回排序后的数组。保证元素均小于等于2000。 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] 思路 依次比较每一位上的数字。 代码 class RadixSort: def radixSort(self, A, n):原创 2018-01-22 17:13:02 · 223 阅读 · 0 评论 -
nowcoder 三色排序
题目 有一个只由0,1,2三种元素构成的整数数组,请使用交换、原地排序而不是使用计数进行排序。 给定一个只含0,1,2的整数数组A及它的大小,请返回排序后的数组。保证数组大小小于等于500。 测试样例: [0,1,1,0,2,2],6 返回:[0,0,1,1,2,2] 思路 定义一个左指针,一个右指针。当遍历到0时,和左指针数字交换。当遍历到2时,和右指针数字交换。 代码 c原创 2018-01-23 15:28:38 · 244 阅读 · 0 评论 -
nowcoder 有序矩阵查找
题目 现在有一个行和列都排好序的矩阵,请设计一个高效算法,快速查找矩阵中是否含有值x。 给定一个int矩阵mat,同时给定矩阵大小nxm及待查找的数x,请返回一个bool值,代表矩阵中是否存在x。所有矩阵中数字及x均为int范围内整数。保证n和m均小于等于1000。 测试样例: [[1,2,3],[4,5,6],[7,8,9]],3,3,10 返回:false 思路 每次判断右上角的原创 2018-01-23 15:38:24 · 179 阅读 · 0 评论 -
nowcoder 最短子数组
题目 对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度。 给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的长度。(原序列位置从0开始标号,若原序列有序,返回0)。保证A中元素均为正整数。 测试样例: [1,4,6,5,9,10],6 返回:2 思路 先从左到右遍历,找到一个小于当前最大值的位置。再从右向左遍历,找到一个大于当前最小值的位置。两个位置之原创 2018-01-23 15:52:42 · 157 阅读 · 0 评论 -
nowcoder 拼接最小字典序
题目 对于一个给定的字符串数组,请找到一种拼接顺序,使所有小字符串拼接成的大字符串是所有可能的拼接中字典序最小的。 给定一个字符串数组strs,同时给定它的大小,请返回拼接成的串。 测试样例: [“abc”,”de”],2 “abcde” 思路 定义比较函数str1+str2=str2+str1str1+str2,然后自定义快排。 代码 class Prior:原创 2018-01-23 18:26:54 · 201 阅读 · 0 评论 -
nowcoder 合法括号序列判断
题目 对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串。 给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串。 测试样例: “(()())”,6 返回:true 测试样例: “()a()()”,7 返回:false 测试样例: “()(()()”,7 返回:false 思路 用一个数字countcount存储左括号个数,当遇到右括号原创 2018-01-23 18:49:00 · 361 阅读 · 0 评论 -
nowcoder 栈的反转
题目 实现一个栈的逆序,但是只能用递归函数和这个栈本身的pop操作来实现,而不能自己申请另外的数据结构。 给定一个整数数组A即为给定的栈,同时给定它的大小n,请返回逆序后的栈。 测试样例: [4,3,2,1],4 返回:[1,2,3,4] 思路 定义两个递归函数。 代码 class StackReverse: def getlast(self, A):原创 2018-01-24 16:06:00 · 161 阅读 · 0 评论 -
nowcoder 双栈排序
题目 请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。 给定一个int[] numbers(C++中为vector<int>),其中第一个元素为栈顶,请返回排序后的栈。请注意这是一个栈,意味着排序过程中你只能访问到第一个元素。 测试样例: [1,2,3,4,5] 返回:[5,4,3,2,1] 思路原创 2018-01-24 16:10:55 · 164 阅读 · 0 评论 -
nowcoder 冒泡排序
题目 对于一个int数组,请编写一个冒泡排序算法,对数组元素排序。 给定一个int数组A及数组的大小n,请返回排序后的数组。 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] 思路 冒泡排序,不断交换相邻位置的两个数. 代码 class BubbleSort: def bubbleSort(self, A, n): # wri原创 2018-01-18 20:44:04 · 144 阅读 · 0 评论 -
nowcoder 快速排序
题目 对于一个int数组,请编写一个快速排序算法,对数组元素排序。 给定一个int数组A及数组的大小n,请返回排序后的数组。 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] 思路 找到一个数,确定最终位置,递归找到所有数字的最终位置。 代码 # -*- coding:utf-8 -*- class QuickSort: def par...原创 2018-03-06 09:54:13 · 216 阅读 · 0 评论