算法
愿风丶裁尘
这个作者很懒,什么都没留下…
展开
-
LeetCode 300 最长上升子序列
很经典的题目,可以被用到各种变式题目中。常规DP算法,复杂度较高每次都初始化dp[i] = 1,再比较nums[i] nums[j] (j 要从0到1 遍历,如果nums[i] 大于nums[j],就比较一下nums[j] +1 和 nums[i] ,取其最大值更新nums[i])比较好的做法就是 贪心 + 二分查找了官方这么解释的:如果我们要使上升子序列尽可能的长,则我们需要让序列上升得尽可能慢,因此我们希望每次在上升子序列最后加上的那个数尽可能的小。这种贪心的解法,实际上有一定简化:原创 2020-09-08 11:37:38 · 154 阅读 · 0 评论 -
Leetcode 169 多数元素 Easy
一道easy题,但解法思想还是很有参考意义的。哈希和排序的做法实在浪费资源,这里总结下摩尔投票和分治法。Boyer-Moore 投票算法算法核心:选定一个candidate,向后遍历,遇到等于它的票数+1,反之票数-1,减到0后换下一个人当candidate。可行性证明:1.如果当前候选人不是majority 则 majority会和其他非候选人一起反对 会反对候选人,所以该candidate一定会下台(maj==0时发生换届选举)此时,majority和非候选人阵营都消耗了同样的票数,那么将原创 2020-08-30 10:08:49 · 86 阅读 · 0 评论 -
OPPO8.29C++蜜汁题目
数论知识:求关于x的同余方程 ax≡1(modb)\ a x \equiv 1 \pmod {b} ax≡1(modb) 的最小正整数解。注意:(a*x)%mod=((a%mod)*x)%mod (a∗x)%mod=((a%mod)∗x)%mod\ (a *x)\%mod = ((a\%mod)*x)\%mod (a∗x)%mod=((a%mod)∗x)%mod输入: a b\ {a} \ {b} a b 以空原创 2020-08-29 21:50:44 · 315 阅读 · 0 评论 -
单链表排序(快排方法)
原文说一下我的理解:是传统快排的变种;传统快排:基准 小 小 小 小 小 未排 未排 未排 未排 大 大 大 大 大 L-> <- RL,R相向而行,即R向左走找比基准小的, L向右走找比基准大的,交换,相遇时结束。但对于链表,L向右当然是可以的,但R向左,就要额外存储pre,或者频繁的单向遍历。为了简化,可以这样:基准 小 小 小 小 小 大 大 大 大 大 未排 未排 未排 未排 L-> R->原创 2020-08-23 00:26:23 · 1767 阅读 · 0 评论 -
归并排序
感谢博客https://blog.csdn.net/a130737/article/details/38228369归并排序的时间复杂度为o(nlgn),空间复杂度为o(n)。是一种采用分治思想的排序方法。逻辑分析:假设输入数组a[] = { 2, 1, 4, 5, 3, 8, 7, 9, 0, 6 }。首先将数组二分成两个数组left[]={ 2, 1, 4, 5, 3},right= {8, 7, 9, 0, 6 }。再将left和right两个数组二分,一直到每一个单独元素为一个数组。{原创 2020-08-13 16:38:57 · 92 阅读 · 0 评论 -
排序算法复杂度
关于各种排序的复杂度,网上的资料不少,谬误也比较多,更甚者以讹传讹,初学者不加分辨地记下,实在是误人子弟。你们肯定搜到过下面这张图,这个分类是没问题的。比如下面这张图就有很多错误。其实记这些东西,知其所以然是最重要的。最后附上我认为比较正确的总结图吧。(如果有错误请指出,一定及时改正)另外,上图中所说的in-place和out-place并不是内排序和外排序,解释如下:in-place 占用常数内存,不占用额外内存 out-place 占用额外内存在冒泡排序中,为了将arr排序,借用了一个原创 2020-08-07 11:34:24 · 186 阅读 · 0 评论 -
关于TOP K算法的由浅入深
关于优化的思想,可以参见原文链接总的来说,方法和时间复杂度如下:全局排序,O(n*lg(n))局部排序,只排序TopK个数,O(n*k)堆,TopK个数也不排序了,O(n*lg(k))分治法,每个分支“都要”递归,例如:快速排序,O(n*lg(n))减治法,“只要”递归一个分支,例如:二分查找O(lg(n)),随机选择O(n)TopK的另一个解法:随机选择+partition另外再补充下代码部分1.大小顶堆做法,不用priority_queue#include <iostream&原创 2020-08-06 18:17:10 · 242 阅读 · 0 评论 -
VIVO春招编程题数位之积
解答区看到的。。。代码简洁,逻辑清晰,给大佬们跪了。。原题目现给定任意正整数 n,请寻找并输出最小的正整数 m(m>9),使得 m 的各位(个位、十位、百位 ……)之乘积等于n,若不存在则输出 -1。输入例子1: 36输出例子1: 49输入例子2: 100输出例子2: 455class Solution {public: /** * 输入一个整形数值,返回一个整形值 * @param n int整型 n>9 * @return int整原创 2020-06-25 11:09:46 · 211 阅读 · 0 评论 -
2020VIVO春招编程题手机解锁图案
菜鸡看到这个题目后,想法很多,实现感觉挺难。。但网上找的C++的实现都不太靠谱。看到一篇java实现的感觉逻辑清晰,为他点个赞,稍微改下C++。原文:JAVA实现改变上主要是数组定义,已经数组需要初始化;(不赋0初始化总是出错,有专业同学解释下吗)#include<iostream>using namespace std;class Solution {public: //用来存储两个键相连经过其他键情况 //vector<vector<int>>arr原创 2020-06-25 10:46:39 · 501 阅读 · 0 评论 -
2020VIVO春招编程题 手机产量
菜鸡捡了最简单的一题做做。。。class Solution {public:int solution(int n){ int sum=0; int curgap=1; int i=1; while(n){ for(int j=1;j<=curgap;j++){ sum+=curgap; i++; if(i>n) return sum;} curgap++;原创 2020-06-24 19:35:31 · 686 阅读 · 0 评论