![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
是落落呢
这个作者很懒,什么都没留下…
展开
-
算法题练习(一)
两数相加/** *结构体信息 * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){ int dj = 0; //进位 struct ListNode *p = l1; struct ListNode *q = l2; s原创 2022-04-05 12:34:14 · 259 阅读 · 0 评论 -
动态规划练习(五)
1. 跳跃游戏动态规划法//1.0 使用辅助数组bool canJump(int* nums, int numsSize){ bool *dp = (int *)malloc(sizeof(int)*numsSize); int i,j; dp[0] = true; for(i=1;i<numsSize;i++) dp[i] = false; for(i=1;i<numsSize;i++){ for(j=0;j<原创 2022-04-03 16:51:04 · 3799 阅读 · 0 评论 -
动态规划练习(四)
1. 最大子数组求和int maxSubArray(int* nums, int numsSize){ int max,premax,i; max = premax = nums[i]; for(i=1;i<numsSize;i++){ premax = premax+nums[i]>nums[i]?premax+nums[i]:nums[i]; max = max>premax?max:premax; } ret原创 2022-04-01 11:18:57 · 466 阅读 · 0 评论 -
动态规划练习(三)
1. 打家劫舍(一)int rob(int* nums, int numsSize){ if(numsSize == 1) return nums[0]; else if(numsSize == 2) return nums[0]>nums[1]?nums[0]:nums[1]; else{ int i; int* dp = (int*)malloc(sizeof(int)*numsSize);原创 2022-03-30 17:18:58 · 1138 阅读 · 0 评论 -
动态规划练习(二)
1. 爬楼梯int climbStairs(int n){ if(n==1) return 1; else if(n==2) return 2; else{ int i,init_1,init_2,ans; init_1 = 1; init_2 = 2; ans = init_1 + init_2; //n>3才使用循环 for(i=3;i<原创 2022-03-30 16:42:04 · 781 阅读 · 0 评论 -
动态规划练习(一)
1. 斐波那契数列指针指向iF(n-2)jF(n-1)sF(n)通过子问题递推出问题的解int fib(int n){ if(n==0) return 0; else if(n==1) return 1; int i,j,s,k; i=0; j=1; s=i+j; k=2; while(k<n){ i=j; j=s;原创 2022-03-30 11:00:03 · 483 阅读 · 0 评论 -
回溯法
回溯法,是一种枚举法,就是尝试所有结果,最后得到最优解。从初始状态出发,按照深度优先搜索的方法,根据产生子节点的条件约束,搜索问题的解。当发现当前节点不满足求解条件时,就回溯,尝试其他路径。深度优先遍历例子:地图着色有一幅地图和m种颜色,怎样涂色才能让相邻区域的是不同的颜色?下面是抽象化后的结果,用图来表示,弧表示两个顶点相邻,即地图中的两个区域相邻。class tu{ constructor(){ //this.points = 0; //this.a原创 2021-03-31 16:53:15 · 203 阅读 · 0 评论 -
动态规划
动态规划是一个比较牛掰的算法,它与分治法相似。分治法是从大问题分解成小问题,自顶而下求解,再合并得到原问题的解;动态规划规划也是大问题分解成小问题,但是这些问题之间存在着某种联系,类似于数学归纳,自底向上求解,先求解最小的子问题,把结果存储在表格中,再求解大的子问题时,直接从表格中查询小的子问题的解,避免重复计算,从而提高算法的效率。动态规划的解题步骤一般分为4步:分解最优解的结构特征。建立最优值得递归式。自底向上计算最优解,并记录。构造最优解。那什么样的问题可以已使用动态规划算法呢?只原创 2021-03-20 12:50:12 · 71 阅读 · 0 评论 -
时间复杂度,空间复杂度
时间复杂度时间复杂度就是算法的执行次数。每一条语句执行都需要时间,所以,执行次数越多,时间复杂度越大。let sum = 0; //运行1次let total = 0; //运行1次for(let i = 1; i <= n; i++) //运行n+1次{ sum = sum + i; //运行n次 for(let j = 1; j <= n; j++ ) //运行n*(n+1)次 total = total + i * j; //运行n*n次}该算法的执行总次数原创 2021-03-12 23:46:32 · 509 阅读 · 0 评论 -
贪心算法
贪心算法在解决问题的策略上是根据当前已有的信息做出选择,而且一旦做出选择,不管将来有什么结果,这个选择都不会改变。贪心算法并不是从整体最优考虑,而是某种意义上的局部最优。这种局部最优选择并不能保证你总能获得全局最优解,但通常能得到较好的近似最优解。贪心算法在每一步总是选择当前情况下的最优策略,它与分治法类似,都会把求解的问题划分成若干个小问题,每个小问题利用贪心策略求得其最优解,再组合这些小问题的最优解便能获得原问题的解。性质最优子结构。当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子原创 2021-03-09 19:06:05 · 210 阅读 · 0 评论 -
分治法
分治算法理解分治法的设计思想:将一个那一直接解决的大问题分解成一些规模较小的相同问题,以便各个击破,分而治之。一般来说,分治算法在每一层递归上都有3个步骤:分解。将原问题分解成一系列子问题。求解。递归的求解各个子问题。若问题足够小,则直接求解;否则继续分治,再将小问题分解成更小规模的问题,以便直接求解。合并。将子问题的解合并成员问题的解。思维过程分治法实际上就是类似于数学归纳法,找到解决本问题的求解方程公式,然后根据方程公式设计递归程序。一定要先找到最小问题规模时的求解方法。然后考虑原创 2021-03-07 18:06:29 · 176 阅读 · 0 评论