Fork me on GitHub

随笔分类 -  Algorithms

Data Structures and Algorithms
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入两个树结点,求它们的最低公共祖先。[牛客网刷题地址]无思路分析 该题首先要确定是否为二叉树,还要确定是否为二叉搜索树,是否有父指针,或者仅仅是普通二叉树。树为二叉搜索树时,最低公共祖先结点的大小在两个树结点大小的中间。树为普通树时,使用遍历将子结点的信息往上传递。在左右子树中进行查找是否存在两个树结点,如果两个树结点分别在左右子树上,说... 阅读全文
posted @ 2019-09-02 22:30 这个世界~ 阅读(137) 评论(0) 推荐(0) 编辑
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。牛客网刷题地址思路分析 要注意特殊情况:null、空字符串、带有正负号、字符不是数字、溢出等等。对于非法的特殊输入,返回值为0,还... 阅读全文
posted @ 2019-09-02 22:16 这个世界~ 阅读(101) 评论(0) 推荐(0) 编辑
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 给定一个数组A[0, 1, …, n-1],请构建一个数组B[0, 1, …, n-1],其中B中的元素B[i] =A[0]×A[1]×… ×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。 牛客网刷题地址思路分析可以把B[i]=A[0]xA[]...xA[i-1]xA[i+1]...x A[n-1]看成A[0]xA[1]x..... 阅读全文
posted @ 2019-09-02 21:45 这个世界~ 阅读(110) 评论(0) 推荐(0) 编辑
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。牛客网刷题地址思路分析 对数字做运算,除了四则运算外,只剩下位运算了。根据一般情况下的加法步骤,设计如下:不考虑进位对每一位相加:1加0,0加1都等于1,而0加0,1加1等于0,所以使用异或操作;计算进位:只有1加1产生进位,所以采用位与&操作,再左移1位;将和与... 阅读全文
posted @ 2019-09-02 15:30 这个世界~ 阅读(101) 评论(0) 推荐(0) 编辑
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 求1+2+...+n,要求不能使用乘除法、for、 while if else. switch、case等关键字及条件判断语句( A?B:C)。牛客网刷题地址思路分析 利用逻辑运算符的短路特性: 对于A && B,如果A为假,那么就不执行B了;而如果A为真,就会执行B。对于A || B,如果A为真,那么就会不执行B了;而如果A为假,就会执... 阅读全文
posted @ 2019-09-02 15:01 这个世界~ 阅读(132) 评论(0) 推荐(0) 编辑
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少? 例如,一只股票在某些时间节点的价格为{9, 11,8,5,7,12,16,14}。如果我们能在价格为5的时候买入并在价格为16时卖出,则能收获最大的利润11。[牛客网刷题地址]无思路分析 我们先定义函数diff(i)为当卖出价为数组中第i个数字时... 阅读全文
posted @ 2019-09-02 14:44 这个世界~ 阅读(245) 评论(0) 推荐(0) 编辑
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。牛客网刷题地址思路分析采用链表来存放数据,每次对长度取余来实现循环:将所有数字放入LinkedList链表中(LinkedList比ArrayList更适合增删操作)。假设当前删除的结点下标为removeIndex,则下一个... 阅读全文
posted @ 2019-09-02 14:13 这个世界~ 阅读(107) 评论(0) 推荐(0) 编辑
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10 为数字本身,A为1, J为11, Q为12,K为13,而大、小王可以看成任意数字。牛客网刷题地址思路分析 将问题转化为 判断5个数字是不是连续的,要注意其中大小王用0代替,最直观的方法是把数组排序。由于0(大小王)可以当成任意数字,我们可以用0去补满数组中的空缺。... 阅读全文
posted @ 2019-08-30 01:05 这个世界~ 阅读(139) 评论(0) 推荐(0) 编辑
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出s的所有可能的值出现的概率。 [牛客网刷题地址]无思路分析递归的方法。要想求出n个骰子的点数和,可以先把n个骰子分为两堆:第一堆只有一个;另一堆有n-1个。单独的那一个有可能出现1~6的点数。我们需要计算1~6的每一种点数和剩下的n-1个骰子来计算点数和。接下来把剩下的n-1... 阅读全文
posted @ 2019-08-30 00:31 这个世界~ 阅读(170) 评论(0) 推荐(0) 编辑
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 请定义一个队列并实现函数max得到队列里的最大值,要求函数max、push_back和 pop_front 的时间复杂度都是0(1)。[牛客网刷题地址]无思路分析利用一个双端队列来存储当前队列里的最大值以及之后可能的最大值。在定义题目要求功能的队列时,除了定义一个队列data存储数值,还需额外用一个队列maxmium存储可能的最大值;此外,还... 阅读全文
posted @ 2019-08-29 23:47 这个世界~ 阅读(111) 评论(0) 推荐(0) 编辑
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。例如,如果输入数组{2,3,4,2,6,2, 5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,它们的最大值分别为{4,4,6,6,6,5},如下表所示:牛客网刷题地址思路分析 建立一个两端开口的队列,放置所有可能是最大值的数字(存放的其实是对应的下标),且最大值位于队列开头... 阅读全文
posted @ 2019-08-29 23:33 这个世界~ 阅读(119) 评论(0) 推荐(0) 编辑
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2, 该函数将返回左旋转两位得到的结果"cdefgab"。牛客网刷题地址思路分析 首先根据传入的n将字符串分为两部分,分别翻转这两个部分,然后在整体对字符串进行翻转 测试用例功能测试:把长度为n的... 阅读全文
posted @ 2019-08-29 22:59 这个世界~ 阅读(116) 评论(0) 推荐(0) 编辑
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。牛客网刷题地址思路分析 首先将整个字符串翻转,然后在一次翻转单个单词测试用例功能测试:句子中有多个单词;句子中只有一个单词。特殊输入测试:字符串指针... 阅读全文
posted @ 2019-08-29 22:48 这个世界~ 阅读(119) 评论(0) 推荐(0) 编辑
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。例如,输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以打印出3个连续序列1~5、4~6和7~8。牛客网刷题地址思路分析 我们也考虑用两个数small和big分别表示序列的最小值和最大值。首先把small初始化为1, big 初始化为2。如果从small到big... 阅读全文
posted @ 2019-08-29 22:20 这个世界~ 阅读(115) 评论(0) 推荐(0) 编辑
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。 牛客网刷题地址思路分析设置两个指针分别指向数组的头和尾,比较指定的sum和两个指针所指数值之和curSum的大小,如果相等,添加到list中,如果sum FindNumbersWithSum(int [] array... 阅读全文
posted @ 2019-08-29 21:52 这个世界~ 阅读(119) 评论(0) 推荐(0) 编辑
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 在一个数组中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字[牛客网刷题地址]无思路分析 如果一个数字出现三次,那么它的二进制表示的每一位(0或者1)也出现三次。如果把所有出现三次的数字的二进制表示的每一位都分别加起来,那么每一位的和都能被3整除。我们把数组中所有数字的二进制表示的每一位都加起来。如果某一位的和能被... 阅读全文
posted @ 2019-08-29 01:09 这个世界~ 阅读(113) 评论(0) 推荐(0) 编辑
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 一个整型数组里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是0(1)。牛客网刷题地址思路分析如果将此题改为只有一个数字出现过一次,其他数字出现两次,那么,我们就可以用异或的方式,将所有数字进行异或,最终得到的结果就为只出现过一次的数字,因为重复的数字 异或运算便会各自抵消掉;我... 阅读全文
posted @ 2019-08-29 00:30 这个世界~ 阅读(99) 评论(0) 推荐(0) 编辑
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左、右子树的深度相差不超过1,那么它就是一棵平衡二叉树。例如,图中的二叉树就是一棵平衡二叉树。牛客网刷题地址思路分析 在求二叉树的深度的过程中判断左右子树之间的高度差,如果高度差大于1 ,就返回-1,说明不是平衡二叉树,否则返回二叉树的深度。测试用例功能测试:平衡的... 阅读全文
posted @ 2019-08-28 22:54 这个世界~ 阅读(115) 评论(0) 推荐(0) 编辑
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。牛客网刷题地址思路分析 利用递归,先计算左右子树的深度,判断左子树和右子树深度,大的+1 即为此二叉树的深度。测试用例功能测试:输入普通的二叉树;二叉树中所有节点都没有左/右子树。特殊输入测试:二叉树只有一个节点;... 阅读全文
posted @ 2019-08-27 22:51 这个世界~ 阅读(136) 评论(0) 推荐(0) 编辑
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 给定一棵二叉搜索树,请找出其中第k小的节点。例如,在下图的二叉搜索树里,按节点数值大小顺序,第三小节点的值是4。牛客网刷题地址思路分析 二叉树的中序遍历,要注意的地方,要设置一个全局的索引index来记录遍历到第几个元素测试用例功能测试:各种形态不同的二叉搜索树。边界值测试:输入k为0、1、二叉搜索树的节点数、二叉搜索树的节点数加1。特殊... 阅读全文
posted @ 2019-08-27 22:32 这个世界~ 阅读(367) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示