LeetCode
LeetCode算法
大鹏小站
一个快乐敲代码的程序猿
展开
-
拓扑排序
介绍拓扑排序,很多人都可能听说但是不了解的一种算法。或许很多人只知道它是图论的一种排序,至于干什么的不清楚。又或许很多人可能还会认为它是一种啥排序。而实质上它是对有向图的顶点排成一个线性序列。至于定义,百科上是这么说的:对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Or原创 2020-11-06 17:25:04 · 1202 阅读 · 0 评论 -
初识 BFS和DFS
树的遍历BFS:A B C D E F G H IDFS: A B C E F D G H I图的遍历从A出发BFS:A B C D E F (其中一种)DFS:A B D F E C (其中一种)数据结构BFS: 队列(先进先出)步骤:1、首先A入队列, 2、A出队列时,A的邻接结点B,C相应进入队列 3、B出队列时,B的邻接结点A,C,D中未进过队列的D进入队列 4、C出队列时,C的邻接原创 2020-10-28 22:16:29 · 260 阅读 · 0 评论 -
五大常用算法之一:贪心算法
一、基本概念所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,它所做出的仅仅是在某种意义上的局部最优解。贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性(即某个状态以后的过程不会影响以前的状态,只与当前状态有关。)所以,对所采用的贪心策略一定要仔细分析其是否满足无后效性。二、贪心算法的基本思路建立数学模型来描述问题把求解的问题分成若干个子问题对每个原创 2020-09-20 23:33:00 · 328 阅读 · 0 评论 -
快速排序
简述快速排序是一种排序执行效率很高的排序算法,它利用分治法来对待排序序列进行分治排序,它的思想主要是通过一趟排序将待排记录分隔成独立的两部分,其中的一部分比关键字小,后面一部分比关键字大,然后再对这前后的两部分分别采用这种方式进行排序,通过递归的运算最终达到整个序列有序,下面我们简单进行阐述。快排思路我们从一个数组来逐步逐步说明快速排序的方法和思路。假设我们对数组{7, 1, 3, 5, 13, 9, 3, 6, 11}进行快速排序。首先在这个序列中找一个数作为基准数,为了方便可以取第一个数。遍原创 2020-08-19 23:38:10 · 115 阅读 · 0 评论 -
LeetCode162: 给定一个数组,找出数组的峰值。返回其下标
题目:峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设 nums[-1] = nums[n] = -∞。说明:你的解法应该是 O(logN) 时间复杂度的。思路:二分法 /** * 二分查找 * @param nums * @return */public int findPeakElement(int[] nu原创 2020-07-18 17:51:04 · 613 阅读 · 0 评论 -
时间规划求最少面试官
公司正在组织集中面试,每场面试需要一个面试官,现在以数组的形式给出了每场面试的开始时间和结束时间的时间安排表 [si, ei] (si < ei)),为避免面试冲突,请问至少需要多少位面试官,才能满足这些面试安排。示例 1:输入: [[0, 30],[5, 10],[15, 20]]输出: 2示例 2:输入: [[7,10],[2,4]]输出: 1这是一道时间规划问题思路:先排序,然后比较endTime 和 startTimepublic int minInterviewers(int[原创 2020-07-18 17:45:08 · 2693 阅读 · 1 评论 -
用两个栈实现一个队列&用两个队列实现一个栈
思路:栈:先进后出,队列:先进先出如果转化:1.将内容先push进一个栈inStack,2.判断outStack是否为空,空:将栈inStack中的元素pop(删除并返回数组的最后一个元素)并push进outStack,非空:直接出栈3.出栈时,先push进inStack先从outStack出来,即:实现了先进先出 Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 =原创 2020-07-16 22:55:43 · 377 阅读 · 1 评论 -
剑指Offer——替换字符串中空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。这种替换问题要考虑是否会覆盖原字符串,若是在源字符串上直接替换。看到这个问题我觉得很多人都会想到直接从头开始替换,即遇到空格就将其替换为%20,每次都要将空格后的字符后移两个字节。这种解法的时间复杂度为O(n^2)!!!另外一种较好的解法是从后往前替换,具体做法是从头遍历计算所有空格数,计算出总的长度。 该解法的前提条件是若在源字符串上替换就要求原创 2020-07-10 23:00:46 · 161 阅读 · 0 评论 -
《剑指offer》面试题14:剪绳子(动态规划、贪婪算法)
题目: 给你一根长度为n绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1)。每段的绳子的长度记为k[0]、k[1]、……、k[m]。k[0] * k[1]*…*k[m]可能的最大乘积是多少?例如当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到最大的乘积18。解题思路:动态规划法:动态规划求解问题的四个特征:①求一个问题的最优解;②整体的问题的最优解是依赖于各个子问题的最优解;③小问题之间还有相互重叠的更小的子问题;④从上往下分析问题,从下往上求解问题;原创 2020-07-10 13:26:28 · 276 阅读 · 0 评论 -
LeetCode 88: 合并两个有序数组
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,...原创 2020-04-07 23:10:23 · 246 阅读 · 0 评论 -
LeetCode 66:加一(Plus One )
题目给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 432思路根据题...原创 2020-03-28 17:37:40 · 239 阅读 · 0 评论 -
LeetCode 53:最大子数组(Maximum Subarray )
题目:Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.Example:Input: [-2,1,-3,4,-1,2,1,-5,4],Output: 6Explanat...原创 2020-03-21 22:51:22 · 307 阅读 · 0 评论 -
LeetCode 35:搜索插入位置(Search Insert Position)
题目Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.You may assume no duplicates in the array....原创 2020-03-12 21:50:50 · 121 阅读 · 0 评论 -
Leetcode 27:移除元素
题目Given an array nums and a value val, remove all instances of that value in-place and return the new length.Do not allocate extra space for another array, you must do this by modifying the input ar...原创 2020-03-10 23:00:17 · 97 阅读 · 0 评论 -
LeetCode 26: 从排序数组中删除重复项
题目Given a sorted array nums, remove the duplicates in-place such that each element appear only once and return the new length.Do not allocate extra space for another array, you must do this by modif...原创 2020-03-09 17:07:21 · 207 阅读 · 0 评论 -
LeetCode 70: 爬楼梯
You are climbing a stair case. It takes n steps to reach to the top.Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?Note: Given n will be a positive i...原创 2020-03-09 15:56:13 · 253 阅读 · 0 评论 -
Leetcode 7: 反转整数
题目:反转整数给定一个 32 位有符号整数,将整数中的数字进行反转。例如 给123 翻转成 321 -123 翻转成 -321假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。思路对10取余求解 public int resverse(Integer x){ long resu...原创 2020-03-01 15:38:19 · 138 阅读 · 0 评论 -
LeetCode 1:两数之和
题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]思路1 暴力解...转载 2020-02-28 21:27:49 · 102 阅读 · 0 评论