经典算法题
白色彩虹
这个作者很懒,什么都没留下…
展开
-
剑指offer刷题 数字排列
题意输入一组数字(可能包含重复数字),输出其所有的排列方式样例输入:[1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]注意这里数组中的元素会出现相同的情况,如果是不相同的数算法简单一下方案数是(n!)这道题目的思路是采用枚举的方法把数字填入坑中,但是如何处理数字相同的情况?方法是先通过sort排序把数字...原创 2019-05-03 19:48:55 · 257 阅读 · 0 评论 -
多路归并总结
23. Merge k Sorted ListsExample:Input:[1->4->5,1->3->4,2->6]Output: 1->1->2->3->4->4->5->6思路2.1. 方法一在 合并两个有序链表 的基础上,我们很容易想到第一种解法,首先我们将第一个链表和第二个链表合并成一个新的链...原创 2019-05-06 17:19:34 · 1090 阅读 · 0 评论 -
剑值offer刷题 找出数组中重复的数字
可以修改数组找出数组中重复的数字给定一个长度为 n+1 的数组nums,数组中所有的数均在 1∼n 的范围内,其中 n≥1。请找出数组中任意一个重复的数,但不能修改输入的数组。样例给定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。返回 2 或 3。要求 如果只能使用 O(1) 的额外空间和使用o(n)的时间来解决思路寻找重复的元素很容易想到用hash表进行遍历如...原创 2019-05-06 20:59:02 · 311 阅读 · 0 评论 -
二叉树的前序遍历、中序遍历、后序遍历的非递归版本
二叉树的前序非递归遍历思路:对每个结点按照 根->右->左 的顺序入栈,出栈的顺序就是前序遍历的结果。class Solution {public: vector<int> preorderTraversal(TreeNode* root) { if(!root) return vector<int>();...原创 2019-05-15 16:16:46 · 399 阅读 · 0 评论 -
用二分查找法解决旋转数组的总结
用二分算法实现Sqrt(x)函数这道题用二分模板的第二个但是写的使用要注意mid*mid可能出现数据溢出的情况所以用mid*1ll*mid把int类型变成long long 类型class Solution {public: int mySqrt(int x) { int l=0,r=x; while(l<r) { ...原创 2019-05-15 16:44:26 · 329 阅读 · 0 评论 -
回文链表和链表排序
回文链表思路:找到链表的中间节点然后前面一部分进行逆置,变成两个链表,然后将值逐个进行比较样例Input: 1->2->2->1Output: trueclass Solution {public: bool isPalindrome(ListNode* head) { int lenth, i; ListNode *point...原创 2019-05-15 17:07:38 · 122 阅读 · 0 评论 -
记忆力搜索
题目:在数字矩阵中,从左上角到右下角,每次只能向右或向下,如何规划路径,能获得最大数字总和?思路1:使用贪心,每次都选取矩阵中最大的值,进行前进,但是这种方法得到的不是最优解,可能出现因小失去的情况思路2:使用搜索算法广度优先算法求解最优解深度优先算法求解全部解这里求全部解,并获取最大值,所用用深度优先算法如何提高效率呢?算法的优化其实就是减少不必要的计算可以使用记忆力搜索,这样可...翻译 2019-05-16 16:56:02 · 237 阅读 · 0 评论 -
st算法
题目背景这是一道ST表经典题——静态区间最大值题目描述给定一个长度为 N的数列,和 M 次询问,求出每一次询问的区间内数字的最大值。输出格式:输出包含 M M行,每行一个整数,依次表示每一次询问的结果。输入输出样例输入样例#1:8 89 3 1 7 5 6 0 81 61 52 72 61 84 83 71 8输出样例#1:99779879思路...翻译 2019-05-16 21:41:19 · 523 阅读 · 0 评论