
Lintcode easy
文章平均质量分 75
闪闪亮亮
人生就是这样,耐得住寂寞,才能守得住繁华。每一个优秀的人,都有一段沉默的时光。那一段时光,付出了很多努力,忍受孤独和寂寞,不抱怨不诉苦,日后说起时,连自己都能被感动。
展开
-
用栈模拟汉诺塔问题
在经典的汉诺塔问题中,有 3 个塔和 N 个可用来堆砌成塔的不同大小的盘子。要求盘子必须按照从小到大的顺序从上往下堆 (如,任意一个盘子,其必须堆在比它大的盘子上面)。同时,你必须满足以下限制条件:(1) 每次只能移动一个盘子。(2) 每个盘子从堆的顶部被移动后,只能置放于下一个堆中。(3) 每个盘子只能放在比它大的盘子上面。请写一段程序,实现将第一个堆的盘子移动到最后一个原创 2017-08-03 11:55:08 · 603 阅读 · 0 评论 -
两数之和 & 三数之和
给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 1 到 n,不是以 0 开头。 注意事项你可以假设只有一组答案。样例给出 numbers = [2, 7, 11, 15], target = 9, 返回 [1原创 2017-08-31 16:41:49 · 695 阅读 · 0 评论 -
最大子数组
题目:输入一个整型数组,数据元素有正数也有负数,求元素组合成连续子数组之和最大的子数组,要求时间复杂度为O(n)。例如:输入的数组为1, -2, 3, 10, -4, 7, 2, -5,最大和的连续子数组为3, 10, -4, 7, 2,其最大和为18。思路:主要是一个动态规划问题。找出状态方程和状态转移方程。设sum[i]为以第i个元素结尾且和最大的连续子数组。假原创 2017-08-30 11:55:27 · 275 阅读 · 0 评论 -
x的平方
实现 int sqrt(int x) 函数,计算并返回 x 的平方根。样例sqrt(3) = 1sqrt(4) = 2sqrt(5) = 2sqrt(10) = 3挑战O(log(x)) 采用二分法进行处理,重点是要注意不要越界。为了加快计算速度,可以从一半开始计算。代码如下:class Solution原创 2017-08-29 16:51:06 · 1592 阅读 · 0 评论 -
两两交换链表中的节点
给一个链表,两两交换其中的节点,然后返回交换后的链表。样例给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。挑战 你的算法只能使用常数的额外空间,并且不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。递归的方法如下(首先处理两个节点的情况,交换两个节点,然后处理剩下的节点,进行递归处理)/** * D原创 2017-08-14 11:56:59 · 261 阅读 · 0 评论 -
删除链表中倒数第n个节点
题目给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。 注意事项 链表中的节点个数大于等于n 样例 给出链表1->2->3->4->5->null和 n = 2.删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.思路:类似于寻找倒数第n个节点。这里倒退的时候保存倒数n+1的节点,那么方便后面的删除的操作。代码如下原创 2017-08-12 16:05:24 · 224 阅读 · 0 评论 -
删除排序链表中的重复元素
问题描述:定一个排序链表,删除所有重复的元素每个元素只留下一个。样例给出 1->1->2->null,返回 1->2->null给出 1->1->2->3->3->null,返回 1->2->3->null思路:设置两个指针,一个当前指针,一个前继指针。依次遍历这个链表,删除重复的元素。代码如下:/** * Definiti原创 2017-08-12 11:59:30 · 289 阅读 · 0 评论 -
链表划分
题目描述:给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对顺序。样例:给定链表 1->4->3->2->5->2->null,并且 x=3,返回 1->2->2->4->3->5->null思路:分别申请两个指针left和right,小于x的添加到 left中,大于等于x的添加到right中;最后,将 r原创 2017-08-12 11:18:59 · 317 阅读 · 0 评论 -
链表倒数第n个节点
找到单链表倒数第n个节点,保证链表中节点的最少数量为n。样例给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1.思路:这个比较简单,只要保证两者之间的长度为n,再同时后退,就可以知道倒数那个元素是多少。代码如下:/** * Definition of ListNode * class ListNode { * public:原创 2017-08-11 22:53:12 · 445 阅读 · 0 评论 -
合并两个排序链表
问题描述:将两个排序链表合并为一个新的排序链表样例给出 1->3->8->11->15->null,2->null, 返回 1->2->3->8->11->15->null。方法一(非递归方法):/** * Definition of ListNode * class ListNode { * public: * int val;原创 2017-08-11 22:17:09 · 175 阅读 · 0 评论 -
在O(1)时间复杂度删除链表节点
问题描述:给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。样例Linked list is 1->2->3->4, and given node 3, delete the node in place 1->2->4思路,直接将node后继节点的值复制到当前要删除的节点,同时将后继节点的next原创 2017-08-11 21:00:06 · 254 阅读 · 0 评论 -
删除链表中的元素
删除链表中等于给定值val的所有节点。样例给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。思路:处理链表问题,一般需要设置两个指针,一个指向当前节点,一个指向后继节点。然后进行删除等操作。代码如下:/** * Definition for singly-link原创 2017-08-11 11:45:45 · 308 阅读 · 0 评论 -
有效的括号序列判断
给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' 和 ']', 判定是否是有效的括号序列。样例括号必须依照 "()" 顺序表示, "()[]{}" 是有效的括号,但 "([)]"则是无效的括号。挑战O(n)的时间,n为括号的个数其中栈的基本操作有:1、入栈 push()2、出栈 pop()3、原创 2017-08-02 13:07:18 · 485 阅读 · 0 评论 -
翻转链表
翻转一个链表样例给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null原地翻转,需要借助三个临时指针,进行原地翻转,简单的理解就是讲指向进行反向。具体代码如下:/** * Definition of ListNode * * class ListNode { * public: * int v原创 2017-08-14 11:55:12 · 205 阅读 · 0 评论