![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
很好的坏人
一个很菜的程序猿
展开
-
Leetcode26删除排序数组中的重复项
题目26:删除排序数组中的重复项给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的...原创 2018-12-19 21:40:30 · 114 阅读 · 0 评论 -
Leetcode121: 买卖股票的最佳时机
题目121: 买卖股票的最佳时机给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 =...原创 2018-12-19 22:59:01 · 154 阅读 · 0 评论 -
Leetcode122:买卖股票的最佳时机 II
题目122:买卖股票的最佳时机 II给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价...原创 2018-12-19 23:18:48 · 106 阅读 · 0 评论 -
Leetcode50:Pow(x, n)
题目:Pow(x, n)实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明:-100.0 < x ...原创 2018-12-20 19:29:09 · 159 阅读 · 0 评论 -
Leetcode283:移动零
题目283:移动零给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。解法1设置一个指针i指示当前非0元素应该放的位置从头遍历数组 每扫描到一个非0元素 将这个元素放i的位置,i++最后将0补齐/...原创 2018-12-20 22:41:24 · 216 阅读 · 0 评论 -
Leetcode27:移除元素
题目27:移除元素给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 num...原创 2018-12-20 23:12:53 · 272 阅读 · 0 评论 -
Leetcode26:删除排序数组中的重复项
题目26:删除排序数组中的重复项给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的...原创 2018-12-20 23:22:07 · 130 阅读 · 0 评论 -
Leetcode80:删除排序数组中的重复项 II
题目80:删除排序数组中的重复项 II给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定 nums = [1,1,1,2,2,3],函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 ...原创 2018-12-21 00:14:56 · 123 阅读 · 0 评论 -
最小生成树问题
最小生成树(Minimum Span Tree)针对带权无向图针对连通图切分把途中的结点分为两部分,成为一个切分(Cut)如果一个边的两个端点,属于切分不同的两边,这个边称为横切边(Crossing Edge)切分定理给定任意切分,横切边中权值最小的边必然属于最小生成树。...原创 2018-12-16 04:12:16 · 1091 阅读 · 0 评论 -
最短路径问题
Dijkstra单源最短路径算法前提:图中不能有负权边复杂度:O(ElogV)代码/* * Created by wxn * 2018/12/17 23:12 */import java.util.Stack;import java.util.Vector;/** * Dijkstra单源最短路径算法 */public class Dijkstra&lt...原创 2018-12-18 00:10:48 · 257 阅读 · 0 评论 -
Leetcode75:颜色分类
题目75:颜色分类给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]解法1 计数排序 //解法1. 计数排序 ...原创 2018-12-24 23:45:12 · 116 阅读 · 0 评论 -
Leetcode215:数组中的第K个最大元素
题目215:数组中的第K个最大元素在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度...原创 2018-12-25 02:21:45 · 1245 阅读 · 0 评论 -
Leetcode167:两数之和 II - 输入有序数组
题目167:两数之和 II - 输入有序数组给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers...原创 2018-12-25 19:56:05 · 149 阅读 · 0 评论 -
Leetcode344:反转字符串
题目344:反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:[“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]...原创 2019-03-03 18:56:40 · 95 阅读 · 0 评论 -
Leetcode345:反转字符串中的元音字母
题目345:反转字符串中的元音字母编写一个函数,以字符串作为输入,反转该字符串中的元音字母。示例 1:输入: “hello”输出: “holle”示例 2:输入: “leetcode”输出: “leotcede”解法1 对撞指针public String reverseVowels(String s) { Character[] yuanyin = {'a', 'e'...原创 2019-03-03 19:27:31 · 193 阅读 · 0 评论 -
Leetcode11:盛最多水的容器
题目11:盛最多水的容器给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容...原创 2019-03-03 20:00:13 · 126 阅读 · 0 评论 -
Leetcode209:长度最小的子数组
题目209:长度最小的子数组给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。示例:输入: s = 7, nums = [2,3,1,2,4,3]输出: 2解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。解法1. 暴力求解public int minSubArrayLe...原创 2019-03-03 23:26:30 · 129 阅读 · 0 评论 -
Leetcode3:无重复字符的最长子串
题目3:无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因...原创 2019-03-06 22:20:59 · 153 阅读 · 0 评论 -
Leetcode438:找到字符串中所有字母异位词
给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。说明:字母异位词指字母相同,但排列不同的字符串。不考虑答案输出的顺序。示例 1:输入:s: “cbaebabacd” p: “abc”输出:[0, 6]解释:起始索引等于 0 的子串是 “...原创 2019-03-06 23:50:57 · 103 阅读 · 0 评论 -
Leetcode349:两个数组的交集
题目349:两个数组的交集给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [9,4]说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。解法1public in...原创 2019-03-19 21:30:57 · 92 阅读 · 0 评论 -
Leetcode350:两个数组的交集 II
题目350:两个数组的交集 II给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2,2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。我们可以不考虑...原创 2019-03-19 21:50:11 · 163 阅读 · 7 评论 -
Leetcode242:有效的字母异位词
有效的字母异位词解法1解法2给定两个字符串s和t,编写一个函数来判断t是否是s的一个字母异位词。\color{CornflowerBlue}{给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。}给定两个字符串s和t,编写一个函数来判断t是否是s的一个字母异位词。示例 1:输入: s = “anagram”, t = “nagaram”输出: true...原创 2019-03-19 23:31:25 · 175 阅读 · 0 评论 -
Leetcode76:最小覆盖子串
题目76:最小覆盖子串解法1 滑动窗口 /* 首先想到使用滑动窗口 */ public String minWindow(String s, String t) { int[] freq = new int[128]; int count = 0; int minLen = Integer.MAX_VALUE; ...原创 2019-03-12 21:47:35 · 271 阅读 · 0 评论 -
Leetcode5:最长回文子串
题目5:最长回文子串给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”解法1 //解法1 暴力求解 public String longestPalindrome(String s) { ...原创 2019-03-12 22:43:04 · 80 阅读 · 0 评论 -
Leetcode205:同构字符串
给定两个字符串 s 和 t,判断它们是否是同构的。如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。示例 1:输入: s = “egg”, t = “add”输出: true示例 2:输入: s = “foo”, t = “bar”输出: fals...原创 2019-03-24 18:28:56 · 287 阅读 · 0 评论 -
Leetcode451:根据字符出现频率排序
解法1原创 2019-03-24 21:18:00 · 278 阅读 · 0 评论 -
Leetcode1:两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]解法1暴力双重循...原创 2019-03-25 21:43:04 · 90 阅读 · 0 评论 -
Leetcode15:三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]解法1 暴力法三重循环,但需要注...原创 2019-03-25 23:03:32 · 109 阅读 · 0 评论 -
Leetcode18:四数之和
给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:[...原创 2019-03-25 23:37:39 · 160 阅读 · 0 评论 -
Leetcode219:存在重复元素 II
给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k。示例 1:输入: nums = [1,2,3,1], k = 3输出: true示例 2:输入: nums = [1,0,1,1], k = 1输出: true示例 3:输入: nums = [1,2,3,1...原创 2019-03-30 18:28:38 · 80 阅读 · 0 评论 -
Leetcode217: 存在重复元素
给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例 3:输入: [1,1,1,3,3,4,3,2,4,2]输出: truepublic boolean contain...原创 2019-03-30 18:32:49 · 59 阅读 · 0 评论 -
Leetcode220: 存在重复元素 III
给定一个整数数组,判断数组中是否有两个不同的索引 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值最大为 t,并且 i 和 j 之间的差的绝对值最大为 ķ。示例 1:输入: nums = [1,2,3,1], k = 3, t = 0输出: true示例 2:输入: nums = [1,0,1,1], k = 1, t = 2输出: true示例 3:...原创 2019-03-30 19:21:49 · 297 阅读 · 0 评论 -
Leetcode202:快乐数
文章目录解法1解法2编写一个算法来判断一个数是不是“快乐数”。一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。示例:输入: 19输出: true解释:12+92=821^2 + 9^2 = 8212+92=8282+22=688^2 +...原创 2019-03-24 17:23:19 · 946 阅读 · 0 评论 -
Leetcode290:单词模式
给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式。这里的遵循指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应模式。示例1:输入: pattern = “abba”, str = “dog cat cat dog”输出: true示例 2:输入:pattern = “abba”, s...原创 2019-03-24 17:46:37 · 103 阅读 · 0 评论 -
Leetcode49:字母异位词分组
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]解法1利用查找表,注意仔细思考map的key与value分别是什么public List<...原创 2019-03-27 22:52:15 · 101 阅读 · 0 评论 -
Leetcode16:最接近的三数之和
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).解法1 暴力法 //解法1 暴力法 p...原创 2019-03-27 21:20:54 · 87 阅读 · 0 评论 -
Leetcode454:四数相加 II
给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - 1 之间,最终结果不会超过 231 - 1 。例如:输入:A = [ 1, 2...原创 2019-03-27 22:15:56 · 136 阅读 · 0 评论 -
【剑指Offer】重构二叉树
/** * 给定二叉树的先序遍历和中序遍历 * 重新生成二叉树 */public class ReConstructBinaryTree { private class TreeNode{ Integer value; TreeNode left; TreeNode right; public TreeNode(Integer value) { this.val...原创 2019-04-01 20:24:15 · 198 阅读 · 0 评论 -
Leetcode206:反转链表
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL解法1//解法1 改变参数的结构 public ListNode reverseList(ListNode head) { ListNode pre = null; ListNode cur = he...原创 2019-04-01 21:14:15 · 97 阅读 · 0 评论 -
Leetcode92: 反转链表 II
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL想的很混乱,后面还要再看看!!public ListNode reverseBetween(List...原创 2019-04-01 22:43:57 · 121 阅读 · 0 评论