![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
xihuanyuye
企业级Web服务、机器学习
展开
-
常用算法思想
一、概述 算法和数据结构一直以来都是程序员的基本内功。 数据结构可以看作是算法实现的容器,通过一系列特殊结构的数据集合,能够将算法更为高效而可靠地执行起来。 算法的应用不单只体现在编程中。狭义的来讲,算法可看作是数据传递和处理的顺序、方法和组成方式,就像是各种排序算法等。广义的来讲,算法更像是一种事物运行的逻辑和规则。 所以对于算法的理解,重要的是领悟其思想,感受其内在。本文旨在抛砖引玉,通过图解+案例的形式,介绍了八种常用的算法思想。 二、算法思维 1 枚 举 首先,最为简单的思想,枚举算法。枚举也叫穷举原创 2020-11-21 17:59:49 · 331 阅读 · 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 · 410 阅读 · 0 评论 -
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 · 465 阅读 · 0 评论 -
LeetCode shell(一)统计词频
问题 写一个 bash 脚本以统计一个文本文件 words.txt 中每个单词出现的频率。 为了简单起见,你可以假设: words.txt只包括小写字母和 ’ ’ 。 每个单词只由小写字母组成。 单词间由一个或多个空格字符分隔。 示例 words.txt the day is sunny the the the sunny is is 输出 the 4 is 3 sun...原创 2018-08-20 10:41:35 · 644 阅读 · 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 · 1612 阅读 · 0 评论 -
LeetCode shell(三)转置文件
文件: 给定一个文件 file.txt,转置它的内容。 file.txt name age alice 21 ryan 30 awk ‘{ 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 · 1483 阅读 · 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 · 234 阅读 · 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 · 392 阅读 · 0 评论 -
LeetCode算法2:java 两数相加
问题: 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -&am原创 2018-12-19 09:25:08 · 152 阅读 · 0 评论 -
LeetCode算法5:最长回文字符串
题目描述 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: “babad” 输出: “bab” 注意: “aba” 也是一个有效答案。 示例 2: 输入: “cbbd” 输出: “bb” 问题评价 该题技巧性较强,需要从设计上实现二分法来达到目的复杂度; 边界处理仍然是问题的难点; 解题思路 寻找中位数,最终定位为寻找第K位的值。k是根据...原创 2019-08-19 08:43:12 · 189 阅读 · 0 评论 -
LeetCode算法12:java 整数转罗马数字(解法二)
问题 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1...原创 2019-08-20 08:28:28 · 151 阅读 · 0 评论 -
LeetCode算法求解目录
由于文章无法根据标题名称排序,因此这里采用目录来进行记录。原创 2019-08-22 16:19:08 · 151 阅读 · 0 评论 -
LeetCode算法45:跳跃游戏 II
问题 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 示例: 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。 说明: 假设你总是可以到达数组的最后一个位置。 ...原创 2019-08-22 16:29:18 · 145 阅读 · 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 · 136 阅读 · 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 · 966 阅读 · 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 · 333 阅读 · 0 评论 -
LeetCode算法20:有效的括号
问题 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: “()” 输出: true 示例 2: 输入: “()[]{}” 输出: true 示例 3: 输入: “(]” 输出: false 示例 4: 输入: “...原创 2018-12-22 23:21:25 · 107 阅读 · 0 评论 -
LeetCode算法3:java 无重复字符的最长子串
问题描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3: 输入: “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “w...原创 2018-12-20 11:49:01 · 111 阅读 · 0 评论 -
LeetCode算法6:java Z 字形变换
题目: 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下: L C I R E T O E S I I G E D H N 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。 请你实现这个将字符串进行指定行数变换的函数...原创 2018-12-20 14:27:06 · 877 阅读 · 0 评论 -
LeetCode算法9:java 回文数
1、题目 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。 2、思...原创 2018-12-20 15:33:13 · 376 阅读 · 0 评论 -
LeetCode算法7:java 整数反转
问题: 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 注意: 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。 问题说明 问题的难度适中,主要考虑数学思维,已经计算机中对于边界的处理技巧。这里有个非常有趣的问题...原创 2018-12-20 16:22:38 · 211 阅读 · 0 评论 -
LeetCode算法32:java 最长有效括号
问题 给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。 示例 1: 输入: “(()” 输出: 2 解释: 最长有效括号子串为 “()” 示例 2: 输入: “)()())” 输出: 4 解释: 最长有效括号子串为 “()()” 思考 这道题标记为难,也的确是有些难度。受到前一道类似问题的思维影响,更不得其要领。最终参考网络上其他人的答案。 仍旧是利用栈的思维进行...原创 2018-12-26 16:04:49 · 728 阅读 · 4 评论 -
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 · 319 阅读 · 3 评论 -
LeetCode算法8:java 字符串转整数
问题 请你来实现一个 atoi 函数,使其能将字符串转换成整数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。 该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可...原创 2018-12-20 19:55:25 · 724 阅读 · 0 评论 -
LeetCode算法12:java 整数转罗马数字(解法一)
问题 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1...原创 2018-12-20 21:45:55 · 828 阅读 · 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 · 572 阅读 · 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 · 570 阅读 · 0 评论 -
LeetCode算法13:java 罗马数字转整数
题目 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1...原创 2018-12-22 20:18:15 · 190 阅读 · 0 评论 -
LeetCode算法14:java 最长公共前缀
题目 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 示例 1: 输入: [“flower”,“flow”,“flight”] 输出: “fl” 示例 2: 输入: [“dog”,“racecar”,“car”] 输出: “” 解释: 输入不存在公共前缀。 说明: 所有输入只包含小写字母 a-z 。 说明 这道题目相对简单,这里采用了将第一单词作为标准,轮...原创 2018-12-22 20:29:20 · 304 阅读 · 0 评论 -
LeetCode算法19:删除链表的倒数第N个节点
问题 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 思路 其实并没有特别复杂,双指针的思路解决。先用一个指针向前走n步,之后再让头部的指针跟进。 注意边界的处理。 代码原创 2018-12-22 22:17:49 · 168 阅读 · 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 · 2806 阅读 · 1 评论