algorithm
文章平均质量分 74
蜗牛一步一步往上爬
计算机视觉研究生
展开
-
寻找无序数组中第k大的数
对于一个无序的数组,怎样找到其中第k大的数呢?下面总结几种方法。1.直接排序法使用常见的归并排序、堆排序等算法对数组进行排序,然后找到第k大的数。排序算法的时间复杂度为O(nlogn),所以算法总的时间复杂度为O(nlogn)。// Simple C++ program to find k'th biggest element#include<iostream>#include<algorith原创 2016-04-18 10:39:13 · 13942 阅读 · 0 评论 -
Binary search and lower_bound, upper_bound
传统的二分查找是为了寻找目标数在一个有序数组中是否存在的问题。返回值为布尔型变量(true or false)。但是有时候需要知道更多信息,比如如果存在,那么在数组中该数出现的第一个位置(left most)和最后一个位置的索引是多少?如果不存在,那么如果把该数插入到数组中去,应该插入到哪个位置?所以需要深入一步探索二分查找算法。C++中给出了几个库函数binary_search(),lower_b原创 2016-09-13 19:35:10 · 736 阅读 · 0 评论 -
improved partition in quick sort
original solution参考算法导论实现的分组算法int partition(vector<int>& nums, int p, int r) { int x = nums[r]; int s = p - 1; // the last smaller for (int k = p; k < r; ++k) { if (nums[k] <= x){原创 2017-09-29 10:15:39 · 521 阅读 · 0 评论 -
二叉树的遍历-Recursive/Iterative/Morris
二叉树是常见的数据结构,二叉树相关的算法题目也是非常常见的。下面总结以下二叉树的前序/中序/后序遍历方法,分别用递归(O(n) Space),迭代(O(lgn Space)),Morris(O(1) Space)方法实现。二叉树遍历的时间复杂度都是O(n),不同方法的区别主要是在空间复杂度上。递归遍历递归是一种非常直观的方法,也是最容易实现的方法。递归的方法的空间复杂度为O(n)。 节点的定义如下原创 2017-09-25 09:43:52 · 1770 阅读 · 0 评论 -
Red Black Tree
最近面试被问了好多遍红黑树,收集下资料,以后慢慢研究…Referncehttp://www.teachsolaisgames.com/ http://www.cs.princeton.edu/~rs/talks/LLRB/RedBlack.pdf http://www.cs.princeton.edu/~rs/talks/LLRB/LLRB.pdf原创 2016-09-19 20:08:26 · 645 阅读 · 0 评论 -
LeetCode 324. Wiggle Sort II
Problem DescriptionGiven an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]….Example: (1) Given nums = [1, 5, 1, 1, 6, 4], one possible answer is [1, 4, 1, 5, 1, 6].原创 2016-09-03 17:38:48 · 877 阅读 · 0 评论 -
Fabonacci 数列问题
今天面试,被问到求fabonacci数列的第n个数这个问题,当时用O(n)复杂度的迭代方法做出来了,然后面试官继续问了如何实现O(log(n))的时间复杂度的算法,最后还问了n大概为多大时结果就会溢出(用unsigned int来保存结果)。Fabonacci数列Fabonacci数列是指数列中的任一项都等于前两项之后,通项公式为: F(n)=F(n−1)+F(n−2)F(n) = F(n-1)+原创 2016-09-02 22:04:16 · 1584 阅读 · 0 评论 -
腾讯2016软开实习生笔试题-编程1:蛇形矩阵
周日晚上参加的腾讯实习生笔试,两个编程题不难,当时做了但是没看到结果,再重做一遍,记录一下。问题: 输入一个整数n,输入n对应的蛇形矩阵,如 n =3 时,蛇形矩阵:187296345 \begin{matrix} 1 & 2 & 3 \\ 8 & 9 & 4 \\ 7 & 6 & 5 \end{matrix} 程序功能 输入:3 输出:1 2 3 8 9 4原创 2016-04-04 22:40:47 · 1636 阅读 · 0 评论 -
Coding练习题-钻石重量比较
小明陪小红去看钻石,他们从一堆钻石中随机抽取两颗并比较她们的重量。这些钻石的重量各不相同。在他们们比较了一段时间后,它们看中了两颗钻石g1和g2。现在请你根据之前比较的信息判断这两颗钻石的哪颗更重。给定两颗钻石的编号g1,g2,编号从1开始,同时给定关系数组vector,其中元素为一些二元组,第一个元素为一次比较中较重的钻石的编号,第二个元素为较轻的钻石的编号。最后给定之前的比较次数n。请返回这两颗原创 2016-08-01 10:51:45 · 1022 阅读 · 0 评论 -
Leetcode168. Excel Sheet Column Title
Probelm DescriptionGiven a positive integer, return its corresponding column title as appear in an Excel sheet. For example:1 -> A2 -> B3 -> C...26 -> Z27 -> AA28 -> AB Thinking:这个问题是 Easy 型的,也原创 2016-07-20 19:42:14 · 502 阅读 · 0 评论 -
腾讯2016软开实习生笔试题-编程2:最大回文子串长度
笔试编程第2题是一个字符串题,要求给定字符串最大长度的子串,思路也很明了。我是使用的带备忘录的递归方法(recursion with memorization)。 问题:求给定字符串s的回文(palindrome)子串中,长度最大的回文子串的长度。 回文(palindrome)是指从左往右读和从右往左读字符串,看到的字符串都是一样的。比如“cabbeaf”,回文子串包括”c”“aba”“a原创 2016-04-05 10:53:21 · 1353 阅读 · 0 评论