
OJ-nowcoder
sparksnail
这个作者很懒,什么都没留下…
展开
-
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 · 227 阅读 · 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 · 194 阅读 · 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 · 265 阅读 · 0 评论 -
nowcoder 足球比赛
题目有2k只球队,有k-1个强队,其余都是弱队,随机把它们分成k组比赛,每组两个队,问两强相遇的概率是多大? 给定一个数k,请返回一个数组,其中有两个元素,分别为最终结果的分子和分母,请化成最简分数 测试样例: 4 返回:[3,7]思路总共的组合数为 num1=(2k−1)∗(2k−3)∗...∗1'>n原创 2018-02-02 21:28:40 · 382 阅读 · 0 评论 -
nowcoder 蚂蚁
题目n只蚂蚁从正n边形的n个定点沿着边移动,速度是相同的,问它们碰头的概率是多少? 给定一个正整数n,请返回一个数组,其中两个元素分别为结果的分子和分母,请化为最简分数。 测试样例: 3 返回:[3,4]思路2n−22n'>2n−22n2n−22n\frac{2^n-2}{2^n}代码class Ants: def gcd(self, x, y原创 2018-02-02 21:41:09 · 290 阅读 · 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 · 146 阅读 · 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 · 165 阅读 · 0 评论 -
nowcoder 两串旋转
题目如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。比如A=”12345”,A的旋转词有”12345”,”23451”,”34512”,”45123”和”51234”。对于两个字符串A和B,请判断A和B是否互为旋转词。 给定两个字符串A和B及他们的长度lena,lenb,请返回一个bool值,代表他们是否互为旋转词。 测试样例: “cdab”,4,”abc原创 2018-01-18 20:00:35 · 195 阅读 · 0 评论 -
nowcoder 错装信封
题目有n个信封,包含n封信,现在把信拿出来,再装回去,要求每封信不能装回它原来的信封,问有多少种装法? 给定一个整数n,请返回装发个数,为了防止溢出,请返回结果Mod 1000000007的值。保证n的大小小于等于300。 测试样例: 2 返回:1思路f(n)=(n−1)∗(f(n−1)+f(n−2))'>f(n)=(n−原创 2018-02-01 23:28:50 · 284 阅读 · 0 评论 -
nowcoder 高矮排列
题目12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种? 给定一个偶数n,请返回所求的排列方式个数。保证结果在int范围内。 测试样例: 1 返回:1思路卡特兰数。代码class HighAndShort: def get_arrange(self, n, num): count = 1原创 2018-02-01 22:56:18 · 297 阅读 · 0 评论 -
nowcoder 二叉树统计
题目求n个无差别的节点构成的二叉树有多少种不同的结构? 给定一个整数n,请返回不同结构的二叉树的个数。保证结果在int范围内。 测试样例: 1 返回:1思路卡特兰数,h(n)=h(0)∗h(n−1)+h(1)∗h(n−2)+...+h(n−1)h(0)'>h(n)=h(0)∗h(n−1)+h(1)∗h(n−2原创 2018-02-01 22:46:18 · 167 阅读 · 0 评论 -
nowcoder 链表的回文结构
题目请编写一个函数,检查链表是否为回文。 给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文。 测试样例: {1,2,3,2,1} 返回:true {1,2,3,2,3} 返回:false思路定义一个stack,存储链表的值,两次遍历。代码# -*- coding:utf-8 -*-# class ListNode:#原创 2018-01-25 21:53:09 · 186 阅读 · 0 评论 -
nowcoder 链表指定值清除
思路现在有一个单链表。链表中每个节点保存一个整数,再给定一个值val,把所有等于val的节点删掉。 给定一个单链表的头结点head,同时给定一个值val,请返回清除后的链表的头结点,保证链表中有不等于该值的其它值。请保证其他元素的相对顺序。 测试样例: {1,2,3,4,3,2,1},2 {1,3,4,3,1}思路水题。写就是了(^-^)V代码# -*- coding:原创 2018-01-25 21:46:43 · 165 阅读 · 0 评论 -
nowcoder 链表的k逆序
题目有一个单链表,请设计一个算法,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点。例如链表1->2->3->4->5->6->7->8->null,K=3这个例子。调整后为,3->2->1->6->5->4->7->8->null。因为K==3,所以每三个节点之间逆序,但其中的7,8不调整,因为只有两个节点不够一组。 给定一个单链表的头指针head,同时给定K值,返回原创 2018-01-25 21:35:12 · 213 阅读 · 0 评论 -
nowcoder 打印两个链表的公共值
题目现有两个升序链表,且链表中均无重复元素。请设计一个高效的算法,打印两个链表的公共值部分。 给定两个链表的头指针headA和headB,请返回一个vector,元素为两个链表的公共部分。请保证返回数组的升序。两个链表的元素个数均小于等于500。保证一定有公共值 测试样例: {1,2,3,4,5,6,7},{2,4,6,8,10} 返回:[2.4.6]思路水题。不想写。原创 2018-01-25 20:55:42 · 179 阅读 · 0 评论 -
nowcoder 链表的分化
题目对于一个链表,我们需要用一个特定阈值完成对它的分化,使得小于等于这个值的结点移到前面,大于该值的结点在后面,同时保证两类结点内部的位置关系不变。 给定一个链表的头结点head,同时给定阈值val,请返回一个链表,使小于等于它的结点在前,大于等于它的在后,保证结点值不重复。 测试样例: {1,4,2,5},3 {1,2,4,5}思路用两个临时链表记录大于val和小于等于val原创 2018-01-25 20:51:53 · 161 阅读 · 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 · 198 阅读 · 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 · 191 阅读 · 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 · 194 阅读 · 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 · 169 阅读 · 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 · 136 阅读 · 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 · 140 阅读 · 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 · 240 阅读 · 0 评论 -
nowcoder 两串旋转
题目如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。比如A=”12345”,A的旋转词有”12345”,”23451”,”34512”,”45123”和”51234”。对于两个字符串A和B,请判断A和B是否互为旋转词。 给定两个字符串A和B及他们的长度lena,lenb,请返回一个bool值,代表他们是否互为旋转词。 测试样例: “cdab”,4,”abc...原创 2018-03-05 22:15:18 · 157 阅读 · 0 评论 -
nowcoder 二叉树打印
题目有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。 给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列。保证结点数小于等于500。思路用两个队列,层次遍历。代码# -*- coding:utf-8 -*-# class TreeNode:# def __in...原创 2018-03-05 22:02:37 · 159 阅读 · 0 评论 -
nowcoder 完全二叉树判断
题目有一棵二叉树,请设计一个算法判断它是否是完全二叉树。 给定二叉树的根结点root,请返回一个bool值代表它是否为完全二叉树。树的结点个数小于等于500。思路二叉树层次遍历。当结点只有右子树没有左子树时不是完全二叉树。代码# class TreeNode:# def __init__(self, x):# self.val = x#原创 2018-01-29 20:46:57 · 179 阅读 · 0 评论 -
nowcoder 平衡二叉树判断
题目有一棵二叉树,请设计一个算法判断这棵二叉树是否为平衡二叉树。 给定二叉树的根结点root,请返回一个bool值,代表这棵树是否为平衡二叉树。思路递归,判断每个节点左右子树是否为AVL树,同时获取左右子树的高度。代码# class TreeNode:# def __init__(self, x):# self.val = x#原创 2018-01-29 20:32:48 · 184 阅读 · 0 评论 -
nowcoder 二叉树的序列化
题目首先我们介绍二叉树先序序列化的方式,假设序列化的结果字符串为str,初始时str等于空字符串。先序遍历二叉树,如果遇到空节点,就在str的末尾加上“#!”,“#”表示这个节点为空,节点值不存在,当然你也可以用其他的特殊字符,“!”表示一个值的结束。如果遇到不为空的节点,假设节点值为3,就在str的末尾加上“3!”。现在请你实现树的先序序列化。 给定树的根结点root,请返回二叉树序列化后原创 2018-01-29 20:02:57 · 190 阅读 · 0 评论 -
nowcoder 非递归二叉树的序列打印
题目请用非递归方式实现二叉树的先序、中序和后序的遍历打印。 给定一个二叉树的根结点root,请依次返回二叉树的先序,中序和后序遍历(二维数组的形式)。思路非递归方式遍历二叉树。后序遍历有两种方式。代码# class TreeNode:# def __init__(self, x):# self.val = x# self.le原创 2018-01-29 19:38:51 · 167 阅读 · 0 评论 -
nowcoder 二叉树打印
题目有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。 给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列。保证结点数小于等于500。思路1:用一个队列和两个指针last和nlast,分别指向这一层最右端节点和下一层的最右端节点。不断遍历这一层节点,用一个队列,不断把下一层节点加入队原创 2017-12-19 11:24:46 · 228 阅读 · 0 评论 -
nowcoder 递归二叉树的序列打印
题目请用递归方式实现二叉树的先序、中序和后序的遍历打印。 给定一个二叉树的根结点root,请依次返回二叉树的先序,中序和后续遍历(二维数组的形式)。思路用递归方式进行二叉树的三种遍历。代码# class TreeNode:# def __init__(self, x):# self.val = x# self.left = N原创 2018-01-29 17:39:34 · 180 阅读 · 0 评论 -
nowcoder 快速N次方
题目如果更快的求一个整数k的n次方。如果两个整数相乘并得到结果的时间复杂度为O(1),得到整数k的N次方的过程请实现时间复杂度为O(logN)的方法。 给定k和n,请返回k的n次方,为了防止溢出,请返回结果Mod 1000000007的值。 测试样例: 2,3 返回:8思路快速幂算法。把幂分解为二进制,不断循环遍历每一位的值,连乘。代码class QuickPowe原创 2018-01-29 17:09:34 · 229 阅读 · 0 评论 -
nowcoder 完全二叉树计数
题目给定一棵完全二叉树的根节点root,返回这棵树的节点个数。如果完全二叉树的节点数为N,请实现时间复杂度低于O(N)的解法。 给定树的根结点root,请返回树的大小。思路二分查找。统计根节点最左节点的深度。当左边深度和右边深度相同时,说明左边是完全二叉树,递归遍历右边,否则右边是完全二叉树,递归遍历左边。代码# class TreeNode:# def __i原创 2018-01-29 16:54:10 · 228 阅读 · 0 评论 -
nowcoder 最左原位
题目有一个有序数组arr,其中不含有重复元素,请找到满足arr[i]==i条件的最左的位置。如果所有位置上的数都不满足条件,返回-1。 给定有序数组arr及它的大小n,请返回所求值。 测试样例: [-1,0,2,3],4 返回:2思路二分查找。当arr[mid]代码class Find: def findPos(self, arr, n):原创 2018-01-29 16:20:23 · 214 阅读 · 0 评论 -
nowcoder 排队买票
题目2n个人排队买票,n个人拿5块钱,n个人拿10块钱,票价是5块钱1张,每个人买一张票,售票员手里没有零钱,问有多少种排队方法让售票员可以顺利卖票。 给定一个整数n,请返回所求的排队方案个数。保证结果在int范围内。 测试样例: 1 返回:1思路卡特兰数。代码class BuyTickets: def get_arrange(self, n, num):原创 2018-02-01 22:31:06 · 722 阅读 · 0 评论 -
nowcoder 进出栈
题目n个数进出栈的顺序有多少种?假设栈的容量无限大。 给定一个整数n,请返回所求的进出栈顺序个数。保证结果在int范围内。 测试样例: 1 返回:1思路卡特兰数。代码class Stack: def get_arrange(self, n, num): count = 1 num1, num2 = 1, 1 w原创 2018-02-01 22:27:38 · 180 阅读 · 0 评论 -
nowcoder 括号序列
题目假设有n对左右括号,请求出合法的排列有多少个?合法是指每一个括号都可以找到与之配对的括号,比如n=1时,()是合法的,但是)(为不合法。 给定一个整数n,请返回所求的合法排列数。保证结果在int范围内。 测试样例: 1 返回:1思路卡特兰数,C2nnn+1'>Cn2nn+1C2nnn+1\frac{C_{2n}^{n}}{n+1}。代码class Parenth原创 2018-02-01 22:25:02 · 429 阅读 · 0 评论 -
nowcoder 最长无重复字符子串
题目对于一个字符串,请设计一个高效算法,找到字符串的最长无重复字符的子串长度。 给定一个字符串A及它的长度n,请返回它的最长无重复字符子串长度。保证A中字符全部为小写英文字符,且长度小于等于500。 测试样例: “aabcb”,5 返回:3思路定义一个pre_index记录前一个重复字符的下标。代码class DistinctSubstring: def l原创 2018-01-23 19:35:48 · 202 阅读 · 0 评论 -
nowcoder 最大二叉搜索子树
题目有一棵二叉树,其中所有节点的值都不一样,找到含有节点最多 的搜索二叉子树,并返回这棵子树的头节点. 给定二叉树的头结点root,请返回所求的头结点,若出现多个节点最多的子树,返回头结点权值最大的。思路递归。分别找到一个节点左子树和右子树的搜索二叉子树的头节点。代码# class TreeNode:# def __init__(self, x):#原创 2018-01-30 21:29:26 · 299 阅读 · 0 评论 -
nowcoder 最短子数组
题目对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度。 给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的长度。(原序列位置从0开始标号,若原序列有序,返回0)。保证A中元素均为正整数。 测试样例: [1,4,6,5,9,10],6 返回:2思路先从左到右遍历,找到一个小于当前最大值的位置。再从右向左遍历,找到一个大于当前最小值的位置。两个位置之原创 2018-01-23 15:52:42 · 177 阅读 · 0 评论