算法
常见算法以及leetcode刷题
Jackybored
迷茫的研究生
展开
-
Leetcode刷题常用函数总结(C++)——随刷题更新中
字符串转整型stoi:stoi(s,start,base)//s是要转换的字符串,start是起始位置,base是要转换的整数进制,默认是从0位置开始,转换为10进制int main() { string str = "123"; int res = stoi(str); cout << res << endl; system("pause"); return 0;}数值转字符串to_stringto_string(val)//val可以是任何数值类型i原创 2020-06-16 22:23:38 · 1920 阅读 · 0 评论 -
实现快速求幂
常规法循环求幂:int Pow(int x, int n){ int result = 1; for (int i=1; i<=n;i++){ result *= x; } return result; 时间复杂度为O(N);当数据量大时比较耗时递归法当计算X^62时,不必每次仅乘一个X,如下:X^62 = X^31 * X...原创 2019-04-11 20:10:24 · 271 阅读 · 0 评论 -
常用排序算法
插入排序最简单的算法之一就是插入排序,插入排序的时间复杂度是O(N2),并且这个界是精确的,如果输入是反序的,即可达到该边界,如果输入数据已经预先排序,那么运行时间是O(N)。平均情况是O(N2)。template<typename comparable>void insertionSort(vector<comparable>& a) { for (in...原创 2020-05-03 10:19:10 · 114 阅读 · 0 评论 -
矩阵遍历问题
这里记录些常见的矩阵遍历问题,矩阵遍历没有什么简单的方法,必须要遍历矩阵的每个元素,因此在时间复杂度上没有什么简单的方法,不过遍历时的方式可以不同。首先看下面例题leetcode54给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。输入:[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]]输出: [1,...原创 2019-12-03 21:57:34 · 1280 阅读 · 0 评论 -
基数排序法
基数排序如果我们有N个整数,范围从1到M,(或从0到M-1),我们可以利用这个信息得到一种快速排序,叫做桶式排序。我们留置一个数组,称之为Count,大小为M,并初始化为0。于是,Count有M个单元,开始都是空的。当被读入时相应的桶加增一。所有输入被读入后扫描数组,打印出排好序的表。该算法花费O(M+N)。对于有p位的数,该排序的时间复杂度为O(P(M+N))。链表设计#include &...原创 2019-04-16 14:07:02 · 274 阅读 · 0 评论 -
字谜游戏
输入是由一些简单字母和单词组成,目标是找出字谜中的单词,这些单词可能是水平竖直和对角线的任何方向放置的。暴力求解法即对每个单词进行寻找,八个方向分别寻找。#include <iostream>#include <string>using namespace std;char puzzle[4][4] = { {'t','h','i','s'}, ...原创 2019-04-12 19:48:04 · 316 阅读 · 0 评论 -
回溯法常见题型
简介回溯法是五大经典算法之一,不过个人感觉其算是五大算法中的最简单的一种了,回溯法解决主要解决搜索问题,即枚举出所有的情况。其有固定的模板,而且常见题型固定,只要掌握了这几种基本题型就可以做出大多数回溯法的题。回溯法主要找出这三个问题就可解决:路径:也就是已经做出的选择。选择列表:也就是你当前可以做的选择。结束条件:也就是到达决策树底层,无法再做选择的条件。代码方面直接套用如下模板即可...原创 2019-12-05 22:39:44 · 365 阅读 · 0 评论 -
全排列
给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]思路:寻找所有可能的组合,涉及到搜索问题,可采用回溯法+递归实现。基本思想每次将数组的一个数放到最前面,然后再对剩下的数组进行类似的操作class Solution: def p...原创 2019-05-25 17:09:50 · 118 阅读 · 0 评论 -
分割回文串
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入: “aab”输出:[[“aa”,“b”],[“a”,“a”,“b”]]class Solution {public: vector<vector<string>>result; vector<string>temp; ...原创 2019-05-25 13:47:54 · 298 阅读 · 0 评论 -
矩阵类动态规划
矩阵类动态规划,也可以叫做坐标类动态规划,一般这类问题都会给你一个矩阵,矩阵里面有着一些信息,然后你需要根据这些信息求解问题。其实 矩阵可以看作是图的一种,怎么说?你可以把整个矩阵当成一个图,矩阵里面的每个位置上的元素当成是图上的节点,然后每个节点的邻居就是其相邻的上下左右的位置,我们遍历矩阵其实就是遍历图,在遍历的过程中会有一些临时的状态,也就是子问题的答案,我们记录这些答案,从而推得我们最后...原创 2019-12-02 17:05:13 · 837 阅读 · 0 评论 -
单词拆分
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以被拆分成...原创 2019-05-25 13:20:47 · 3334 阅读 · 0 评论 -
最长上升子序列
给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?思路一,动态规划处理...原创 2019-05-10 16:51:15 · 136 阅读 · 0 评论 -
零钱兑换问题
零钱兑换给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出: -1说明:你...原创 2019-05-08 16:49:55 · 1575 阅读 · 0 评论 -
跳跃游戏
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最...原创 2019-11-12 14:38:11 · 139 阅读 · 0 评论 -
至少有K个重复字符的最长子串
找到给定字符串(由小写字符组成)中的最长子串 T , 要求 T 中的每一字符出现次数都不少于 k 。输出 T 的长度。示例 1:输入:s = “aaabb”, k = 3输出:3最长子串为 “aaa” ,其中 ‘a’ 重复了 3 次。示例 2:输入:s = “ababbc”, k = 2输出:5最长子串为 “ababb” ,其中 ‘a’ 重复了 2 次, ‘b’ 重复了 3...原创 2019-05-07 21:18:52 · 584 阅读 · 0 评论 -
最长连续序列(leetcode)
给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。示例:输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。思路:求最长即最值问题,可考虑动态规划解决。假设hash_map存储每个数的连续序列的最长值,则中间某个数的连续序列长度为hash[num-1]+hash[num+1]...原创 2019-05-07 21:08:30 · 740 阅读 · 1 评论 -
动态规划
定义动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初...原创 2019-04-29 20:52:38 · 185 阅读 · 0 评论