算法
qq_41478279
这个作者很懒,什么都没留下…
展开
-
找出数组中每一个元素右边第一个大于它的数
解题思路:整体思路有点像映射的关系,如果存在对应元素的比它第一个大的数,就在一个数组对应位置存在这个大值,具体思路如下:利用栈,从左到右依次压入数组中元素的索引,每次判断待压入的下一个元素是否大于占栈顶索引对应的元素,若大于,就将元素存到一个新的数组res中,将栈顶索引出栈,对应位置就是栈中刚刚出栈的索引,若小于就压入栈中。最后判断一下剩余的元素,没有大于它的就在res索引位置置-1.代码实...原创 2019-03-18 22:06:33 · 1987 阅读 · 0 评论 -
动态规划总结及Leetcode经典题目解答
动态规划就是以一种新的角度对问题进行观察,将问题转变,能以递归或者递推的方式解决。为了达到最终的状态,需要依据之前的一个或者最优的几个结果,不管之前的状态是如何达到的。1.通过拆分问题,定义状态和状态之间的关系,从而使问题以递归的形式解决2.核心在于状态的定义和状态转移方程状态转移方程1.状态边界情况2.状态转移方程动态规划问题的求解:1.通过将问题进行转变,定义问题以及子问题2...原创 2019-03-22 13:23:50 · 888 阅读 · 0 评论 -
贪心算法总结及LeetCode经典题目解答
贪心算法贪心算法的定义:在么一个阶段都选取当前阶段的最优选择,同时不考虑后续的决策影响。贪心算法的要素:**·**贪心选择性质:全局最优可以通过一系列的局部最优来求解同时将问题通过一系列的局部最优得到了简化,同时进行求解。**·**最优子结构:原问题的最优解包含着子问题的最优解这意味着可以通过对子问题的求解构建规模更大的问题。LeetCode55跳跃游戏给定一个非负整数数组,...原创 2019-03-22 12:57:21 · 2548 阅读 · 0 评论 -
循环有序数组的二分查找
问题:请实现以下函数int indexOf(int [] array ,int key) ,给定一个循环有序的数组,请在这个数组中找到指定元素,找到的话返回下标,没找到返回-1。:解决:首先,使用二分查找找到数组的 “临界点”,临界点满足两个情况:array[left] < array[mid]array[left] <= array[mid]只有确定分界点,确定了key的范...原创 2019-03-18 17:34:35 · 924 阅读 · 0 评论 -
Leetcode215数组中的第k大的数
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。解题思路利用快速排序的思想,在第一次交...原创 2019-03-18 16:21:28 · 405 阅读 · 0 评论 -
二分查找算法及其优化
二分查找是一种非常高效的算法,又称折半查找,下面用递归和非递归实现二分查找的思想有序序列,每次取序列的中间元素和目标元素进行对比,每次缩小一半的查找范围,这样直到找到为止。二分查找图示说明:(图片来自百度)使用递归实现public static int recursionBinarySearch(int[] arr,int key,int low,int high){ if(k...原创 2019-03-18 15:11:20 · 1878 阅读 · 0 评论 -
回溯算法详解及Leetcode经典例题解答
什么是回溯法?在程序设计中,有相当一类求一组解,或求全部解或求最优解的问题,例如读者熟悉的八皇后问题,不是根据某种特定的计算法则,而是利用试探和回溯的搜索技术求解。回溯法也是设计递归过程的一种重要方法,它的求解过程实质上是一个先序遍历一棵"状态树"的过程,只是这棵树不是遍历前预先建立的,而是隐含在遍历过程中。—《数据结构》(严蔚敏)首先,某种问题的解我们很难去找规律计算出来,没有公式可循,只...原创 2019-03-21 18:10:12 · 911 阅读 · 0 评论 -
递归算法思想详解
我相信很多人在做leetcode中的关于树的问题时会很惊讶别人用递归写出来的简洁高效的算法,但是如果自己写就很难实现,那么就赶紧来弄清楚递归到底是什么,怎么来实现呢?递归是什么?有人应该都会脱口而出递归就是自己调用自己。。。在知乎搜索的时候看到了一个特别完美的答案:递归:你打开面前这扇门,看到屋里面还有一扇门。你走过去,发现手中的钥匙还可以打开它,你推开门,发现里面还有一扇门,你继续打开它...原创 2019-03-21 11:47:50 · 789 阅读 · 0 评论 -
经典七大排序算法逐一攻破
排序算法说明1.排序的定义:对一序列对象根据某个关键字排序2.评价算法优劣的术语说明稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;**不稳定:**如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;**内排序:**所有排序操作都在内存中完成; 外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;时间复杂度: 一个算法执行所耗费...原创 2019-03-18 14:19:58 · 424 阅读 · 1 评论 -
最大堆最小堆数组实现
数组实现最小堆假设堆中节点从下标0开始,那么从最后一个非叶子节点开始,从右向左,从下向上调整堆,每次比较父节点和他的左右两个子节点,若大于他们,则和较小的子节点交换。代码实现public class Test{ //堆调整 public static void initHeap(int []arry,int i,int len){ int child,temp; while(2*...原创 2019-03-19 09:15:16 · 779 阅读 · 0 评论