
算法优化
文章平均质量分 92
对一些原本有固有思路算法的优化
ReaganZhuu
早日退休
展开
-
在未排序的数组中找到第 k 个最大的元素
一、引言 昨儿面试中遇到的算法题 :在未排序的数组中找到第 k 个最大的元素。首先想到的就是先排序,但是就算是快排的时间复杂度也要O(nlogn),给的时间有限,一时间也没想出更好的办法,想着既然时间复杂度降不下来,那不如就用简单点的堆排序: //大根堆 O(nlogk) public int findKthLargest(int[] nums, int k){ PriorityQueue<Integer> maxHeap = new PriorityQueue原创 2020-07-13 22:57:04 · 1872 阅读 · 0 评论 -
约瑟夫环 超时问题
一、引言 原题: 剑指 Offer 62. 圆圈中最后剩下的数字 :0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。 思路: 每次找到下一个要删除的位置,假设当前删除的位置是 index,下一个删除的数字的位置是 index+ m - 1 。由于数到末尾会从头继续数,所以最后取模一下,就是 (index+ m - 1)%n。 public int LastRemaining_Solution(int n, int m) {原创 2020-06-26 11:37:26 · 2740 阅读 · 0 评论 -
总结动态规划算法
目录一、前言1.1、引子1.2、介绍二、正文2.1、方法总结2.1、实战分析 一、前言 1.1、引子 计算机归根结底只会做一件事:穷举。所有的算法都是在让计算机如何聪明地穷举而已,动态规划也是如此。 还是要从一个经典的例子说起——斐波那契数列(详细可见我的另一篇文章 斐波那契数列递归算法优化),我们似乎可以发现动态规划遵循一套固定的流程:递归的暴力解法 -> 带备忘录的递归解法 -> 非递归的动态规划解法。所以从某种程度上来说,所有的动态规划本质都是优化后的暴力求解。 1.2、介绍 DP原创 2020-06-13 17:58:41 · 237 阅读 · 0 评论 -
斐波那契数列递归算法优化
一、前言 斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368… 学习递归时用的第一个简单的例子就是斐波那契数列,当时也惊叹于递归的魔力。后来在一次面试过程中,面试官就出了这道题,我还寻思怎么这么简单,当面试官让我测试用例输入100的时候,我就知道我还是太年轻了…我一直认为毫无问题的看起来既简洁又优雅的算法,居然是这么耗原创 2020-05-31 22:47:52 · 4528 阅读 · 0 评论