
算法
文章平均质量分 71
算法实战学习
JasonCPLUS
这个作者很懒,什么都没留下…
展开
-
计算器、中文转数字
1.字符串转整数string s = "458";int n = 0;for (int i = 0; i < s.size(); i++) { char c = s[i]; n = 10 * n + (c - '0');}// n 现在就等于 4582.处理加减法我们拿字符串算式1-12+3为例,来说一个很简单的思路:1、先给第一个数字加一个默认符号+,变成+1-12+3。2、把一个运算符和数字组合成一对儿,也就是三对儿+1,-12,+3,把它们转化成数原创 2021-03-10 21:20:45 · 493 阅读 · 0 评论 -
转载_递归树求递归算法的时间复杂度
递归算法时间复杂度的计算方程式一个递归方程: 在引入递归树之前可以考虑一个例子: T(n) = 2T(n/2) + n2 迭代2次可以得: T(n) = n2+ 2(2T(n/4) + (n/2)2) 还可以继续迭代,将其完全展开可得: T(n) = n2+ 2((n/2)2+ 2((n/22)2+ 2((n/23)2+ 2((n/24)2+…+2((n/2i)2+ 2T(n/2i + 1)))…)))) ……(1) 而当n/2i+...转载 2020-12-20 20:42:38 · 238 阅读 · 0 评论 -
随机排列实现 -shuffle算法
随机排列实现 -shuffle算法洗牌算法(shuffle):原理是,一个数A,随机选一个在这个数A之前的下标,将这个下标对应数字与A对换;function shuffleArray(totalLength) { let randomArray = {}, randomIndex, temp; for (let i = 0; i < totalLength; i ++) { randomArray[i] = i; } //var randomArray = {1, 2,原创 2020-12-03 19:22:44 · 1032 阅读 · 0 评论 -
动态规划之力扣股票类问题
//121. 买卖股票的最佳时机 public int maxProfit(int[] prices){ if(prices.length==0) return 0; int res = 0; int min = prices[0]; for (int p : prices) { min = Math.min(min,p); res = Math.max(res,p-min);...原创 2020-11-08 14:51:49 · 192 阅读 · 0 评论 -
经典算法题:字典树、并查集、单调栈、二分、带标记函数dp、树、全排列、字符串问题等常用算法
1.字典树字典树,又称 Trie 树,是一种树形结构。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串)。主要思想是利用字符串的公共前缀来节约存储空间。在实际运用中,比如我们要储存大量的单词在一个文本中,而且还要查找某个单词是否存在,如果存在,请输出出现了多少次。考虑到有大量的单词而且还要询问出现了多少次,考虑到无法用字符串直接存储并进行遍历,所以就有了字典树这种高级数据结构。字典树的主要思想是利用字符串的公共前缀来节约存储空间。如上图所示,从根节点开始到每一个红色标记(end.原创 2020-11-01 21:45:31 · 436 阅读 · 0 评论 -
二叉树三种遍历方式的非递归实现
树的递归实现方式很简单,下面介绍三种遍历的非递归实现。树的遍历有个特点,那就是在处理具体问题时,绝大多数情况下是在当前循环、或函数(或是子树)的根节点来处理的,能够注意到当前根节点是如何从上个根节点得来是关键。1.先序遍历注意栈先进后出,先压右节点。void preOrder(node *root){ stack<node*>sk; sk.push(root); while(!sk.empty()){ node *cur = sk.to原创 2020-10-27 09:53:11 · 618 阅读 · 0 评论 -
反转链表--清晰易懂的两种方法
反转一个单链表。如下示例::输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULLpublic class ListNode { int val; ListNode next; ListNode(int x) { val = x; }}一、 迭代法:注意观察示例:1->2->3->4->5->NULL的反转可以看成:NULL<-1<原创 2020-10-13 10:45:52 · 440 阅读 · 0 评论 -
LeetCode刷题过程中的一些小tips
字符串切割的使用频率还是挺高的,string本身没有提供切割的方法,但可以使用stl提供的封装进行实现或者通过c函数strto...原创 2020-08-10 19:05:24 · 255 阅读 · 0 评论 -
三种基本背包问题
一、0/1背包问题问题描述:有n件物品和容量为m的背包 给出i件物品的重量以及价值 求解让装入背包的物品重量不超过背包容量 且价值最大 。特点:这是最简单的背包问题,特点是每个物品只有一件供你选择放还是不放。① 二维解法设f[i][j]表示前 i 件物品 总重量不超过 j 的最大价值 可得出状态转移方程f[i][j]=max{f[i-1][j-a[i]]+b[i], f[i-1][j]}代码: for(int i=1;i<=n;i++) for(int j=m;j>0;j-原创 2020-06-21 18:19:31 · 467 阅读 · 0 评论 -
C++算法一些常用的stl函数
1.lower_bound( )和upper_bound( )lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的在从小到大的排序数组中,lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去...原创 2019-05-14 17:51:57 · 212 阅读 · 0 评论 -
4123: 马走日,2797:最短前缀 Trie,2362:Square 能否拼接为正方形
4123: 马走日,2797:最短前缀 Trie,2362:Square 能否拼接为正方形原创 2019-05-13 17:50:21 · 275 阅读 · 0 评论 -
几种排序与最大K问题
1.快排void quickSort(int *pArray,int begin,int end){ if (begin<end){ int left = begin; int right = end; int pivot = pArray[begin]; while (left<right){ ...原创 2019-05-07 21:09:36 · 741 阅读 · 0 评论 -
常见算法复习整理1
数据结构笔记1.迭代与递归递归过程中的递归因子本身可以被忽略(被计入它自己的过程中了)递归跟踪、递推方程。递归基减而治之:Decrease and Conquer 线性递归的模式 T(n) = T(n-1)+ O(1)分而治之:Divide and Conquer 一般出现log(n)都是要用分治法。这两个都是分治法。动态规划算法与分治法最大的差别是:适合于用动态规划...原创 2019-02-25 22:34:47 · 510 阅读 · 0 评论