算法的艺术
本专栏将以JAVA语言为基础推开算法的大门,通过实战,刷题来对数据结构以计及常用算法进行详细解析,一步步带大家领略算法的艺术
不穿西服的程序员
这个作者很懒,什么都没留下…
展开
-
LeetCode 之相同的树
问题描述:给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: ...原创 2018-10-29 09:18:08 · 172 阅读 · 0 评论 -
LeetCode之镜像二叉树(简单 二叉树)
问题描述:给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3说明:如果你可以运用递归和...原创 2018-10-29 10:07:23 · 644 阅读 · 0 评论 -
LeetCode之二叉树最大深度(简单 二叉树)
问题描述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。二叉树的问题解决大概基本两个方向,递归,和队列或者栈实现非递归。...原创 2018-10-29 10:56:36 · 114 阅读 · 0 评论 -
LeetCode之二叉树层次遍历逆序输出(简单 二叉树)
问题描述:给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其自底向上的层次遍历为:[ [15,7], [9,20], [3]]说是简单题,我可没觉...原创 2018-10-29 16:09:41 · 3475 阅读 · 0 评论 -
LeetCode之转换有序数组到二叉搜索树
问题描述:将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / ...原创 2018-10-30 12:19:40 · 121 阅读 · 0 评论 -
LeetCode之判断平衡二叉树
问题描述:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,nu...原创 2018-10-30 15:19:30 · 355 阅读 · 0 评论 -
LeetCode之二叉树最小深度(简单 二叉树)
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最小深度 2.一层一层遍历,每遍历一层,高度+1,知道遇到叶节点,返回高度。publ...原创 2018-10-31 10:53:48 · 189 阅读 · 0 评论 -
LeetCode 之 路径总和(简单 二叉树)
问题描述:给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13...原创 2018-10-31 11:57:42 · 327 阅读 · 0 评论 -
LeetCode之杨辉三角(简单 模拟)
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 5输出:[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]老规矩 先来自己的public List<List<Integer>> gen...原创 2018-10-31 14:33:50 · 273 阅读 · 0 评论 -
LeetCode之杨辉三角二(简单模拟)
问题描述:给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 3输出: [1,3,3,1]进阶:你可以优化你的算法到 O(k) 空间复杂度吗?直接大神代码,今天下午脑袋宕机。例如这是rowIndex = 6 时的情况1st: 1=12nd: 6= 6 / 13rd: 15=...原创 2018-10-31 15:26:39 · 157 阅读 · 0 评论 -
LeetCode之买卖股票的最佳时机
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 ...原创 2018-11-01 14:54:41 · 111 阅读 · 0 评论 -
LeetCode之买卖股票的最佳时机二(简单 数组)
问题描述:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时...原创 2018-11-01 15:43:17 · 152 阅读 · 0 评论 -
LeetCode之验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false自己的low货代码 public boolean isPalindrome...原创 2018-11-02 10:59:36 · 152 阅读 · 0 评论 -
LeetCode之只出现一次的数字
问题描述:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4直接弄 异或public int singleNumber(int[] num...原创 2018-11-02 11:45:35 · 154 阅读 · 0 评论 -
LeetCode之加1(简单 数组)
问题描述:给定表示非负整数的非空数字数组,加上整数的1。存储数字使得最高有效数字位于列表的开头,并且数组中的每个元素包含单个数字。您可以假设整数不包含任何前导零,除了数字0本身。例1:输入: [1,2,3] 输出: [1,2,4] 说明:数组表示整数123。例2:输入: [4,3,2,1] 输出: [4,3,2,2] 说明:数组表示整数4321。上来一...原创 2018-10-25 09:25:27 · 288 阅读 · 0 评论 -
LeetCode之添加二进制
给定两个二进制字符串,返回它们的总和(也是二进制字符串)。输入字符串都是非空的,只包含字符1或 0。例1:输入: a =“11”,b =“1” 输出: “100”例2:输入: a =“1010”,b =“1011” 输出: “10101”大神代码 清晰明了 不解释public String addBinary(String a, String b) { ...原创 2018-10-25 10:55:09 · 117 阅读 · 0 评论 -
LeetCode之爬楼梯
问题描述:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1...原创 2018-10-26 09:47:41 · 146 阅读 · 0 评论 -
LeetCode 之 删除链表重复的元素(简单 链表)
问题描述给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3简单的一批,直接代码默认节点类/** * Definition for singly-linked list. *...原创 2018-10-26 10:08:54 · 142 阅读 · 0 评论 -
LeetCode 之合并两个有序数组
问题描述:给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3...原创 2018-10-26 15:31:54 · 102 阅读 · 0 评论 -
LeetCode之二叉树判断是否相同(简单 二叉树)
问题描述:给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: ...原创 2018-10-26 16:58:51 · 331 阅读 · 0 评论 -
LeetCode之最大连续子数组之和(简单 数组 动态规划)
问题描述:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。考虑最大和跟子数组最后一个元素arr[n-1]...原创 2018-10-24 15:59:43 · 892 阅读 · 0 评论 -
LeetCode之最后一个单词长度(简单 字符串)
给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度。如果不存在最后一个单词,请返回 0 。说明:一个单词是指由字母组成,但不包含任何空格的字符串。示例:输入: "Hello World"输出: 5上来一看题,简单的不得了,提手就写,那结果错的几率就大很多。考虑到字符串组合的复杂性又多少种情况呢。1)直接传一个“ ”(空格)2)直接传一个...原创 2018-10-24 16:31:22 · 130 阅读 · 0 评论 -
LeetCode之报数(简单 模拟 递归)
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:1. 12. 113. 214. 12115. 1112211 被读作 "one 1" ("一个一") , 即 11。11 被读作 "two 1s" ("两个一"), 即 21。21 被读作 "one 2", "one 1" ("一个原创 2018-10-23 11:05:23 · 2144 阅读 · 0 评论 -
LeetCode之删除数组元素(简单 数组)
给定一个数组 nums 和一个值 val,你需要in-place移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在in-place修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并...原创 2018-10-19 10:04:41 · 279 阅读 · 0 评论 -
LeetCode算法之TwoSum(哈希表 简单)
首先先给出问题描述,给定一个整数数组,返回两个数字的索引,使它们相加到特定目标。您可以假设每个输入只有一个解决方案,并且您可能不会两次使用相同的元素。例:给定nums = [2,7,11,15],target = 9,因为nums [ 0 ] + nums [ 1 ] = 2 + 7 = 9,返回[ 0,1 ]。首先在不考虑时间和空间的情况下,暴力方法几乎可以解决所有算...原创 2018-10-08 19:31:49 · 377 阅读 · 0 评论 -
LeetCode之Reverse Integer(反转整数 简单 模拟)
问题描述:给定32位有符号整数,整数的反向数字。例1:输入: 123 输出: 321例2:输入: -123 输出: -321例3:输入: 120 输出: 21注意:假设我们正在处理一个只能在32位有符号整数范围内存储整数的环境:[ - 2^31 2^31 - 1]。出于此问题的目的,假设当反向整数溢出时,函数返回0。首先想到一个逻辑 ,用取...原创 2018-10-10 12:22:07 · 294 阅读 · 0 评论 -
LeetCode之Palindrome Number(回文数 简单 模拟)
问题描述:确定整数是否是回文。当它向前读取向后时,整数是回文。例1:输入: 121 输出: true例2:输入: -121 输出: false 说明:从左到右,它读取-121。从右到左,它变成121-。因此它不是回文。例3:输入: 10 输出: false 说明:从右到左读取01。因此它不是回文。跟进:你能解决它而不将整数转换为字符串?...原创 2018-10-10 15:40:05 · 265 阅读 · 0 评论 -
LeetCode之Roman to Integer(罗马数字 简单 字符串)
问题描述::罗马数字是由七个不同的符号来表示 I,V,X,L,C,D和M。Symbol ValueI 1V 5X 10L 50C 100D 500M 1000例如,两个用II 罗马数字写成,...原创 2018-10-11 10:55:32 · 222 阅读 · 0 评论 -
Leetcode之最长公共子串
问题描述:编写一个函数来查找字符串数组中最长的公共前缀字符串。如果没有公共前缀,则返回空字符串""。例1:输入: ["flower","flow","flight"] 输出: “fl”例2:输入: [“dog”,“racecar”,“car”] 输出: “” 说明:输入字符串中没有公共前缀。注意:所有给定的输入都是小写字母a-z。方法1:水平扫描...原创 2018-10-17 11:12:22 · 2359 阅读 · 0 评论 -
LeetCode之有效括号问题
问题描述:由于只包含字符的字符串’(’,’)’,’{’,’}’,’[‘和’]’,确定输入字符串是有效的。如果输入字符串有效:必须使用相同类型的括号关闭左括号。必须以正确的顺序关闭左括号。请注意,空字符串也被视为有效。例1:输入: “()”输出: true例2:输入: “()[] {}”输出: true例3:输入: “(]”输出: false例4:输入: “([]]”...原创 2018-10-17 15:24:08 · 404 阅读 · 0 评论 -
Leetcode之合并有序单链表(简单 链表 递归)
合并两个已排序的链接列表并将其作为新列表返回。新列表应该通过拼接前两个列表的节点来完成。例:输入: 1-> 2-> 4,1-> 3-> 4输出: 1-> 1-> 2-> 3-> 4-> 4直接递归实现,代码来了/** * Definition for singly-linked list. * public class...原创 2018-10-18 10:17:50 · 159 阅读 · 0 评论 -
LeedCode之数组中删除重复项(简单 数组)
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums ...原创 2018-10-18 11:30:08 · 159 阅读 · 0 评论