![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
lintcode测试
liu_matthew
talk is cheap
展开
-
之字形遍历数组
之字形遍历数组 题目要求:给丁一峰大小为m*n的矩阵,要求之字形遍历该矩阵,例如: [[1,2,3,4], [5,6,7,8], [9,10,11,12]] 应该输出[1,2,5,9,6,3,4,7,10,11,8,12];解题思路: 给定一个矩阵,我们从第一个元素进行遍历知道最后一个元素,遍历方式无非是以下四种, step:1 向右移动(这种移动方式只会出现在row==0原创 2017-02-28 11:21:00 · 887 阅读 · 0 评论 -
快乐数
快乐数 一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是无限循环但始终变不到1。如果可以变为1,那么这个数就是快乐数。 1^2 + 9^2 = 82 8^2 + 2^2 = 68 6^2 + 8^2 = 100 1^2 + 0^2 + 0^2 = 1 要求输入一个数,判断它是否为快乐数 算法的思路很简单,原创 2017-02-21 17:41:25 · 945 阅读 · 0 评论 -
插入区间
12 插入区间 Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary). You may assume that the intervals were initially sorted according to their start times转载 2017-02-21 17:41:53 · 466 阅读 · 0 评论 -
链表插入排序
链表插入排序 题目描述:用插入排序法对链表进行排序 given 1->3->2->0->NULL, return 0->1->2->3->NULL 算法描述: 算法一:将题目中给出的链表数据结构转换为C++标准库中的标准list数据结构,调用c++标准库中的list算法进行排序即可完成 算法二:将题目中给出的链表数据结构转换为vrector,对vector进行插入排序,插入排序的算法如下所原创 2017-02-21 17:42:49 · 469 阅读 · 0 评论 -
翻转二叉树
题目要求:翻转一颗二叉树,使得该二叉树的所有左右子树发生翻转; 例: 解:该题可用递归,将左右子树的位置进行翻转置换 void invertBinaryTree(TreeNode *root) { // write your code here //算法设计思路:遍历二叉树的所有节点,然后将它的左右儿子进行位置上的对调 //if the ro原创 2017-02-21 19:05:51 · 426 阅读 · 0 评论 -
左填充
左填充 题目要求:leftpad("foo", 5)>> " foo"leftpad("foobar", 6)>> "foobar"leftpad("1", 2, "0")>> "01"分析: 用单个字符来填充给定字符串,使其达到输入当中的size要求。由于题目中给的条件和描述都很模糊,所以这道题在lintcode上做出来的人很少,其实看懂题目的意思,这道题也就很好做了。算法分析:st原创 2017-02-22 11:19:21 · 471 阅读 · 0 评论 -
最后一个单词的长度
题目要求: 给定一个字符串, 包含大小写字母、空格’ ‘,请返回其最后一个单词的长度。如果不存在最后一个单词,请返回 0 。解题思路: 本题难度为容易,也没有需要注意的细节,直接从给定字符串的最后一个字符开始向前移动指针,直到指向的字符内容为’ ‘时,返回计数器;int lengthOfLastWord(string &s){ vector<char> tmp; int res原创 2017-02-23 11:54:40 · 285 阅读 · 0 评论 -
返回最长上升子序列
返回最长子序列 题目要求: 给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上升连续子序列可以定义为从右到左或从左到右的序列。)样例 给定 [5, 4, 2, 1, 3], 其最长上升连续子序列(LICS)为 [5, 4, 2, 1], 返回 4.给定 [5, 1, 2, 3, 4], 其最长上升连续子序列(LICS)为 [1,原创 2017-02-24 11:09:42 · 384 阅读 · 0 评论 -
最长单词
最长单词 题目描述: 给一个词典,找出其中所有最长的单词。 { “dog”, “google”, “facebook”, “internationalization”, “blabla” } 中, 最长的单词集合为 [“internationalization”]在词典{ “like”, “love”, “hate”, “yes” }原创 2017-02-25 11:06:46 · 707 阅读 · 0 评论 -
将整数A转换为整数B
将整数A转换为整数B将10进制整数A转换为10进制整数B,究竟改变了多少bit位。version 1将A与B进行异或操作得到C,统计C中1的个数;int countBit3(int A, int B){ int count = 0; int C = A ^ B; vector<int> c = trans2Binary(C); for (size_t i = 0;原创 2017-02-21 17:39:23 · 443 阅读 · 0 评论 -
克隆二叉树
克隆二叉树题目要求:返回一个与给定二叉树相同结构域内容的二叉树 算法思想:克隆二叉树的步骤可分为两步进行,二叉树的前序遍历和前序遍历二叉树 下面直接贴代码: TreeNode* cloneTree(TreeNode *root) { // Write your code here //pre order traverse binary tree原创 2017-02-21 17:37:56 · 384 阅读 · 0 评论 -
返回两数组的交
题目要求:返回两数组的交,同样的数字不能出现。如A = [1,2,2,1,]; B= [ 2,2];则answer = [2]1.1 version one由于第一次编写C++程序,采样最原始的方法,将数组2中的每个元素在数组一中进行遍历查找。预处理是将两数组分别排序并删除重复元素。vector<int> intersection(vector<int>& nums1, vector<int>& n原创 2017-02-21 17:25:24 · 308 阅读 · 0 评论 -
合并排序数组
题目要求:合并两个排序好的数组2.1 version one完全采用C++内置函数,不用考虑任何算法,运行通过 vector<int> mergeSortedArray(vector<int> &A, vector<int> &B) { // write your code here vector<int>nums_out; nums_out.insert(num原创 2017-02-21 17:28:21 · 363 阅读 · 0 评论 -
移动零
题目要求:在不改变数组中元素顺序的前提下,将数组中的零元素移至数组末尾; version one 由于题目过于简单,这里就只贴出一种方案,复杂度为o(n)o(n),先遍历数组,将非零元素依次填充,最后将数组尾后补零,直到填充满数组为止。唯一的技巧就是用一个 size_t变量来统计数组当前的位置。void moveZeroes(vector<int>& nums) { // Wr原创 2017-02-21 17:29:32 · 224 阅读 · 0 评论 -
查询斐波那契数列
查询斐波那契数列version one最容易想到的做法当然是递归的方法,采用递归的时候只要控制好跳出递归的条件即可,但是当计算的数十分大时,递归调用会产生庞大的冗余计算,这是比较耗时的,改进方案见version two、int fibonacci(int n) { // write your code here if(n == 1) {原创 2017-02-21 17:30:20 · 374 阅读 · 0 评论 -
不使用算术运算符实现加法运算
不使用算术运算符实现加法运算version one在不使用算术运算符的前提下实现数的加法运算,首先应该想到的是用位运算符,当所有数的二进制数相加不会产生进位的情况下,返回的二进制数就是真值。当相加的结果产生进位时,将两个数进行相与操作,并对两个数进行异或操作并左移一位,重复上述模拟进位的过程,直到不出现进位。 int aplusb(int a, int b) { // write原创 2017-02-21 17:31:20 · 681 阅读 · 0 评论 -
二进制求和
二进制求和题目要求: ![http://static.zybuluo.com/liu-matthew/x3gzdg2kegu0k81kgo1cr7rh/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20160821124353.png][1]6.1 version one string result = ""; int c = 0, num = 0;原创 2017-02-21 17:33:38 · 347 阅读 · 0 评论 -
链表求和
链表求和version one两个指针分别遍历两个链表,只需要注意好进位关系即可。其中c代表进位,temp代表链表中数字的临时加和。 ListNode *addLists(ListNode *l1, ListNode *l2) { // write your code here if (l1 == NULL) { ret转载 2017-02-21 17:36:03 · 414 阅读 · 0 评论 -
二进制数当中的1
二进制数当中的1题目要求:给定一个整型的数,返回此整型数的对应二进制数当中1的数目、version 1这一版本的算法,是先计算输入数对应的二进制数,将二进制序列存放在一个vector当中,最后通过计算二进制序列当中元素1的个数返回答案。唯一需要注意的是对输入的负数要先进行处理,这里采用的处理方式是直接采用强制类型转换。 int countOnes(int num) { // wr原创 2017-02-21 17:37:00 · 381 阅读 · 0 评论 -
主元素
主元素 题目描述:给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。解题思路:此题属于简单题,只需要注意计数器的细节就可以了;int majorElements(vector<int> nums){ int major_length = floor(nums.size() / 2); sort(nums.begin(), nums.end());原创 2017-02-27 10:58:01 · 254 阅读 · 0 评论