c++算法实现
今池鱼
已识乾坤大,尤怜草木青。
展开
-
c++的链表归并排序
为什么做这个呢?因为深信服面试考了这个我没答出来啊阿西吧!首先是归并排序啦所谓的归并排序,就是,把一串数字两两分组排序,然后再两两分组排序,然后……直到排完看起来就很递归至于取中值……快慢指针大法好!【代码有参照别人的class Solution {public: ListNode* merge(ListNode* h1,ListNode* h2) { if(!h1) return h2; if(!h2) return h1;原创 2020-09-18 13:18:51 · 530 阅读 · 0 评论 -
C++实现KMP(大概能跑)
【这代码写的我云里雾里,全靠瞎蒙,反正是蒙上了】【存个档】#include <studio>#include <string>#include <vector>using namespace;int main(){ string pattern = "qwwqui"; string s = "sgyuigqwwquiihso"; int length = pattern.size(); vector<int> next(length,-原创 2020-09-17 21:39:40 · 163 阅读 · 0 评论 -
C++解决上升下降字符串问题
嗯……最近在刷力扣,没什么兴致写博客。不过这题挺有意思的,想记一下原题链接:https://leetcode-cn.com/problems/increasing-decreasing-string/题目:给你一个字符串 s ,请你根据下面的算法重新构造字符串:从 s 中选出 最小 的字符,将它 接在 结果字符串的后面。从 s 剩余字符中选出 最小 的字符,且该字符比上一个添加的字符大,将它 接在 结果字符串后面。重复步骤 2 ,直到你没法从 s 中选择字符。从 s 中选出 最大 的字符,原创 2020-08-28 18:25:45 · 249 阅读 · 0 评论 -
二叉树相关知识(c++)【未完结】
1,求深度:递归思想,一个点的深度 = 子树最大深度+1【本质是DFS后序遍历】class Solution {public: int maxDepth(TreeNode* root) { if(root == NULL) return 0; else return max(maxDepth(root->left),maxDepth(root->right))+1; }};2,求原创 2020-08-28 14:55:22 · 117 阅读 · 0 评论 -
c++求平方根(牛顿迭代法)
借鉴了:https://blog.csdn.net/weixin_42109012/article/details/91359268思路很简单,就是确定这样一个函数确定一个点,在这个点做函数的切线,这条切线和x轴的交点会越来越靠近所求的值接下来就是高一数学,假设这个点是x0,确定的点就是(x0,x0×x0-n)对函数求导,得切线斜率是2x0计算这个切线和X轴的交点为((x0×x0)+num)/2×x0再比较大小,不断循环到找到符合精度的代码如下:#include <iostream&原创 2020-07-30 13:19:27 · 5701 阅读 · 0 评论 -
C++算法数组相关(未完结)
1,合并数组【怨念】其实这道题不难——但是!我以为相同的数字要删去!考虑了很久!【实际并不用删】题目:AB两个排序数组,原地合并数组。(A当中穿插一些无效数字怎么处理?)原理:注意,是原地合并数组所以,假设a的后端空间足够大,判断长度后从后往前比较就可以了代码如下:#include <iostream>#include <stdlib.h>using namespace std;/*AB两个排序数组,原地合并数组。(A当中穿插一些无效数字怎么处理?)1 a原创 2020-07-06 00:01:48 · 214 阅读 · 0 评论 -
C++解决剑指剪绳子问题
题目:给你一根长度为n绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1),每段的绳子的长度记为k[0]、k[1]、……、k[m]。求k[0] * k[1]*…*k[m]的最大乘积是多少?例如:当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到最大的乘积18。看见最大,以及相乘这种可以被拆解的计算方式,我们应该能想到动态规划。那么,该拆到什么程度呢?当长度为1时,结果是0当长度为2时,结果是1×1 = 1当长度为3时,结果是1×2 = 2当长度为4原创 2020-07-05 19:16:56 · 392 阅读 · 0 评论 -
c++算法解决力扣跳步问题
我是一只小跳蛙首先是题目:给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。例子:输入: [2,3,1,1,4]输出: true解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。需要注意的是,参数是可以跳的最大长度,不是必须要跳的长度——也就是说,跳出去也没问题的。因为这个特点,所以使用贪心算法,计算每个位置能跳的最大值。比如第一个数值是2,位置是0,所以当前最大位置是2第二原创 2020-07-04 12:31:57 · 574 阅读 · 0 评论 -
算法题之最长子串长度
小垃圾刷算法题【我绝对没有在水博客】力扣上的字符串类型题给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。如:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。思路:遍历是不可能遍历的,复杂度太大,系统不给过.借用一下滑动窗口思想.当窗口里不包含下一个字符时把窗口往后移,并且比较当前长度和最长的长度当...原创 2020-01-14 21:58:09 · 1474 阅读 · 0 评论 -
算法:买卖股票最佳时机(c++)
买卖股票相关问题:1,只能买卖一次:假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格。如果你最多只允许完成一次交易,设计一个算法来找出最大利润。例如:[3,4,5,1,9]输出:8解释:第四天买入,第五天卖出原理:为了减少复杂度,这里用峰谷的方法遍历在第一个不亏损的日子买入,然后比较,如果后一天不卖是亏损还是接着赚。亏损就放弃这一段,从下一个日子开始继续分析接着赚就不放弃。【说实话我觉着难点在怎么记这个开始和结束的日子,我还试了一下,挺麻烦的】c++实现代码如下:i原创 2020-07-04 10:43:50 · 2969 阅读 · 0 评论