
LeetCode
xihuanyuye
企业级Web服务、机器学习
展开
-
常用算法思想
一、概述算法和数据结构一直以来都是程序员的基本内功。数据结构可以看作是算法实现的容器,通过一系列特殊结构的数据集合,能够将算法更为高效而可靠地执行起来。算法的应用不单只体现在编程中。狭义的来讲,算法可看作是数据传递和处理的顺序、方法和组成方式,就像是各种排序算法等。广义的来讲,算法更像是一种事物运行的逻辑和规则。所以对于算法的理解,重要的是领悟其思想,感受其内在。本文旨在抛砖引玉,通过图解+案例的形式,介绍了八种常用的算法思想。二、算法思维1 枚 举首先,最为简单的思想,枚举算法。枚举也叫穷举原创 2020-11-21 17:59:49 · 369 阅读 · 0 评论 -
leetcode解题之48. 旋转图像
问题给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix =[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使其变为:[[7,4,1],[8,5,2],[9,6,3]]示例 2:给定 matr...原创 2019-08-22 17:59:30 · 178 阅读 · 0 评论 -
LeetCode算法45:跳跃游戏 II
问题给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。说明:假设你总是可以到达数组的最后一个位置。...原创 2019-08-22 16:29:18 · 178 阅读 · 0 评论 -
LeetCode算法求解目录
由于文章无法根据标题名称排序,因此这里采用目录来进行记录。原创 2019-08-22 16:19:08 · 196 阅读 · 0 评论 -
LeetCode算法12:java 整数转罗马数字(解法二)
问题罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1...原创 2019-08-20 08:28:28 · 185 阅读 · 0 评论 -
LeetCode算法5:最长回文字符串
题目描述给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”问题评价该题技巧性较强,需要从设计上实现二分法来达到目的复杂度;边界处理仍然是问题的难点;解题思路寻找中位数,最终定位为寻找第K位的值。k是根据...原创 2019-08-19 08:43:12 · 236 阅读 · 0 评论 -
LeetCode算法41:java缺失的第一个正数
问题给定一个未排序的整数数组,找出其中没有出现的最小的正整数。示例 1:输入: [1,2,0]输出: 3示例 2:输入: [3,4,-1,1]输出: 2示例 3:输入: [7,8,9,11,12]输出: 1说明:你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间。思考有的小伙伴上来说这个题太简单了,直接进行一个同样大小的数组的存储,之后将存在数据的对应位置设置...原创 2018-12-26 22:22:47 · 616 阅读 · 0 评论 -
LeetCode算法35:java 搜索插入位置
问题给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 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思路这道...原创 2018-12-26 16:36:24 · 364 阅读 · 3 评论 -
LeetCode算法32:java 最长有效括号
问题给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: “(()”输出: 2解释: 最长有效括号子串为 “()”示例 2:输入: “)()())”输出: 4解释: 最长有效括号子串为 “()()”思考这道题标记为难,也的确是有些难度。受到前一道类似问题的思维影响,更不得其要领。最终参考网络上其他人的答案。仍旧是利用栈的思维进行...原创 2018-12-26 16:04:49 · 798 阅读 · 4 评论 -
LeetCode算法28:java 实现strStr()
问题实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = “hello”, needle = “ll”输出: 2示例 2:输入: haystack = “aaaaa”, needle = “...原创 2018-12-24 16:11:24 · 506 阅读 · 0 评论 -
LeetCode算法27:java 移除元素
题目定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素...原创 2018-12-24 16:00:42 · 464 阅读 · 0 评论 -
LeetCode算法23:java 合并K个排序链表
问题合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6说明根据问题21结合,进行两两合并,问题迎刃原创 2018-12-24 15:06:52 · 1043 阅读 · 0 评论 -
LeetCode算法21:java 合并两个有序链表
问题将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路思路较为简单,难度在与对两个链表的各种边界情况的处理。代码//import utils.delwithNodeList;//import util...原创 2018-12-24 14:50:29 · 416 阅读 · 0 评论 -
LeetCode算法20:有效的括号
问题给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “...原创 2018-12-22 23:21:25 · 134 阅读 · 0 评论 -
LeetCode算法19:删除链表的倒数第N个节点
问题给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。思路其实并没有特别复杂,双指针的思路解决。先用一个指针向前走n步,之后再让头部的指针跟进。注意边界的处理。代码原创 2018-12-22 22:17:49 · 243 阅读 · 0 评论 -
LeetCode算法14:java 最长公共前缀
题目编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。说明这道题目相对简单,这里采用了将第一单词作为标准,轮...原创 2018-12-22 20:29:20 · 380 阅读 · 0 评论 -
LeetCode算法13:java 罗马数字转整数
题目罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1...原创 2018-12-22 20:18:15 · 244 阅读 · 0 评论 -
LeetCode算法11:java 盛水最多的容器
题目给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示...原创 2018-12-22 18:42:30 · 617 阅读 · 0 评论 -
LeetCode算法12:java 整数转罗马数字(解法一)
问题罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1...原创 2018-12-20 21:45:55 · 926 阅读 · 0 评论 -
LeetCode算法8:java 字符串转整数
问题请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可...原创 2018-12-20 19:55:25 · 773 阅读 · 0 评论 -
LeetCode算法7:java 整数反转
问题:示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。问题说明问题的难度适中,主要考虑数学思维,已经计算机中对于边界的处理技巧。这里有个非常有趣的问题...原创 2018-12-20 16:22:38 · 263 阅读 · 0 评论 -
LeetCode算法9:java 回文数
1、题目判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。2、思...原创 2018-12-20 15:33:13 · 492 阅读 · 0 评论 -
LeetCode算法6:java Z 字形变换
题目:将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字符串进行指定行数变换的函数...原创 2018-12-20 14:27:06 · 936 阅读 · 0 评论 -
LeetCode算法3:java 无重复字符的最长子串
问题描述给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “w...原创 2018-12-20 11:49:01 · 146 阅读 · 0 评论 -
LeetCode算法4:java 寻找两个有序数组的中位数
题目描述给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2...原创 2018-12-20 11:33:59 · 2911 阅读 · 1 评论 -
LeetCode算法2:java 两数相加
问题:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -&am原创 2018-12-19 09:25:08 · 186 阅读 · 0 评论 -
LeetCode算法1:java 两数之和
问题:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]解答:1、两...原创 2018-12-19 09:22:34 · 462 阅读 · 0 评论 -
LeetCode shell(四)第十行
假设 file.txt 有如下内容: Line 1 Line 2 Line 3 Line 4 Line 5 Line 6 Line 7 Line 8 Line 9 Line 10答案: sed -n ‘10p’ file.txt原创 2018-08-20 18:44:17 · 259 阅读 · 0 评论 -
LeetCode shell(三)转置文件
文件: 给定一个文件 file.txt,转置它的内容。 file.txt name age alice 21 ryan 30awk ‘{ for(i=1;i<=NF;i++) a[NR,i]=$i} END {for(j=1;j<=NF;j++) for(k=1;k<=NR;k++) ...原创 2018-08-20 18:41:27 · 1534 阅读 · 0 评论 -
LeetCode shell(二)获取有效电话号码
data.txt文件内容: cat data.txt 987-123-4567 123 456 7890 (123) 456-7890 shell命令: sed -n -r ‘/^(?[0-9]{3})?( |-)[0-9]{3}-[0-9]{4}$/p’ data.txt 解释: -n 设置静默输出,后续/p输出匹配项目 -r 扩展正则表达式规则 -r后的‘‘符号内为具体的正...原创 2018-08-20 14:47:56 · 1665 阅读 · 0 评论 -
LeetCode shell(一)统计词频
问题 写一个 bash 脚本以统计一个文本文件 words.txt 中每个单词出现的频率。 为了简单起见,你可以假设: words.txt只包括小写字母和 ’ ’ 。 每个单词只由小写字母组成。 单词间由一个或多个空格字符分隔。 示例 words.txtthe day is sunny the thethe sunny is is输出the 4is 3sun...原创 2018-08-20 10:41:35 · 682 阅读 · 0 评论