![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构编程题
Starry memory
硕士毕业算法工程师在岗
展开
-
KMP算法
背景匹配字符串,并返回可以匹配到的第一个开始的字符串。leetcode题目28https://leetcode-cn.com/problems/implement-strstr/solution/shua-chuan-lc-shuang-bai-po-su-jie-fa-km-tb86/解题思路先构造好前缀表,然后不相等则退回到前缀表中值的索引位置。例如被匹配的字符串为"ababc", 则构造前缀表为:前缀串值a0ab0aba1abab2ab原创 2022-04-18 21:04:33 · 103 阅读 · 0 评论 -
Leetcode-存在重复元素
存在重复元素给定k和t, 以及没有序列的数组,判断是否有满足指定条件 ,细节部分看leetcodehttps://leetcode-cn.com/problems/contains-duplicate-iii/解题思路分桶后,每个桶中只存放一个元素就可以,不需要过多的存放。只要桶中有元素,则说明存在满足条件的解法。...原创 2022-04-15 19:53:07 · 377 阅读 · 0 评论 -
Leetcode-数组中的逆序对
背景找数组中有多少对逆序的数列。解题思路与题解直接写归并排序的代码。归并排序的时间复杂度是O(nlogn)O(nlogn)O(nlogn), 然后在每次当右边小于左边时进行统计逆序对的数量(归并排序并不难写,但是这里如果考虑出现问题,可能会有很大的bug)。 其次,在写这道题时,使用归并排序,时间超时,当每次返回时,不返回数组,则时间不超时。核心为,在归并排序的基础上加:self.res = self.res + (len(larr)-i) #统计逆序对的次数超时代码class Soluti原创 2022-04-10 20:39:51 · 620 阅读 · 0 评论 -
Leetcode-最佳任务调度
背景输入处理任务机器数,任务使用的时间,将时间分为指定的的任务数,使得时间最短。输入:处理任务机器数: k =3不容任务所用时间:arr = [5,4,6,6,8,3,7]输出:最优时间为 13解题思路:三个机器,递归遍历for循环机器数量。因为每次该改机器下,这个任务是否选择,选择或者是不选择。n = 0 # 任务数best = float("inf") # 最优值(完成全部任务的最早时间)tasks = [] # 每台机器已安排的时间#计算任务完成的时间def comp原创 2022-04-02 21:57:32 · 679 阅读 · 0 评论 -
Leetcode-字符串动态规划_子序列的数目
剑指 Offer II 097. 子序列的数目可以将这个矩阵划出来,然后动态规划方程自然而然就显示了:rabbitr100000a010000b001100b001200b000300i000030t000003\begin{matrix}{{}}{}&r&a&b&b&i&t\\r&1&0&0&0&0&0\\a&0&1&0&0&0&0\\b&0&原创 2022-04-02 20:34:31 · 206 阅读 · 0 评论 -
Leetcode-跳台阶问题
一次跳一阶或者跳两阶使用递归求解使用动态规划,可当做斐波那契数列第一次跳1阶,则有F(n−1)F(n-1)F(n−1)次跳法;第一次跳2阶,则有F(n−2)F(n-2)F(n−2)次跳法;因此总共的跳法为:F(n)=F(n−1)+F(n−2)F(n) = F(n-1)+F(n-2)F(n)=F(n−1)+F(n−2)与斐波那契数列的不同之处青蛙跳台阶问题: f(0)=1f(0)=1f(0)=1, f(1)=1f(1)=1f(1)=1, f(2)=2f(2)=2f(2)=2斐波那契数原创 2022-03-26 20:05:57 · 1022 阅读 · 0 评论 -
本科生保送面试编程题
本科生(除了大佬),编程水平(算法与数据结构)还是有限的,因此下述部分都是一些简单题目,可以作为参考。1. 最小的k个数输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。输入:arr = [3,2,1], k = 2输出:[1,2] 或者 [2,1]2. 最长不含重复字符的子字符串请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。输入: "abcabcbb"输出: 3 解释:原创 2021-09-29 17:11:23 · 135 阅读 · 0 评论 -
字典树,深度优先搜索
这一部分代码在Leetcode上没有通过,然后又有了下述代码:#include<iostream>#include<vector>#include<queue>#include<string>#include<unordered_map>using namespace std;class Trie {private: bool isEnd; Trie* next[26];public: Trie() { isEnd =原创 2021-01-07 21:23:42 · 127 阅读 · 1 评论 -
算法与数据结构
如果整形不够,可以考虑用长整型表示。class Solution {public: int mySqrt(int x) { int result = 0; int half_x = x / 2+1; for (int i = 0; i <= half_x; i++) { //有些地方long就可以,有些地方需要long long,这个有机器位数有一定的关系 long temp = (long)i * (long)i; if (temp>x) { res原创 2020-12-30 22:48:19 · 107 阅读 · 1 评论 -
深度优先遍历和广度优先遍历
深度优先遍历可以类比于树的前序,后序遍历;广度优先遍历类似于树的层序遍历。树的层序遍历需要引入队列,广度优先遍历也是一样的。原创 2020-12-23 21:49:49 · 97 阅读 · 1 评论 -
深度优先遍历-基因变异
这里使用了深度优先遍历的的算法。每一层递归都有for循环,我们可以拿for循环和相关的限制条件所排列组合。class Solution {public: int minMutation(string start, string end, vector<string>& bank) { if (start.size() != end.size()) { return -1; } if (start==end) { contin_str.emplace_bac原创 2020-12-23 20:34:48 · 70 阅读 · 1 评论 -
二叉树的层序遍历
#include<iostream>#include<vector>#include<queue>#include<unordered_map>using namespace std;‘’‘之前想了一下用递归实现,但是发现没什么思路,然后就使用队列写了。使用queue和vector应该都可以实现的,vector里面有clear方法。’‘’struct TreeNode { int val; TreeNode *left;原创 2020-12-21 22:03:14 · 66 阅读 · 1 评论