数据结构
Holmes96
这个作者很懒,什么都没留下…
展开
-
微软俱乐部编程题第一周第一题:数组中重复的数字
题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中第一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 思路 首先将所给数组提取出所有不重复的数字,并将所有独立数字构成字典中的键。 然后遍历所给数组里的数字,如有重复...原创 2018-11-27 22:55:24 · 167 阅读 · 0 评论 -
微软俱乐部编程题第一周第二题:矩形覆盖
题目描述 我们可以用2x1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2x1的小矩形无重叠地覆盖一个2xn的大矩形,总共有多少种方法? 思路 我们先把2xn的覆盖方法记为f(n)。用第一个1x2小矩阵覆盖大矩形的最左边时有两个选择,竖着放或者横着放。当竖着放的时候,右边还剩下2x(n-1)的区域,这种情况下的覆盖方法记为f(n-1)。接下来考虑横着放的情况。当1x2的小矩形横着放在左上...原创 2018-11-27 23:08:54 · 245 阅读 · 0 评论 -
微软俱乐部编程题第一周第三题:最小的k个数
题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。 注意:算法的时间复杂度需要小于O(nlogn)。 思路 采用快速排序法,算法的时间复杂度为nlog(n)。注意到题目要求时间复杂度需要小于O(nlogn),并且输出结果只需找出最小的K个数即可。 所以如果在某次快速排序中,选择的基准数的大小刚好是整个数...原创 2018-11-27 23:16:30 · 125 阅读 · 0 评论 -
微软俱乐部编程题第二周第二题:将矩阵中的元素置零
题目描述 给定一个mxn矩阵,如果矩阵中有元素0,则将其所在的行和列都置为0。请使用原地算法。 例如:输入:[ [1,1,1], [1,0,1], [1,1,1] ] 输出:[ [1,0,1], [0,0,0], [1,0,1] ] 思路 方案一 设置两个长度分别为m和n的标记数组分别记录行和列是否有0,根据标记数组将某些矩阵元素置0。 class Solution: def se...原创 2018-12-05 19:47:37 · 267 阅读 · 0 评论 -
微软俱乐部编程题第二周第三题:删除链表中重复的结点
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 思路 删除重复结点,只需要记录当前结点前的最晚访问过的不重复结点pPre、当前结点pCur、指向当前结点后面的结点pNext的三个指针即可原创 2018-12-05 20:12:43 · 87 阅读 · 0 评论 -
微软俱乐部编程题第二周第一题:数值的整数次方
题目描述 实现函数double Power(double base,int exponent),求base的exponent次方。不得使用库函数,不需要考虑大数问题。 思路 首先,考虑一下幂方数的不同情况:幂方数为 0,结果为1;幂方数小于 0,可以考虑先转化成正整数,再对结果求倒数。 当n为偶数, a^n = a^(n/2) * a^(n/2) 当n为奇数, a^n = a^((n-1...原创 2018-12-03 23:41:17 · 122 阅读 · 0 评论