数据结构与算法
数据结构算法刷题总结
Ethan Cliff
这个作者很懒,什么都没留下…
展开
-
剑指 2.替换空格
链接题目思路字符串有足够的空余内存先统计空格的个数替换后的长度 = 原长度 + 空格长度 * 2从尾部到头部开始移动源码class Solution {public: void replaceSpace(char *str,int length) { int spacenum = 0, len = strlen(str); for (int i = len - 1; i >= 0; i--) { if (str[i] ==原创 2021-01-04 15:46:46 · 74 阅读 · 0 评论 -
剑指 1.二维数组中的查找
题目链接题目思路暴力求解不说题目说每行每列都是递增的,先用左下角的数和target比较大于target的话,那么当前这一行这个数后面的数全部都大于target,所以直接去看上一行(row--)小于target的话,就比较当前行这个数后面的数(col++)也可以从右上角开始比较代码class Solution {public: bool Find(int target, vector<vector<int> > array) { in原创 2021-01-04 13:36:12 · 74 阅读 · 0 评论 -
LeetCode 206. 反转链表--多种解法
LeetCode 206. 反转链表使用虚拟头节点/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* reverseList(ListNode* head) {原创 2021-01-01 20:21:46 · 107 阅读 · 0 评论 -
LeetCode 707. 设计链表
LeetCode 707. 设计链表class MyLinkedList {public: struct ListNode { int val; ListNode *next; ListNode(int val) : val(val), next(nullptr) { } }; /** Initialize your data structure here. */ MyLinkedList() { __he原创 2021-01-01 15:33:45 · 75 阅读 · 0 评论 -
快速幂
a的b次方#include <iostream>using namespace std;int main(){ long long a, b, p; cin >> a >> b >> p; long long ans = 1 % p; //这一步一定要注意初始化为1,要么下面全都是0。 while(b) { if(b & 1) ans = ans * 1ll * a % p; a = a * 1ll * a % p; b &原创 2020-05-24 23:31:50 · 141 阅读 · 0 评论 -
Manacher马拉车算法--求最大回文子串
转载:作者:windliang链接:链接来源:力扣(LeetCode)看了这位大佬的题解明白了马拉车求原字符串下标用 P 的下标 i 减去 P [ i ],再除以 2,就是原字符串的开头下标了。例如我们找到 P[ i ] 的最大值为 5,也就是回文串的最大长度是 5,对应的下标是 6,所以原字符串的开头下标是(6 - 5 )/ 2 = 0。所以我们只需要返回原字符串的第 0 到 第(5 - 1)位就可以了。求每个 P [ i ]接下来是算法的关键了,它充分利用了回文串的对称性。我们用原创 2020-05-19 23:18:27 · 177 阅读 · 0 评论 -
货仓选址
货仓选址这道题货仓的位置就是中位数这样才能保证距离之和最小这道题虽然不难但是这里面推导的一个公式很重要!∑i=1n∣Ai−pos∣\sum_{i=1}^{n}|A_i - pos|∑i=1n∣Ai−pos∣要使这个式子值最小,pospospos就得是序列的中位数还会有题会得出这个式子代码:#include <iostream>#include <vector>using namespace std;int main() { int n; c原创 2020-05-18 21:54:19 · 348 阅读 · 0 评论 -
区间最大平均值
最大平均值涉及知识点前缀和,二分判定等思路求最大区间平均值,可以先想求又没有区间平均值大于一个固定值A即在这个序列里a1 a2 a3 .... ai ... aj ..... an ..a_1\ a_2 \ a_3 \ .... \ a_i \ ... \ a_j \ ..... \ a_n \ ..a1 a2 a3 .... ai ...原创 2020-05-18 18:50:43 · 2131 阅读 · 0 评论 -
LeetCode378 杨氏矩阵二分判定
二分判定,有最大最小值,判定 <=mid 的个数与k的关系,如果个数小于k说明mid最大排名也不会超过k,如果个数大于等于k说明mid还可以减小就变成了0000000001111111111类型判定技巧找杨氏矩阵中小于等于mid的个数看代码class Solution {public: int check(vector<vector<int>>& matrix, int mid, int n, int k) { int j = n, c.原创 2020-05-17 23:25:50 · 164 阅读 · 0 评论 -
位运算求两数平均值
参考公式1 (x & y) + ((x ^ y) >> 1) 结果时向下取整这样求X,Y的平均值时就不会出现int或long long超出范围的情况了,并且精度不丢失若先x+y可能会超出范围在二分时求mid = (l + r) / 2, 用这种方法很好!推导因为二进制数字都是一串0和1,那么可以把整数x和y都看作是一个有很多不同的0和1组成的集合。求这两个集合的平均值就是 交集+差集的一半交集:x&y差集的一半:x^y >>1公式2 (x原创 2020-05-17 21:45:07 · 387 阅读 · 0 评论 -
HZOJ最近点对
最近点对思路如果是求一组点中的倆个点的最小距离:把这一组点按横坐标从小到大排列好,分成两半,分别求最小距离,选倆者间小的设为d。但这不一定是答案,有可能两侧各选一个点,这倆个点的距离可能最小。所以在mid 两侧d的范围内各找一点计算距离,得出答案。两个组的话,只需加个变量标记属于哪个组即可代码#include <iostream>#include <algorit...原创 2020-05-06 21:28:09 · 239 阅读 · 0 评论 -
约瑟夫环递推详解必懂
约瑟夫环问题原创 2020-04-29 22:33:04 · 674 阅读 · 1 评论