比赛
qq_36633274
大连民族大学
展开
-
6. 合并排序数组
合并两个排序的整数数组A和B变成一个新的数组。 先确定两个数组的大小,即确定数组中元素的个数,可以使用sizeof()函数。 起初的想法是再新建一个更大的数组,即空间大小为a和b的和。直接把所有的元素放到其中,然后再进行排序。最后输出的就是组合后的数组。int size1,size2; size1=sizeof(a)/4; size2=sizeof(b)/4; int s[siz原创 2018-01-23 20:46:25 · 130 阅读 · 0 评论 -
67. 二叉树的中序遍历
给出一棵二叉树,返回其中序遍历样例给出二叉树 {1,#,2,3}, 1 \ 2 / 3返回 [1,3,2].挑战 你能使用非递归算法来实现么?递归vector<int> a; vector<int> inorderTraversal(TreeNode * root) { // write your code her...原创 2018-03-06 22:50:06 · 153 阅读 · 0 评论 -
22. 平面列表
给定一个列表,该列表中的每个要素要么是个列表,要么是整数。将其变成一个只包含整数的简单列表。 注意事项如果给定的列表中的要素本身也是一个列表,那么它也可以包含列表。 样例给定 [1,2,[1,2]],返回 [1,2,1,2]。给定 [4,[3,[2,[1]]]],返回 [4,3,2,1]。挑战 请用非递归方法尝试解答这道题。思路:题目中既然是列表中还可能包含列表,就说明需要多次的循环,而递归函数就...原创 2018-03-04 08:26:22 · 191 阅读 · 0 评论 -
41. 最大子数组
给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。 注意事项子数组最少包含一个数样例给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6挑战 要求时间复杂度为O(n)思路:开始的时候思路比较简单,准备先找只有一个元素的最大和,再找2个元素最大和,直到全部元素,虽然这样可行,但是无法达到时间复杂度为O(n),所以改变了思路,采用顺序方...原创 2018-03-04 08:43:55 · 131 阅读 · 0 评论 -
44. 最小子数组
给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。 注意事项子数组最少包含一个数字您在真实的面试中是否遇到过这个题? Yes样例给出数组[1, -1, -2, 1],返回 -3思路和最大子数组一样,使用贪心算法,贪心选择是采用从顶向下、以迭代的方法做出相继选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题。随着算法的进行,将积累起其它两个集合:一个包含已经被考虑过并被选出的候选...原创 2018-03-04 09:11:51 · 165 阅读 · 0 评论 -
46. 主元素
给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。 注意事项You may assume that the array is non-empty and the majority number always exist in the array.样例给出数组[1,1,1,1,2,2,2],返回 1挑战 要求时间复杂度为O(n),空间复杂度为O(1)思路最简单的思路是...原创 2018-03-04 23:02:58 · 138 阅读 · 0 评论 -
50. 数组剔除元素后的乘积
给定一个整数数组A。定义B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], 计算B的时候请不要使用除法。样例给出A=[1, 2, 3],返回 B为[6, 3, 2]vector<long long> productExcludeItself(vector<int> &nums) { // write...原创 2018-03-05 13:21:32 · 121 阅读 · 0 评论 -
53. 翻转字符串
给定一个字符串,逐个翻转字符串中的每个单词。说明单词的构成:无空格字母构成一个单词输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括如何处理两个单词间的多个空格?在反转字符串中间空格减少到只含一个string reverseWords(string s) { // write your code here string word, lin...原创 2018-03-05 13:45:15 · 129 阅读 · 0 评论 -
55. 比较字符串
比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是 大写字母 注意事项在 A 中出现的 B 字符串里的字符不需要连续或者有序。您在真实的面试中是否遇到过这个题? Yes样例给出 A = "ABCD" B = "ACD",返回 true给出 A = "ABCD" B = "AABC", 返回 falsebool compareStrings(string &A, ...原创 2018-03-05 14:18:35 · 184 阅读 · 0 评论 -
56. 两数之和
给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 0 到 n-1。 注意事项你可以假设只有一组答案。您在真实的面试中是否遇到过这个题? Yes样例给出 numbers = [2, 7, 11, 15], target = 9, 返回 [0, 1].挑战 Either of ...原创 2018-03-05 14:54:17 · 167 阅读 · 0 评论 -
66. 二叉树的前序遍历
66. 二叉树的前序遍历 描述给出一棵二叉树,返回其节点值的前序遍历样例给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,2,3].挑战 你能使用非递归实现么? vector<int> a;vector<int> preorderTraversal(TreeNode * root) { // wr...原创 2018-03-06 22:37:43 · 149 阅读 · 0 评论 -
64. 合并排序数组
合并两个排序的整数数组A和B变成一个新的数组。 注意事项你可以假设A具有足够的空间(A数组的大小大于或等于m+n)去添加B中的元素。您在真实的面试中是否遇到过这个题? Yes样例给出 A = [1, 2, 3, empty, empty], B = [4, 5]合并之后 A 将变成 [1,2,3,4,5]void mergeSortedArray(int A[], int m, int B[], ...原创 2018-03-06 22:03:59 · 159 阅读 · 0 评论 -
39. 恢复旋转排序数组
给定一个旋转排序数组,在原地恢复其排序。说明什么是旋转数组?比如,原始数组为[1,2,3,4], 则其旋转数组可以是[1,2,3,4], [2,3,4,1], [3,4,1,2], [4,1,2,3]样例[4, 5, 1, 2, 3] -> [1, 2, 3, 4, 5]挑战 使用O(1)的额外空间和O(n)时间复杂度思路:先遍历找到数组中最小的数,然后再将数组的第一个拿出来,将后面的元素依...原创 2018-02-11 10:05:57 · 125 阅读 · 0 评论 -
8.旋转字符串
给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)样例对于字符串 "abcdefg".offset=0 => "abcdefg"offset=1 => "gabcdef"offset=2 => "fgabcde"offset=3 => "efgabcd"挑战 在数组上原地旋转,使用O(1)的额外空间思路:这个题可以简化为:将最后一个字原创 2018-01-23 21:33:13 · 168 阅读 · 0 评论 -
2.求任意数的阶乘尾数有几个0.
刚刚看到题的时候,是想先把阶乘的结果算出来,然后再每次除以10,多少次就是都少个0,但是当数字太大时,计算其阶乘结果太大,在运算性能和储存方面不好。 在重新思考后发现,阶乘中能被2整除的数的个数远远多于能被5整除的数的个数 所以只要数能被5整除的数的个数就可以知道最后有几个0,同时还要考虑,当阶乘中的数除完5后,还可能继续被5整除(例如:25,75)。所以还要继续找被25整除的数,同理再找5的原创 2018-01-23 09:18:27 · 581 阅读 · 0 评论 -
1.计算两数相加,不使用加号(+)问题。
在刚刚做这道题的时候,开始并没有头绪,在看到提示使用位运算符的时候,但是对这些符号的了解不太记得,所以在网上找了一些关于位运算符的资料,归纳如下:(供日后参考)1.“&”,二进制中相对位数的两个数都为1,结果才为1,否则结果为0,类似逻辑门中的与门。2.“|”,二进制中相对位数的两个数中有一个1或都为1,结果为1,否则结果为0,类似逻辑门中的或门。3.“~”,(单目运算符)二进制中相对原创 2018-01-23 09:05:25 · 753 阅读 · 0 评论 -
9. Fizz Buzz 问题
给你一个整数n. 从 1 到 n 按照下面的规则打印每个数:如果这个数被3整除,打印fizz.如果这个数被5整除,打印buzz.如果这个数能同时被3和5整除,打印fizz buzz.样例比如 n = 15, 返回一个字符串数组:[ "1", "2", "fizz", "4", "buzz", "fizz", "7", "8", "fizz", "bu原创 2018-01-24 20:24:17 · 256 阅读 · 0 评论 -
13. 字符串查找(普通算法和kmp算法)
描述对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1。样例如果 source = "source" 和 target = "target",返回 -1。如果 source = "abcdabcdefg" 和 target = "bcd",原创 2018-01-25 18:09:13 · 887 阅读 · 0 评论 -
14. 二分查找
给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1。样例在数组 [1, 2, 3, 3, 4, 5, 10] 中二分查找3,返回2。思路定三个坐标,头坐标,尾坐标,中间坐标,每次判断要查找的数和中间坐标的数比较大小,如果要找的数大于中间数,就让尾坐标原创 2018-01-26 12:23:03 · 172 阅读 · 0 评论 -
28. 搜索二维矩阵
写出一个高效的算法来搜索 m × n矩阵中的值。这个矩阵具有以下特性:每行中的整数从左到右是排序的。每行的第一个数大于上一行的最后一个整数。样例考虑下列矩阵:[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]给出 target = 3,返回 true挑战 O(lo原创 2018-01-26 20:32:29 · 162 阅读 · 0 评论 -
30. 插入区间
给出一个无重叠的按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。样例插入区间[2, 5] 到 [[1,2], [5,9]],我们得到 [[1,9]]。插入区间[3, 4] 到 [[1,2], [5,9]],我们得到 [[1,2], [3,4], [5,9]]。思路:直接将原创 2018-01-29 20:17:23 · 127 阅读 · 0 评论 -
35. 翻转链表
翻转一个链表样例给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null挑战 在原地一次翻转完成思路将列表中所有的节点全部往后移一位,在把最后一个拿出来放到第一个,并且将最后一个赋空。ListNode * reverse(ListNode * head) { // write you原创 2018-01-29 21:46:45 · 156 阅读 · 0 评论 -
60. 搜索插入位置
给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。你可以假设在数组中无重复元素。您在真实的面试中是否遇到过这个题? Yes样例[1,3,5,6],5 → 2[1,3,5,6],2 → 1[1,3,5,6], 7 → 4[1,3,5,6],0 → 0int searchInsert(vector<int> &A, int t...原创 2018-03-05 14:55:01 · 255 阅读 · 0 评论