
算法
文章平均质量分 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 评论 -
总结递归算法
一、前言 递归在算法题中是很常用的,但是可能是因为人的思维方式的问题,很多时候会觉得,一看都会一写就废。我也做了不少递归的题目了,但是大部分都没办法完全自己独立完整地写出来,所以感觉有必要好好整理一下,一味得追求数量也没有用,总结出自己的东西来才能以不变应万变。 二、正文 2.1、方法总结 总的来说,递归无非就是写一个方法,先写出一个终止条件,然后根据题目,找出递推关系,进行递归。具体又可以拆分对应成以下三步: 将大问题分解为小问题:明确函数功能,把原问题分解为若干个相对简单类同的子问题; 寻找原创 2020-06-05 09:35:09 · 547 阅读 · 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 评论