摘要:
问题:将两个已排序的列表,合并为一个有序列表。
令 head 为两个列表表头中较小的一个,令 p 为新的已排序的最后一个元素。令 l1, l2 分别为两个列表中未排序部分的首节点。依次将 l1, l2 中的较小值追加到 p 后面,并调整 p 和 l1、l2较小者指针即可。 阅读全文
摘要:
问题:判断两个列表是否有相交的元素,若有,找出相交节点。
这题也是一道基础题,看了自己的列表知识还需要巩固下才好。
分别求出两个列表的长度 len1, len2 ,以及他们的长度差异 diff 阅读全文
摘要:
问题:给定列表表头,删除列表中值为 val 的元素。
比较方便的方法是,每次比较 p->next->val 与 val ,当相等时跳过 p->next 即可: p->next = p->next->next; 阅读全文
摘要:
问题:只给定单向列表中的一个节点,从列表中删除该节点。
删除列表的某个元素,只知道根据头节点,和待删节点值,遍历搜索到相同值,将其删除。对于给定节点从列表中删除,没有思路。在网上看了讲解,原来这个是列表的基本操作,O(1) 时间即可完成。看了 阅读全文
摘要:
问题:实现单向链表的插入排序。
这是比较常规的一个算法题目。 从左往右扫列表,每次将指针的下一个元素插入前面已排好序的对应位置中。 阅读全文
摘要:
问题:给定一个数组,求将数组元素拼凑成一个值最大的整数。
将整型数组的转化为字符串数组,用 std::sort 对字符串数组排序,使得排序后元素直接连接成为最大值整数。 阅读全文
摘要:
问题:给定一个区间数组,插入一个新的区间元素。区间数组已经按照 区间开始值升序排序。
这道题的思路不难也比较直观,时间效率为 O(n),只是需要处理的边界情况比较多。例如有首部插入区间数组、尾部插入区间数组、以及完全覆盖的区间数组情况。 阅读全文
摘要:
问题:在一个环形的路径上,有 n 个加油站。每个加油站 i 有汽油 gas[i] ,从 i 行驶到下一个加油站需要耗油 cost[i],汽车的油箱没有限制。找出一个加油站,从该加油站能走完整个环形路径。其中,本题目只有唯一一个解。 阅读全文
摘要:
问题:给定一个数组,每个元素表示你站在该位置可以跳的最大距离。假设你站在第一个元素,求你可以跳到最后元素的最小跳跃次数。
题目简洁,解题却不容易。
数组中的元素值是代表一个范围区间,题目需要求的是最小跳跃次数,也就是每一次的跳跃覆盖的范围应该尽可能远,这是一个大致思路。 阅读全文
摘要:
问题:给定一个数字,假设你站在第一个元素,每个元素表示你可以跳得最大距离。求你是否可以跳到最后一个元素。
思路二,结合思路一以及超时的 test case 发现,其实对于 A[i] 无需检查 k 次,只需要检查 A[i] 和右边最近的可达终点的元素的距离是否小于 A[i] 值即可。 阅读全文