
算法笔记
小宋今天要早睡
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【算法笔记】不用库函数手撕力扣之力扣121:买-卖-股-票-的-最-佳-时-机
题目链接题解方法1:求差预处理+求最大子序和主要思路这个问题我们算当天买入第二天卖出会获利多少,随后再求连续N天买入卖出收益最大值即可。源代码:c++class Solution {public: int maxProfit(vector<int>& prices) { if(prices.size() < 2) return 0; for(int i = prices.size() - 1; i >原创 2022-02-26 19:57:04 · 615 阅读 · 0 评论 -
【算法笔记】不用库函数手撕力扣之力扣102:二叉树的层序遍历
题目链接题解方法1:双队列遍历主要思路将头节点放入一个队列中,另一个队列为空。遍历存在数据的哪个队列,将其子节点放入到另一个空队列中,循环往复直到两个队列都为空。源代码:c++/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nul原创 2022-02-26 19:18:07 · 504 阅读 · 0 评论 -
【算法笔记】不用库函数手撕力扣之力扣141:环形链表
题目链接题解方法1:顺序比较主要思路如果一个节点所处位置为n,那么在n之后再遍历n次如果没有遇到这个节点,那么说明这个节点不在环中,证明此点不在环中后,可以将待验证的点移动到目前遍历到的节点的最后一个位置,直到遍历到数组末尾。源代码:c++/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val原创 2022-02-25 20:41:51 · 434 阅读 · 0 评论 -
【算法笔记】不用库函数手撕力扣之力扣21:合并两个有序链表
题目链接题解方法1:顺序比较主要思路比较两个链表头部的两个节点,选择较小的一个加入到新的链表的末端,循环往复源代码:c++/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(null原创 2022-02-25 19:51:24 · 412 阅读 · 0 评论 -
【算法笔记】不用库函数手撕力扣之力扣15:三数之和
题目链接题解方法1:排序+求和逼近主要思路首先对数组进行从小到的排序,从小到大遍历每个数据。在每个数据遍历过程中,要从这个数据右边的所有数据中,找两个数使得这两个数的和与遍历的数据互为相反数,采用从两边向中间求和逼近的方法可以使得每次遍历复杂度降到O(n)。源代码:c#include <stdio.h>#include <malloc.h>#include <string.h>void fastSort(int* data, int startInde原创 2022-01-18 19:55:42 · 504 阅读 · 0 评论 -
【算法笔记】不用库函数手撕力扣之力扣912:排序数组
题目链接题解方法1:数组标注主要思路用的快排算法,主要思路,首先将数组构建成一种情况:以某个位置为分界点,左边的数据都比分界点小,右边的数据都比分界点大,然后递归处理左右两边的数据即可。源代码class Solution(object): def sortArray(self, nums): if len(nums) == 1 or len(nums) == 0: return nums; # 避免有序数组复杂度增高,这里对最后一个数进行随机替原创 2022-01-10 21:30:24 · 253 阅读 · 0 评论 -
【算法笔记】不用库函数手撕力扣之力扣25:K 个一组翻转链表
题目链接题解方法1:数组标注主要思路使用一个数组minIndex(长度256),当前遍历位置下,每个字符所能组成的无重复最长字串在整个字符串中的最小开始下标,沿着整个字符串开始遍历,每遍历一个字符,以这个字符为结尾的最长无重复字符的最长子串就是:当前遍历下标-minIndex[当前字符]。时间复杂度为O(n)关于minIndex数组的维护为 minIndex[当前字符] = max(当前字符出现的最后位置,当前遍历过程中最后一个重复字符对出现的位置)源代码int minIndex[300]原创 2022-01-10 19:21:25 · 224 阅读 · 0 评论 -
【算法笔记】不用库函数手撕力扣之力扣3:无重复字符的最长子串
题目链接题解方法1:数组标注主要思路使用一个数组minIndex(长度256),当前遍历位置下,每个字符所能组成的无重复最长字串在整个字符串中的最小开始下标,沿着整个字符串开始遍历,每遍历一个字符,以这个字符为结尾的最长无重复字符的最长子串就是:当前遍历下标-minIndex[当前字符]。时间复杂度为O(n)关于minIndex数组的维护为 minIndex[当前字符] = max(当前字符出现的最后位置,当前遍历过程中最后一个重复字符对出现的位置)源代码int minIndex[300]原创 2022-01-04 11:31:12 · 613 阅读 · 0 评论 -
【算法笔记】不用库函数手撕力扣之力扣146:LRU缓存机制
class LRUCache {public: LRUCache(int capacity) { this->capacity = capacity; for(int i = 0; i < capacity; i++) key[i] = -1; for(int i = 0; i < 10010; i++) value[i] = -1; lastValue = 0;原创 2022-01-03 21:52:25 · 756 阅读 · 0 评论 -
【算法笔记】不用库函数手撕力扣之力扣215:数组中的第K个最大元素
题目链接题解方法1:逐个遍历+二分查找插入主要思路维护一个长度为k的数组,这个数组是遍历及之前的数据中前k的最大的数据。每遍历一个数据,就用二分查找的方法加入到维护的数组中去,遍历完成后,取数组中最后一个数据为第k大的数据。复杂度O(nlgk)源代码int window[10010];int find_pos(int * window, int num, int len){ //假设数据是从大到小排列的,二分查找,返回num要插入的位置 if (window[0] <原创 2021-12-22 21:26:41 · 410 阅读 · 0 评论 -
【算法笔记】不用库函数手撕力扣之力扣206:反转链表
题目链接题解方法1:递归主要思路这个方法的主要思路就是一直递归到尾部,然后从尾部往前逐一反转(之所以没有正向反转是因为反转后会导致经过反转的部分和没有反转的部分之间没有指针连接)代码/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* reverseList(struct Li原创 2021-12-22 20:35:57 · 347 阅读 · 0 评论 -
数据结构课程设计————第二周总结(四大算法篇)
贪婪算法memset(起始地址, 覆盖内容,字节长度)sizeof(指针) 返回的是指针指向区域的大小函数作用,将覆盖内容以一个字节为长度覆盖在起始地址之后的内存之中,因此,此函数并不能给int型变量赋值。POJ4:放弃考试本题利用了数学的解法,在遇到 类似 分子一堆数相加分母一堆数相加求最值R的时候,把R看做自变量,整个式子放到等号一遍,变成一个函数,函数与横轴的交点即为题目中所描述的R的值,我...原创 2018-03-08 15:40:29 · 1159 阅读 · 0 评论 -
【算法笔记】区域型动态规划_石子并归
今天早晨稍微看了一些区域型动态规划的做法,并A了石子并归。区域型动态规划在石子并归上反应的做法就是将所有的堆划分成小堆,从小堆到大堆逐步合成取得最优解(小堆到大堆的变化即为区间长度的变化)。大堆的最优解的计算过程如下将大堆分成任意两个小堆,大堆的最小成本即为 这所有小堆组合中最小成本和的最小值 再加上本次合并的成本。由大堆的求解过程给出递推公式:为了与下方编程一原创 2017-12-16 08:19:00 · 1209 阅读 · 0 评论