算法练习题
会敲code的猫
这个作者很懒,什么都没留下…
展开
-
C++ leetcode刷题代码模板
一、二分查找二、排序三、BFS四、DFS五、回溯法六、树1、递归2、迭代3、前序遍历4、中序遍历5、后序遍历七、构建完全二叉树八、并查集九、前缀树十、图遍历1、Dijkstra 算法2、Floyd-Warshall 算法3、Bellman-Ford 算法十一、最小生成树1、Kruskal 算法2、Prim 算法十二、拓扑排序十三、双指针十四、动态规划1、状态搜索2、贪心...原创 2021-04-04 16:50:14 · 1083 阅读 · 0 评论 -
算法练习题43——不严格递增数组,删掉出现次数大于K的数字,禁止使用而外内存
分析: 定义三个指针,一个遍历,一个对比,一个存储。当遍历指针与对比指针的值不一样时,计算两者之间距离是否大于K,来判断对比指针所指数据是否要保留,如果要保留,用存储指针进行保留。因为没有测试数据,不知道此方法是否有缺漏,希望大家指正代码:int main(){ // 测试数据 vector<int> nums{1,2,2,3,3,3,4,4,4,4,5,6,6}; // K的值 int K = 4; // i为存储指针,j为对比指针,k为遍历指针 i原创 2021-02-08 20:29:14 · 204 阅读 · 0 评论 -
算法练习题34——无序数组,求三个数的最大积
分析: 要考虑正负情况,真正影响结果的是五个数字,分别是最大的三个数,和最小的两个数。最大值应该为三个最大数字的积,或者最大数字与最小两个数字的积。这道题,没有找到用来测试的数据,我并不清楚答案对不对,欢迎大家指正。代码:int main(int argc, char* argv[]){ // 测试数据 vector<int> nums{-5,-6,-7,0}; // 保存三个最大数和两个最小数,容器设置的大一点是为了方便排序 vector<原创 2021-02-05 16:05:47 · 296 阅读 · 0 评论 -
算法练习题15——找出数组中每个元素的后一个比它大的值
测试用例(从网上找到了两个):如数组A=[1,5,3,6,4,8,9,10] 输出[5, 6, 6, 8, 8, 9, 10, -1]如数组A=[8, 2, 5, 4, 3, 9, 7, 2, 5] 输出[9, 5, 9, 9, 9, -1, -1, 5, -1]分析:用个栈,大的在下,小的在上。当检索到一个数字,比较该数字与top的大小,大的话就记录。最坏的时间复杂度是O(2n),即O(n)。代码:vector<int> getMaxArray(vector<int> n原创 2021-01-18 23:07:27 · 1231 阅读 · 0 评论 -
算法练习题11 n位数删k位,使剩下的数最小
分析:这道题的难点在分析,怎样删除可以使数字最小,答案是当第i位比第i+1位大的时候,删除较大位可以使数字较小,当没有i > i+1时,删除最后面几位,整个数字最小。该方法可以使用贪心。代码:string getMin(string str,int k){ string::iterator start; bool flag; for(int i = k;i > 0;--i){ flag = false; // 删除一个第i位大于第i+原创 2021-01-17 20:18:24 · 281 阅读 · 0 评论 -
算法练习题4 最长连续序列
力扣 128. 最长连续序列分析:这道题稍微有些难度,虽然一开始也想到了要使用map,但是没有答案中使用的那么灵活。这道题的思路是,先遍历以便数组,使用set记录数据并去重;然后再遍历一遍数组,这次遍历中,寻找连续数列的最小起始点,然后计数。更困难的是,最长不连续,该如何实现呢?代码:class Solution {public: int longestConsecutive(vector<int>& nums) { unordered_set<i原创 2021-01-15 14:18:32 · 126 阅读 · 0 评论 -
算法练习题3 最长连续递增序列
力扣674. 最长连续递增序列分析:这道题不算难,略。代码:class Solution {public: int findLengthOfLCIS(vector<int>& nums) { if(0 == nums.size()){ return 0; } int maxLength = 0; int count = 0; int length = nums.si原创 2021-01-15 14:11:49 · 129 阅读 · 0 评论 -
算法练习题2 链表实现队列
力扣里面没找到这道题,我们用剑指 Offer 09. 用两个栈实现队列写一下代码。分析:1、基础:链表插入删除,这是基本操作;2、head指针:为了方便删除第一个数据,维护一个head;3、一个指向end的指针:尾部插入,每次都找到尾部那不是很麻烦;4、维护指向end的指针:删除的过程中,end可能被删除掉,要让end再指向head。代码:class CQueue {// 我们用的链表结构struct ListNode{ int val; ListNode* next;原创 2021-01-13 21:06:34 · 104 阅读 · 0 评论 -
算法练习题1 栈排序
力扣 面试题 03.05. 栈排序分析:这道题并不难,用两个栈,一个保存数据,另一个辅助存储,考虑到题目中要求最多只能使用临时栈,所以我在插入中使用了临时的栈,没有使用成员变量栈。代码:class SortedStack {public: SortedStack() { // 清空栈 while(!st.empty()){ st.pop(); } } void push(int val) {原创 2021-01-13 20:59:53 · 163 阅读 · 0 评论