![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
Alenlyx
这个作者很懒,什么都没留下…
展开
-
leetcode-26 删除数组中重复的项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums ...原创 2019-04-08 12:08:41 · 92 阅读 · 0 评论 -
对角线打印矩阵
问题描述:输入一个矩阵,从右上角开始按照斜对角线打印矩阵的值,如矩阵为:1, 2, 3, 45, 6, 7, 89, 10, 11, 1213,14, 15, 16输出:4, 3, 8, 2, 7, 12, 1, 6, 11, 16, 5, 10, 15, 9, 14, 13思路:思路:将整个输出以最长的斜对角线分为两部分:右上部分和左下部分。右上部分:对角线...原创 2019-03-16 11:03:41 · 1816 阅读 · 0 评论 -
顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 45 6 7 89 10 11 1213 14 15 16则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.package nums;import java.util.ArrayLis...原创 2019-03-16 11:25:29 · 102 阅读 · 0 评论 -
二叉树相关操作
1.求一个二叉树的高度public static int getMaxDepth(TreeNode root){ if(root == null){ return 0; } int left = getMaxDepth(root.left); int right = getMaxDepth(root.right); return Math.max(left,right)+1...原创 2019-03-20 13:38:54 · 117 阅读 · 0 评论 -
两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]方案一:暴力法很...原创 2019-03-20 13:49:38 · 11201 阅读 · 2 评论 -
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
Q:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。A:f(n) = f(n-1)+f(n-2)+…+f(1)f(n-1) = f(n-2)+ f(n-3)…+f(1)两式相减,得到f(n) = 2*f(n-1).class Soulation{ public int JumpFloor2(int n){ if(n<...原创 2019-03-17 18:24:52 · 1974 阅读 · 0 评论 -
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
类似于青蛙跳台阶,当n=1时,只有一种横向排列的方式。当n等于二时,22有两种选择,横向或者是竖向。当n等于3的时候对于23来说,如果选择的是竖向排列,则剩下的就是22排列,如果选择的是横向,则对于2n剩下的则只有1*n的一种选择。所以依次类推,找到迭代RectCover(target-1)+RectCover(target-2)。class Soulation(int n){ public ...原创 2019-03-17 18:32:29 · 1120 阅读 · 1 评论 -
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
class Soulation{ public double Power(double base,int exponent){ double result = 1.0; for(int i = 0;i<Math.abs(exponent);i++){ result *= base; } if(exponent>0){ retu...原创 2019-03-17 18:50:53 · 114 阅读 · 0 评论 -
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
方法一:public class Number{ public int NumberOf1(int n){ int count = 0; while(n!=0){ n=n&(n-1); count++; } return count; }}方法二:public class Soluation{ public int Number(int n){...原创 2019-03-17 18:58:54 · 329 阅读 · 0 评论 -
二维数组的查找
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。public class Soulation{ public boolean find(int [] [] nums ,int target){ for(int i = 0;i<nums.le...原创 2019-03-17 19:17:51 · 185 阅读 · 0 评论 -
替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。public class Soulation{ public String replaceSpace(StringBuffer str){ for(int i = 0;i<str.length;i++){ char a ...原创 2019-03-17 19:27:09 · 115 阅读 · 0 评论 -
求两个数组的交集
方法一:使用一个Map将其中一个数组放到map中,循环遍历第二个数组,如果map中存在第二个数组中含有的的值,放到结果集中.时间复杂度O(n) ,空间复杂度O(n)import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;import java.util.List;import java.ut...原创 2019-03-14 10:50:30 · 765 阅读 · 0 评论 -
链表问题全解析(Java实现)
文章目录链表问题的一般解题思路:经典链表问题:面试-链表问题全面解析本篇将介绍关于链表算法的基本解体思路与经典问题,本篇不仅仅追求的是写出优秀的链表代码,更在意的是在有限时间内,如何写出bug free的链表代码。链表问题的一般解题思路:链表是一种利用不连续的内存块,通过在每块内存中存储下一块内存的指针而构造的线性存储结构,所以链表是线性表的一种形式。链表问题是一种考察基本编码能力的...原创 2019-02-21 19:18:22 · 577 阅读 · 0 评论 -
搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0方法一:...原创 2019-01-29 16:12:34 · 103 阅读 · 0 评论 -
插入排序
简要介绍有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将...原创 2018-11-07 15:43:59 · 2595 阅读 · 0 评论 -
桶排序
适用范围桶排序可用于最大最小值相差较大的数据情况,比如[9012,19702,39867,68957,83556,102456]。但桶排序要求数据的分布必须均匀,否则可能导致数据都集中到一个桶中。比如[104,150,123,132,20000], 这种数据会导致前4个数都集中到同一个桶中。导致桶排序失效。过程分析桶排序的基本思想是:把数组 arr 划分为n个大小相同子区间(桶),每个子区...原创 2018-11-07 18:22:04 · 2453 阅读 · 0 评论 -
希尔排序
算法简述希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰...原创 2018-11-07 18:55:48 · 2390 阅读 · 0 评论 -
二分查找的两种实现(Java)
查找过程首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。算法要求1.必须采用顺序存储结构。2.必须按关键字大小有序排列。...原创 2018-11-13 13:05:34 · 2720 阅读 · 1 评论 -
选择排序
简要介绍选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。算法性能时间复杂度选择排序的交换操作介于 0 和 (n - 1) 次之间。选择排...原创 2018-11-12 14:12:26 · 2435 阅读 · 0 评论 -
堆排序
简要介绍堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆得操作在堆的数据结构中,堆中的最大值总是位于根节点(在优先队列中使用堆的话堆中的最小值位于根节点)。堆中定义以下几种操作:最大堆调整(Max Heapify):将堆的末端子节点作调整,使得子节点永远小于...原创 2018-11-12 14:19:01 · 2394 阅读 · 0 评论 -
LRU---缓存淘汰策略
LRU(Least recently used,最近最少使用)最近最久未使用算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。基本介绍:淘汰近期没有使用的数据,维持动态数据平衡。步骤分析:新数据插入到链表头部;每当缓存命中(即缓存数据被访问),则将数据移到链表头部;当链表满的时候,将链表尾部的数据丢弃。代码实现:Jav...原创 2018-12-04 11:46:06 · 615 阅读 · 1 评论 -
有36匹马6个跑道,用最少比赛次数算出跑最快的前3匹马
36匹马分6个组,分别为A、B、C、D、E、F组.第一轮,每个组各跑一次,取每组前三名,标识为A1、A2、A3,B1、B2、B3,以此类推.第二轮,每个组的第一名(A1——F1)拉出来跑一次,假设名次是:A1第一名,B1第二名,C1第三名.则:1.后三名及其所在组的其余组员均被淘汰(小组头名都没能进前三,当然是全部淘汰啦)2.两战全胜的A1已经提前夺冠了.3.由于A1已经占去了一个名额...原创 2018-12-06 14:53:07 · 6572 阅读 · 0 评论 -
快速排序
基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。步骤分析:假设用户输入了如下数组:下标 0 1 2 3 4 5数据 6 2 7 3 8 9创建变量i=0(指向第一个数据), j=5(指向最后一个数据), k=6(赋值为...原创 2018-12-06 15:20:43 · 93 阅读 · 0 评论 -
快慢指针算法与应用
基本概念快慢指针中的快慢指的是移动的步长,即每次向前移动速度的快慢。例如可以让快指针每次沿链表向前移动2,慢指针每次向前移动1次。应用1.判断单链表是否为循环链表(Leetcode-141)让快慢指针从链表头开始遍历,快指针向前移动两个位置,慢指针向前移动一个位置;如果快指针到达NULL,说明链表以NULL为结尾,不是循环链表。如果 快指针追上慢指针,则表示出现了循环。public cl...原创 2018-12-29 16:45:54 · 179 阅读 · 0 评论 -
冒泡排顺
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终...原创 2018-11-07 15:19:31 · 2460 阅读 · 0 评论