随笔分类 - 【数据结构与算法】数组
摘要:双指针分为“快慢指针“和”左右指针“ 快慢指针多用来解决链表中的问题;左右指针多用来解决数组(或者字符串)问题。 一、快慢指针的常见算法 1.判定链表中是否含有环 141 2.已知链表中含有环,返回值这个环的起始位置 142 3.寻找链表的中点,可以解决对链表进行归并排序问题 876 4.寻找链表的
阅读全文
摘要:大佬其实总结的很完善了,先查看大佬的总结: 数组:https://mp.weixin.qq.com/s/X7R55wSENyY62le0Fiawsg 链表:https://mp.weixin.qq.com/s/ntlZbEdKgnFQKZkSUAOSpQ 有几个小问题补充一下: (1)数组下标为什么
阅读全文
摘要:总结: 两数之和——哈希表:时间复杂度O(n),暴力解法O(n^2) 三数之和——双指针:一层i的for循环,双指针left和right。时间复杂度O(n^2),暴力解法O(n^3) 四数之后——双指针:两层i和k的for循环,双指针left和right,时间复杂度O(n^3),暴力解法O(n^4)
阅读全文
摘要:1.数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1 第一种方法,也是我第一次实现的方法:先对数组进行排序,然后从数组头开始循环判断,步进值为数组的一半,如果当前和步进值处的数组元素是相等的,说明这个就是主要元素。 另外还有一些特殊情况,比如数组元素为0、
阅读全文
摘要:分治思想求解的问题,但是比较特殊,只有分解问题和求解小问题,不需要合并 每次也只需要经过判断,分解一半,所以比其他分解两边的效率高 最坏情况时间复杂度为O(n^2),期望时间复杂度为O(n) 找基准值时候可以考虑随机选择 #include<iostream> #include<vector> #in
阅读全文
摘要:还是分治的思想,解决方法利用了归并排序。具体可以看一下这篇博客。 第三章:分治II - 不妨不妨,来日方长 - 博客园 (cnblogs.com) C++代码如下,可以在VS直接运行。 #include<iostream> #include<vector> #include<algorithm> u
阅读全文
摘要:我已无法用语言来描述递归有多牛逼。 #include<iostream> #include<vector> #include<algorithm> using namespace std; int max_sub_array(vector<int>& data, int left, int righ
阅读全文
摘要:这个比较简单,想清楚基线条件和递归条件就可以了,直接看代码(VS直接运行): #include<iostream> #include<vector> using namespace std; int arrayMax(int data[], int length); int main() { int
阅读全文