
LeetCode算法简单篇
cwq297
这个作者很懒,什么都没留下…
展开
-
旋转数组
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例 2:输入: [-1,-100,3,99] 和 k...原创 2019-10-29 10:12:49 · 132 阅读 · 0 评论 -
阶乘后的零
给定一个整数 n,返回 n! 结果尾数中零的数量。示例 1:输入: 3输出: 0解释: 3! = 6, 尾数中没有零。示例 2:输入: 5输出: 1解释: 5! = 120, 尾数中有 1 个零.例如5!=1x2x3x4x5=120 尾数一个0,10!=1x2x3x4x5x6x7x8x9x10=3628800 尾数两个0 10=2x5这里可以看出2的数量是不缺的,所以我们只要判...原创 2019-10-29 09:41:46 · 108 阅读 · 0 评论 -
Excel表列序号
这题跟列名称那题反过来,根据string求序号。 public int titleToNumber(String s) { int ans = 0; for(int i=0;i<s.length();i++) { int num = s.charAt(i) - 'A' + 1; ans = ans * 2...原创 2019-10-29 09:31:40 · 348 阅读 · 0 评论 -
求众数
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例 1:输入: [3,2,3]输出: 3可以用哈希表做。排序: public int majorityElement(int[] nums) { Arrays.sort(nums); return...原创 2019-10-29 09:28:34 · 123 阅读 · 0 评论 -
Excel表列名称
给定一个正整数,返回它在 Excel 表中相对应的列名称。例如,1 -> A2 -> B3 -> C...26 -> Z27 -> AA28 -> AB ...示例 1:输入: 1输出: “A”示例 2:输入: 28输出: “AB”示例 3:输入: 701输出: “ZY”进制转换问题:public String conv...原创 2019-10-29 09:10:09 · 287 阅读 · 0 评论 -
两数之和 II - 输入有序数组
给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7, 11, 15], targe...原创 2019-10-29 08:57:07 · 72 阅读 · 0 评论 -
相交链表
编写一个程序,找到两个单链表相交的起始节点。输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A ...原创 2019-10-29 08:45:44 · 134 阅读 · 0 评论 -
最小栈
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。用一个辅助栈就行了。 Stack<Integer> stack,min ; public MinStack() { m...原创 2019-10-27 11:16:59 · 84 阅读 · 0 评论 -
环形链表
给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。用哈希表解决:public boolean hasCycle(ListNode ...原创 2019-10-27 11:07:55 · 104 阅读 · 0 评论 -
只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。示例 1:输入: [2,2,1]输出: 1既满足时间复杂度又满足空间复杂度,就要提到位运算中的异或运算 XOR,主要因为异或运算有以下几个特点:一个数和 0 做 XOR 运算等于本身:a⊕0 = a一个数和其本身做 XOR 运算等于 0:a⊕a = 0XOR 运算满足交换律和结合律:...原创 2019-10-27 10:49:33 · 104 阅读 · 0 评论 -
验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: “A man, a plan, a canal: Panama”输出: true第一个for循环是将原字符串数组,转化成在0-n索引内的数字和小写字母。while循环才是判断每次遍历的首尾是否相等。 public boolean is...原创 2019-10-27 10:42:49 · 108 阅读 · 0 评论 -
买卖股票的最佳时机 II
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获...原创 2019-10-27 10:20:25 · 156 阅读 · 0 评论 -
买卖股票的最佳时机
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是...原创 2019-10-27 10:07:50 · 103 阅读 · 0 评论 -
杨辉三角II
给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。示例:输入: 3输出: [1,3,3,1]pre一直存着上一层的数字,cur每次遍历重新new。cur的计算还是根据pre。public List<Integer> getRow(int rowIndex) { List<Integer> pre = new ArrayList<&g...原创 2019-10-27 10:01:08 · 104 阅读 · 0 评论 -
杨辉三角
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。示例:输入: 5输出:[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]根据上一行的List,来求下一行的。 public List<List<Integer>> generate(int numRows) { List<...原创 2019-10-27 09:38:14 · 227 阅读 · 0 评论 -
路径总和
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 ...原创 2019-10-26 16:33:05 · 86 阅读 · 0 评论 -
二叉树的最小深度
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最小深度 2.递归:使用深度优先搜索。 public int minDepth(TreeNo...原创 2019-10-26 16:25:08 · 88 阅读 · 0 评论 -
平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7],返回 true 。 3 / \ 9 20 / \ 15 7从底至顶(提前阻断法)对二叉树做深度优先遍...原创 2019-10-26 16:11:41 · 101 阅读 · 0 评论 -
将有序数组转换为二叉搜索树
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -...原创 2019-10-26 15:49:03 · 128 阅读 · 0 评论 -
二叉树的层次遍历II
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其自底向上的层次遍历为:[[15,7],[9,20],[3]]由例子可以看出,...原创 2019-10-26 10:59:14 · 114 阅读 · 0 评论 -
二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。递归: public int maxDepth(TreeNode root) { if (root == null) { return 0; } else { int left_height = maxDepth(roo...原创 2019-10-24 18:21:32 · 91 阅读 · 0 评论 -
对称二叉树
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。递归:public boolean isSymmetric(TreeNode root) { return isMirror(root, root);}public boolean isMirror(TreeNode t1, TreeNode t2) { if (t1 == ...原创 2019-10-24 15:26:32 · 90 阅读 · 0 评论 -
相同的树
给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。递归: public boolean isSameTree(TreeNode p, TreeNode q) { // p and q are both null if (p == null && q == null) return true; ...原创 2019-10-23 18:51:00 · 73 阅读 · 0 评论 -
合并两个有序数组
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,...原创 2019-10-23 15:40:35 · 102 阅读 · 0 评论 -
删除排序链表中的重复元素
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3public ListNode deleteDuplicates(ListNode head) { ListNode current = head;...原创 2019-10-23 14:48:54 · 80 阅读 · 0 评论 -
爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶归纳一下就是斐波那契数列 public int climbStairs(int n) { if (n == 1) { ...原创 2019-10-23 14:39:33 · 116 阅读 · 0 评论 -
x的平方根
实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。用二分法,注意边界。 public int mySqrt(int x) { ...原创 2019-10-23 14:23:29 · 113 阅读 · 0 评论 -
二进制求值
给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。示例 1:输入: a = “11”, b = “1”输出: “100”利用ca记录进位,sum记录每位的计算,要用到三元表达式计算。注意一点,a和b的位数可能不一样,反应在i和j上,三元表达式中就要先判断,其次利用ASCII计算没位字符大小。 public String addBinar...原创 2019-10-23 14:07:23 · 300 阅读 · 0 评论 -
加一
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。首先搞清楚只有...原创 2019-10-22 15:21:05 · 125 阅读 · 0 评论 -
最后一个单词长度
给定一个仅包含大小写字母和空格 ’ ’ 的字符串,返回其最后一个单词的长度。如果不存在最后一个单词,请返回 0 。说明:一个单词是指由字母组成,但不包含任何空格的字符串。示例:输入: “Hello World”输出: 5两个变量end, start,从尾部遍历,先找到end,再找start。这里要注意一个问题," "这不是空字符串,所以遍历的时候要注意空格。 p...原创 2019-10-22 15:10:09 · 91 阅读 · 0 评论 -
最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。动态规划做法:ans记录的是最终的最大和,sum记录的是每次的计算。复杂度是O(n),遍历一遍得出最大和。状态转移方程其实也就是说明一下两种情况该怎么做。...原创 2019-10-22 14:55:35 · 86 阅读 · 0 评论 -
报数
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:1112112111112211 被读作 “one 1” (“一个一”) , 即 11。11 被读作 “two 1s” (“两个一”), 即 21。21 被读作 “one 2”, “one 1” (“一个二” , “一个一”) , 即 1211。给定一个正整...原创 2019-10-22 13:14:37 · 174 阅读 · 0 评论 -
搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2直接用二分法, 注意left和right的更新方式,在while中只用返回mid,if else中更新left和right,循环外面才返回left。 public int searc...原创 2019-10-22 12:59:57 · 70 阅读 · 0 评论 -
最长回文子串
实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = “hello”, needle = “ll”输出: 2java有简单的函数可以直接用: public int strStr(Stri...原创 2019-10-16 15:26:02 · 82 阅读 · 0 评论 -
移除元素
给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为...原创 2019-10-16 13:29:53 · 82 阅读 · 0 评论 -
删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3,...原创 2019-10-16 13:13:23 · 84 阅读 · 0 评论 -
合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4用递归就可以做,时间复杂度和空间复杂度都是O(m+n): public ListNode mergeTwoLists(ListNode l1, ListNo...原创 2019-10-16 10:45:29 · 70 阅读 · 0 评论 -
有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)...原创 2019-10-16 10:09:24 · 71 阅读 · 0 评论 -
最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。说明: 所有输入只包含小写字母 a-z 。先算出字符串数组中最短的字符串长度shortest,最长前缀不...原创 2019-10-15 13:38:33 · 66 阅读 · 0 评论 -
罗马数字转整数
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12...原创 2019-10-15 13:20:09 · 99 阅读 · 0 评论