随笔分类 - 算法
摘要:第一种解法:遍历一次数组,时间复杂度O(n),空间复杂度O(n) 第二种解法:需要遍历两遍数组,但是空间复杂度变为了O(1) https://www.nowcoder.com/profile/7728727
阅读全文
摘要:这是一道全排列的问题,具体的步骤百度可以找到很多。 算法思想是依次固定每一个字符然后对字串进行相同的操作即可 注意:这里的固定其实就是交换的意思,每次从begin位置开始依次往后交换str[begin] 与 str[i] 我觉的这是动态规划+回溯的算法题 最后想吐槽以下牛客的这个判题系统有点....
阅读全文
摘要:解法1:双指针,先找到正向的第k个,然后两个指针向后移动,指针left指向的就是倒数第k个节点 解法2:递归,先从头到尾递归下去,再在递归返回时计算当前是第几个 注意:别忘了,边界检查
阅读全文
摘要:其实这道题很简单,题目提示这道题的类型为递归,所以我们应该去找前后n与n-1之间的关系 在草稿纸上画了之后得出如下结果: 2*1 > 1种 2*2 > 2 2*3 > 3 2*4 > 5 2*5 > 8 所以状态转换方程为 f(n) = f(n-1) + f(n-2) 直接迭代就行了,无需递归
阅读全文
摘要:简介:斐波那契数列 0,1,1,2,3,5,8 ,...... f(n)= f(n-1)+ f(n-2) 本题可以有两种解法:第一种按题目要求的递归,第二种则是迭代 递归: 迭代: 总结:从执行结果来看,迭代要明显优于递归!!! 因为就本题而言,一旦n较大时,递归深度会是非常深的,频繁的调用栈将会非
阅读全文
摘要:分析:二分查找的变种,没有具体的值进行比较,主要用高低位的值来和中间值进行比较,进而缩小范围。 1.arr[low] < arr[high] 说明数组本身并没有被旋转,因为数组本身是一个非递减数组,arr[n] <= arr[n+1] 就必然成立,如果数组被旋转了那么 arr[head] >= ar
阅读全文
摘要:调用push时往stack1中添加元素,调用pop时,将stack1中的元素全部弹出压入stack2,然后再从stack2栈顶取元素
阅读全文
摘要:二叉树的三种遍历: 前序:根节点 --> 左子树 --> 右子树 中序:左子树 --> 根节点 --> 右子树 后序:左子树 --> 右子树 --> 根节点 在前序遍历序列中,从左到右依次取一个数,并找到其在中序遍历中的位置,左边为左子树,右边则是右子树 按照这种思路,编写代码如下: 1 TreeN
阅读全文
摘要:这题思路很简单,只要递归到最后一个节点,然后再依次返回将之前的数据都放入数组就行了。 代码实现如下:
阅读全文
摘要:思路:我的想法是先找到原句子中有多少空格,然后再new一个新长度的数组,将str中所有的内容拷贝到新数组中去。 最后将令str指向新数组temp的首地址。 what?不对?难道指针的指向有问题?我跟进去调试发现并没有什么问题,后来我想到了,应该是传参的关系! 还没赋值的时候,两者的地址如下: 执行完
阅读全文
摘要:做法一: 解释:因为数组的每一行是递增的,所以每次只要比较每一行的最后一个数据,如果target小于当前行的最后一个数据,就遍历这一行。 算法复杂度:最好O(n)只进行了一次for循环便找到, 最坏O(n2)就是每一行都要进行遍历 做法二:将遍历当前行改为二分查找 注意:代码中有一个被注释掉的bre
阅读全文
摘要:题目来自leetcode 239题滑动窗口最大值 如果使用暴力做法的话,每一次的窗口中都遍历找最大,这样的算法时间复杂度是O(n2),显然不符合要求! 这题应该使用单调队列来解决,时间复杂度为O(n)。 单调队列就是队列中的数据要么是单调递增,要么是单调递减的。 这里我们借助STL中的双端队列可以很
阅读全文
摘要:强烈推荐一篇非常好的文章:http://www.runoob.com/w3cnote/bubble-sort.html 快排 快速排序算法是二分法的一种典型的应用,其平均时间复杂度为O(nlogn) 快排有两种操作方式,第一种为交换法,第二种为赋值法,我个人觉得赋值法比较容易理解所以这里就仅讲解赋值
阅读全文

浙公网安备 33010602011771号