
算法练习
东方老司机
海纳百川,有容乃大;壁立千仞,无欲则刚。
展开
-
排序(1):冒泡排序
一、前言冒泡排序是一种交换排序。什么是交换排序呢?两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止。二、算法思想重复地走访要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。/** * 冒泡排序 * @param array * @r...原创 2019-03-22 10:41:41 · 244 阅读 · 0 评论 -
CleanCodeHandbook Chapter 2: Math(17-19)
Math文章目录Mathleetcode7. Reverse Integerleetcode66. Plus Oneleetcode9. Palindrome Numberleetcode7. Reverse IntegerEasy题目题目链接题目:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -...原创 2018-12-16 22:44:50 · 186 阅读 · 0 评论 -
leetcode961. N-Repeated Element in Size 2N Array
Easy题目题目链接题目:思路:很简单很暴力,用hashmap记录每个元素及其对应的出现次数,如果出现次数等于目标次数了,就直接返回… 后来一想,不一定非要等于目标次数,只要大于1就可以返回,速度果然快了很多。class Solution { public int repeatedNTimes(int[] A) { int target = A.length /...原创 2018-12-27 10:54:06 · 382 阅读 · 0 评论 -
leetcode958. Check Completeness of a Binary Tree
题目链接题目:思路:将所有的结点全部押入队列中,空也压入,每次判断队列的头如果队列头为空了则跳出循环,如果此后队列中还有非空元素则不是完全二叉树。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode r...原创 2018-12-21 12:28:04 · 285 阅读 · 0 评论 -
leetcode957. Prison Cells After N Days
文章链接题目:8 间牢房排成一排,每间牢房不是有人住就是空着。每天,无论牢房是被占用或空置,都会根据以下规则进行更改:如果一间牢房的两个相邻的房间都被占用或都是空的,那么该牢房就会被占用。否则,它就会被空置。(请注意,由于监狱中的牢房排成一行,所以行中的第一个和最后一个房间无法有两个相邻的房间。)我们用以下方式描述监狱的当前状态:如果第 i 间牢房被占用,则 cell[i]==1,否则...原创 2018-12-21 09:12:53 · 591 阅读 · 0 评论 -
leetcode954. Array of Doubled Pairs
题目链接题目:给定一个长度为偶数的整数数组 A,只有对 A 进行重组后可以满足 “对于每个 0 <= i < len(A) / 2,都有 A[2 * i + 1] = 2 * A[2 * i]” 时,返回 true;否则,返回 false。示例 1:输入:[3,1,3,6]输出:false示例 2:输入:[4,-2,2,-4]输出:true解释:我们可以用 [-2,-4...原创 2018-12-15 16:33:56 · 309 阅读 · 0 评论 -
leetcode942. DI String Match
题目链接这是一道Easy题目题目给定只含 “I”(增大)或 “D”(减小)的字符串 S ,令 N = S.length。返回 [0, 1, …, N] 的任意排列 A 使得对于所有 i = 0, …, N-1,都有:如果 S[i] == “I”,那么 A[i] < A[i+1]如果 S[i] == “D”,那么 A[i] > A[i+1]示例 1:输出:“IDID”输出...原创 2018-12-06 19:50:00 · 375 阅读 · 0 评论 -
leetcode949. Largest Time for Given Digits
题目链接题目大意:给出四个数字,返回一个最大时间 比如“23:45“示例:Example 1:Input: [1,2,3,4]Output: “23:41”Example 2:Input: [5,5,5,5]Output: “”别人思路:用ijkl分别代表四位数字直接进行遍历即可,重点是比较判断minute<60 hour<24,这个是被我忽略掉的一个好的判断条件,s...原创 2018-12-04 09:00:56 · 393 阅读 · 2 评论 -
leetcode955. Delete Columns to Make Sorted II
题目链接参考自:https://leetcode.com/problems/delete-columns-to-make-sorted-ii/discuss/203182/JavaC%2B%2BPython-Greedy-Solution-O(MN)题目大意:给出来等长的若干字符串,删除其中某一列使其能够递增排序,问至少删除几列示例:输入: [“ca”,“bb”,“ac”]输出: 1输...原创 2018-12-13 13:41:16 · 286 阅读 · 0 评论 -
leetcode948. Bag of Tokens
题目链接题目:你的初始能量为 P,初始分数为 0,只有一包令牌。令牌的值为 token[i],每个令牌最多只能使用一次,可能的两种使用方法如下:如果你至少有 token[i] 点能量,可以将令牌置为正面朝上,失去 token[i] 点能量,并得到 1 分。如果我们至少有 1 分,可以将令牌置为反面朝上,获得 token[i] 点能量,并失去 1 分。在使用任意数量的令牌后,返回我们可以得...原创 2018-12-03 22:27:19 · 447 阅读 · 0 评论 -
leetcode963. Minimum Area Rectangle II
题目链接题目:给定在 xy 平面上的一组点,确定由这些点组成的任何矩形的最小面积,其中矩形的边不一定平行于 x 轴和 y 轴。如果没有任何矩形,就返回 0。示例1:输入:[[1,2],[2,1],[1,0],[0,1]]输出:2.00000解释:最小面积的矩形出现在 [1,2],[2,1],[1,0],[0,1] 处,面积为 2。示例2:输入:[[0,1],[2,1],[1,1...原创 2018-12-27 16:50:20 · 420 阅读 · 0 评论 -
leetcode959. Regions Cut By Slashes
题目链接题目:在由 1 x 1 方格组成的 N x N 网格 grid 中,每个 1 x 1 方块由 /、\ 或空格构成。这些字符会将方块划分为一些共边的区域。(请注意,反斜杠字符是转义的,因此 \ 用 “\” 表示。)。返回区域的数目。参考:**思路: **class Solution { int f[]; //f[x]保存x的上级节点 int count;//...原创 2018-12-28 11:58:22 · 434 阅读 · 0 评论 -
CleanCodeHandbook Chapter 3: Linked List(20-24)
Linked List文章目录Linked Listleetcode21. Merge Two Sorted Listsleetcode21. Merge Two Sorted Lists题目链接将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1-&amp;amp;gt;2-&amp;amp;gt;4, 1-&amp;amp;gt;3-&amp;amp;gt;4原创 2019-01-07 18:10:04 · 250 阅读 · 0 评论 -
八大排序算法
排序算法主要分为内部排序和外部排序。所谓内部排序就是在内存中完成排序过程,外部排序就是由于数据量较大,无法在内存中完成排序过程,需要靠外部磁盘完成排序。 按照策略,内部排序可以分为:交换排序,插入排序,选择排...原创 2019-03-22 09:41:40 · 271 阅读 · 0 评论 -
CleanCodeHandbook Chapter 9: Binary Search(48-50)
Binary Search文章目录Binary Searchleetcode35. Search Insert Positionleetcode153. Find Minimum in Rotated Sorted Arrayleetcode154. Find Minimum in Rotated Sorted Array IIleetcode35. Search Insert Positio...原创 2019-03-12 11:31:28 · 179 阅读 · 0 评论 -
leetcode76. Minimum Window Substring
class Solution { public String minWindow(String s, String t) { int[] map = new int[128]; for(Character ch : t.toCharArray()){ map[ch]++; } //定义counter来计...原创 2019-03-07 15:50:32 · 152 阅读 · 0 评论 -
CleanCodeHandbook Chapter 8: Dynamic Programming(42-47)
Dynamic Programming文章目录Dynamic Programmingleetcode42.Climbing Stairsleetcode42.Climbing Stairs题目链接题目描述:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2...原创 2019-03-09 21:38:28 · 320 阅读 · 0 评论 -
CleanCodeHandbook Chapter 7: Stack(39-41)
Stack文章目录Stackleetcode155. Min Stackleetcode150. Evaluate Reverse Polish Notationleetcode20. Valid Parenthesesleetcode155. Min Stack题目链接题目:给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。leet...原创 2019-03-02 12:01:51 · 179 阅读 · 0 评论 -
CleanCodeHandbook Chapter 6: Misc(35-38)
Misc文章目录Miscleetcode54. Spiral Matrixleetcode54. Spiral Matrix题目链接题目:给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。思路:...原创 2019-01-22 15:08:20 · 225 阅读 · 0 评论 -
CleanCodeHandbook Chapter 5: Bit Manipulation(33-34)
Bit Manipulation文章目录Bit Manipulationleetcode136. Single Numberleetcode136. Single Number题目链接题目:给定一个二叉树,判断其是否是一个有效的二叉搜索树。class Solution { public int singleNumber(int[] nums) { int len ...原创 2019-01-21 16:48:34 · 199 阅读 · 0 评论 -
leetcode978. Longest Turbulent Subarray
题目链接题目:当 A 的子数组 A[i], A[i+1], …, A[j] 满足下列条件时,我们称其为湍流子数组:若 i <= k < j,当 k 为奇数时, A[k] > A[k+1],且当 k 为偶数时,A[k] < A[k+1];或 若 i <= k < j,当 k 为偶数时,A[k] > A[k+1] ,且当 k 为奇数时, A[k] <...原创 2019-01-20 13:10:27 · 332 阅读 · 0 评论 -
leetcode971. Flip Binary Tree To Match Preorder Traversal
题目:给定一个有 N 个节点的二叉树,每个节点都有一个不同于其他节点且处于 {1, …, N} 中的值。通过交换节点的左子节点和右子节点,可以翻转该二叉树中的节点。考虑从根节点开始的先序遍历报告的 N 值序列。将这一 N 值序列称为树的行程。(回想一下,节点的先序遍历意味着我们报告当前节点的值,然后先序遍历左子节点,再先序遍历右子节点。)我们的目标是翻转最少的树中节点,以便树的行程与给定的...原创 2019-01-19 11:00:06 · 260 阅读 · 0 评论 -
CleanCodeHandbook Chapter 4: Binary Tree(25-32)
Binary Tree文章目录Binary Treeleetcode98. Validate Binary Search Treeleetcode98. Validate Binary Search Tree题目链接/** * Definition for a binary tree node. * public class TreeNode { * int val; * ...原创 2019-01-13 22:39:26 · 236 阅读 · 0 评论 -
leetcode953. Verifying an Alien Dictionary
题目链接Easy题目题目大意:自定义了一个字典序,用这个自定义的字典序判断数组中字符串是否是升序的。示例:输入 words = [“hello”,“leetcode”], order = “hlabcdefgijkmnopqrstuvwxyz”输出 true输入 words = [“word”,“world”,“row”], order = “worldabcefghijkmnpqst...原创 2018-12-13 09:08:05 · 486 阅读 · 0 评论 -
leetcode944. Delete Columns to Make Sorted
题目:给定由 N 个小写字母字符串组成的数组 A,其中每个字符串长度相等。选取一个删除索引序列,对于 A 中的每个字符串,删除对应每个索引处的字符。 所余下的字符串行从上往下读形成列。比如,有 A = [“abcdef”, “uvwxyz”],删除索引序列 {0, 2, 3},删除后 A 为[“bef”, “vyz”], A 的列分别为[“b”,“v”], [“e”,“y”], [“f”,“z...原创 2018-12-05 22:43:03 · 282 阅读 · 0 评论 -
leetcode898.BitwiseORsofSubarrays
转自:https://blog.youkuaiyun.com/u014110320/article/details/82316690参考:https://blog.youkuaiyun.com/yeshen4328/article/details/82563040题目链接898. Bitwise ORs of Subarrays题目描述We have an array A of non-negative int...原创 2018-11-02 11:28:15 · 163 阅读 · 0 评论 -
leetcode932.BeautifulArray
N0.932. Beautiful Array题意:给定一个排列,要求给出其满足对于任意一个数A[k],使得i<k<j,2×A[k]!=A[i]+A[j].的一个排列别人思路:这个问题有一个非常美妙的数学解法。首先我们要证明漂亮数组满足这样几种性质1.减法(减去一个数仍然是漂亮数组)(A[k]−x)∗2=A[k]∗2−2∗x≠(A[i]−x+A[j]−x) (A[k]-x)*...原创 2018-11-04 09:57:10 · 224 阅读 · 0 评论 -
leetcode934.ShortestBridge
转自:https://www.unclegem.cn/2018/11/07/Leetcode学习笔记-934-最短的桥/题目:在给定的二维二进制数组 A 中,存在两座岛。(岛是由四面相连的 1 形成的一个最大组。)现在,我们可以将 0 变为 1,以使两座岛连接起来,变成一座岛。返回必须翻转的 0 的最小数目。(可以保证答案至少是 1。)简单来说,就是把矩阵中所有的1连接起来思路:先利用d...转载 2018-11-09 09:32:10 · 481 阅读 · 0 评论 -
leetcode894.AllPossibleFullBinaryTrees
题目:给出了个N,代表一棵二叉树有N个节点,求所能构成的满二叉树。别人思路:本问题可以考虑用分治递归来解决,现在考虑有个根节点,它的所有满二叉树组合为allPossibleFBT(N) ,左子树可能有的节点数目为1,2,…,i,…,N-1,同时右子树可能有的节点数目为N-1-1,N-2-1,…,N-i-1,…,1。那么我们可以分别得到左右子树的所有满二叉树的组合:allPossibleFB...原创 2018-11-06 09:54:19 · 183 阅读 · 0 评论 -
leetcode885.SpiralMatrixIII
题目:按照顺时针顺序,把一个矩阵的每个位置遍历一遍。遍历时,圈子越来越大,不能走已经走过了的节点。而且,如果走到了矩阵的外边,那么依然可以走。返回的结果是遍历矩阵节点时的顺序。输入:一个整型数组 前两位代表矩阵的行列数目,后两位代表起点的坐标输出:二维数组,记录了顺时针依次走过的矩阵的坐标别人思路:1.在走螺旋的时候,其实是找规律右1、下1、左2、上2、右3、下3……,然后对应一下坐标的...原创 2018-10-27 09:35:43 · 292 阅读 · 0 评论 -
881.BoatstoSavePeople
题目:输入一个字符串和一个数字,字符串的每个元素值代表每个人的重量,数字代表船的最大载重每个船上最多坐俩人,求需要多少船能把所有人载走。输入:一个字符串people[]和整型limit输出:船的数量别人思路:贪心算法 对数组进行从大到小排序,判断头和尾相加是不是满足条件(能坐一条船) 如果满足条件,则尾部指针前移一位,头部指针后移一位,记录加一; 如果不满足条件,尾部指针迁移一...原创 2018-10-24 21:58:41 · 189 阅读 · 0 评论 -
leetcode880.DecodedStringatIndex
N0.880题目:输入一个字符串,然后这个字符串中出现数字n的话,就把这个数字的前面所有字符重复n-1遍,以此类推,然后返回最后生成的字符串的第k位输入:一个字符串输出:一个字符串的第k位思路: 遍历字符串,然后遇见数字 就把之前的字符串重复一波,以此类推,最后返回第k位不过最后导致内存溢出了,很尴尬,说明此路不通别人思路:因为是求第K位,所以先按照题目要求,找到包含第K位的新字符串的...原创 2018-10-21 21:18:10 · 275 阅读 · 0 评论 -
leetcode18.4Sum
题目:给出一个数组和一个目标整数,从数组中任意取(有放回的抽取)四个数相加等于这个目标整数,求满足条件的四个数。输入:一个数组nums[] 和 一个整数target输出:满足条件的整数序列 List<List< I n t e g e r >>别人思路:对数组排序确定四元数中的前两个(a,b)遍历剩余数组确定两外两个(c,d),确定cd时思路跟3Sum确定后两个...原创 2018-10-25 21:11:03 · 173 阅读 · 0 评论 -
leetcode886.PossibleBipartition
转自:https://blog.youkuaiyun.com/QingyunAlgo/article/details/82106963题目: 有N个人,编号从1到N。现在我们试图把他们分成两组。一个人可能不喜欢某些人,那么这个人和他不喜欢的人不能分到一组。输入一个数组dislikes,数组的第i项dislikes[i] = [a, b]表示编号为a的人不喜欢编号为b的人,因此他们不能分到同一组。请根据dis...转载 2018-10-28 09:52:29 · 283 阅读 · 0 评论 -
leetcode877.StoneGame
题目:一个数组,俩人从里面取数,要么从最左边取,要么从最右边取,直至把所有数取完,若第一个人取得所有数之和比第二个人取得数之和大,则为true输入:一个整型数组输出:true or false别人思路: 使用动态规划的思想:设dp[i][j]表示从piles[i]到piles[j]你可以比对手多得的最多的分数。这样我们的最终目标是dp[0][n-1]。 现在我们需要确定转移方程和初始...原创 2018-10-19 20:41:54 · 226 阅读 · 0 评论 -
leetcode933.NumberofRecentCalls
题目:依次输入数据,每次输入一个数t后,返回其之前所输入的数据在[t-3000,t]区间内的个数, 保证每次输入的数据都比上次大。思路:用个list来记录,如果第一个数输入进来,直接返回1然后每次输入进来数后,看看第一个数在不在该区间内,如果在,把该数加到list中,直接返回list大小。如果第一个数不在区间内,然后就用二分查找,找到最接近t-3000数的位置,然后用list大小减去该位置即可...原创 2018-11-07 22:41:02 · 583 阅读 · 0 评论 -
leetcode907.SumofSubarrayMinimums
题目:给定正整数数组A,求出A中所有连续子序列的最小值之和mod (10^9 + 7)。别人思路:对于A中的每一个值A[i],寻找以它为最小值的子序列的数量。也就是说,我们需要寻找A[i]左侧第一个比它大的值的位置,以及右侧第一个比它大的值的位置。然后就可以计算对应的子序列的数量了。class Solution { public int sumSubarrayMins(int[] A)...原创 2018-11-05 15:54:38 · 352 阅读 · 0 评论 -
leetcode889.ConstructBinaryTreefromPreorderandPostorderTrav
N0.889题目:给出二叉树的先序遍历和后序遍历的结果,求一组层次遍历的结果别人思路:先序遍历 根左右;后序遍历 左右根一般遇到二叉树的题都用递归求解。很明显,先序和后序复原的二叉树是不唯一,我们只需要根据某种规律恢复可能的一种二叉树。比如,可以根据先序遍历找到第一个子树的头结点,作为左子树。(1)先序遍历序列的第一个元素一定是根节点.(2)先序遍历序列的第二个元素是根节点的左子树的...原创 2018-11-05 22:38:08 · 167 阅读 · 0 评论 -
leetcode162. Find Peak Element
题目链接题目:峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设 nums[-1] = nums[n] = -∞。示例 1:输入: nums = [1,2,3,1]输出: 2解释: 3 是峰值元素,你的函数应该返回其索引...原创 2018-12-08 12:36:05 · 150 阅读 · 0 评论 -
leetcode946. Validate Stack Sequences
题目链接题目:给出两个数组,调整第一个数组的输入输出顺序能否变成第二个数组示例:输入: pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出: true思路:遍历一下,利用栈的属性class Solution { public boolean validateStackSequences(int[] pushed, int[] popped)...原创 2018-12-03 11:06:40 · 315 阅读 · 0 评论