LeetCode
daladongba
这个作者很懒,什么都没留下…
展开
-
leetcode - Next Greater Element I-III - Java
遇到了一道Easy题,这个Easy在于解起来很好解,但最优解实在不好想(现在的我是真想不太出来,看题看少了,读书读少了):You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of nums2. Find all the next greater numbers for nums1’s elements in the corresponding places of nu原创 2020-12-24 14:28:32 · 157 阅读 · 1 评论 -
leetcode - Decoded String at Index - java
An encoded string S is given. To find and write the decoded string to a tape, the encoded string is read one character at a time and the following steps are taken:If the character read is a letter, that letter is written onto the tape.If the character r原创 2020-12-21 14:20:11 · 144 阅读 · 0 评论 -
leetcode - Unique Binary Search Trees II - Java
题目描述:输入一个数字,输出所有可能的BST,1…n。Example:Input: 3Output:[[1,null,3,2],[3,2,null,1],[3,1,null,null,2],[2,1,3],[1,null,2,null,3]]Explanation:The above output corresponds to the 5 unique BST’s shown below: 1 3 3 2 1 \原创 2020-12-09 16:51:01 · 104 阅读 · 0 评论 -
leetcode - Jump Game - java
题目描述:给定一个数组,从index为0开始,每次最大可以跳nums[index]步,能跳到index为length-1为true,不能则为false。Input: nums = [2,3,1,1,4]Output: trueExplanation: Jump 1 step from index 0 to 1, then 3 steps to the last index.方法一:贪心算法,不断更新lastPos,判断当前点能否跳到lastPos,能跳到则将当前点设置为lastPos,直到las原创 2020-11-30 17:06:43 · 134 阅读 · 0 评论 -
leetcode -Jump Game III - Java
Given an array of non-negative integers arr, you are initially positioned at start index of the array. When you are at index i, you can jump to i + arr[i] or i - arr[i], check if you can reach to any index with value 0.Notice that you can not jump outside原创 2020-11-30 11:28:15 · 141 阅读 · 0 评论 -
leetcode - 394. Decode String -Java
Given an encoded string, return its decoded string.The encoding rule is: k[encoded_string], where the encoded_string inside the square brackets is being repeated exactly k times. Note that k is guaranteed to be a positive integer.You may assume that the原创 2020-11-20 14:10:10 · 140 阅读 · 0 评论 -
leetcode-450.删除二叉搜索树中的节点-Java
给定一个二叉树和一个key,删除二叉树中值为key的节点。删除节点还要保持BST的特性,那么有三种情况:1、该节点只有左子树2、该节点只有右子树3、该节点既有左子树也有右子树前两种情况比较简单,就直接拿左子树的根或者右子树的根替换就可以了第三种情况,我们有两种选择,一是我们可以选取左子树的最大值来替换,二是我们可以选取右子树的最小值来替换class Solution { public TreeNode deleteNode(TreeNode root, int key) {原创 2020-11-19 16:07:49 · 120 阅读 · 0 评论 -
求两个数的最大公因数
public int gcd(int a, int b) { if (a == 0) return b; return gcd(b % a, a); }原创 2020-11-18 10:47:18 · 344 阅读 · 0 评论 -
leetcode-593. Valid Square-java
Given the coordinates of four points in 2D space, return whether the four points could construct a square.The coordinate (x,y) of a point is represented by an integer array with two integers.Example:Input: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]原创 2020-11-12 13:27:22 · 173 阅读 · 0 评论 -
leetcode - 652. Find Duplicate Subtrees - Java
Given the root of a binary tree, return all duplicate subtrees.For each kind of duplicate subtrees, you only need to return the root node of any one of them.Two trees are duplicate if they have the same structure with the same node values.Example 1:I原创 2020-11-11 15:09:00 · 168 阅读 · 0 评论 -
leetcode - 832.Flipping an Image -Java
Given a binary matrix A, we want to flip the image horizontally, then invert it, and return the resulting image.To flip an image horizontally means that each row of the image is reversed. For example, flipping [1, 1, 0] horizontally results in [0, 1, 1].原创 2020-11-11 11:24:23 · 104 阅读 · 0 评论 -
leetcode - Add tow numbers - Java
题目描述:给两个非空的List,将两个list的值相加,返回结果list。思路:该链表的前面部分就是数值的低位,所以依次读取链表中的数值就OK了,要考虑到相加大于10的情况。我自己写的solution有点复杂:public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode ans = new ListNode(-1); ListNode index = ans; int jump =原创 2020-11-02 14:32:08 · 108 阅读 · 0 评论 -
leetcode - Convert Binary Number in a Linked List to Integer - Java
Given head which is a reference node to a singly-linked list. The value of each node in the linked list is either 0 or 1. The linked list holds the binary representation of a number.Return the decimal value of the number in the linked list.题目描述:将存放二进制数的原创 2020-11-02 10:51:49 · 130 阅读 · 0 评论 -
leetcode - 849.Maximize Distance to Closest Person - Java
You are given an array representing a row of seats where seats[i] = 1 represents a person sitting in the ith seat, and seats[i] = 0 represents that the ith seat is empty (0-indexed).There is at least one empty seat, and at least one person sitting.Alex w原创 2020-10-30 10:58:39 · 152 阅读 · 0 评论 -
leetcode-228. Summary Ranges-Java
You are given a sorted unique integer array nums.Return the smallest sorted list of ranges that cover all the numbers in the array exactly. That is, each element of nums is covered by exactly one of the ranges, and there is no integer x such that x is in原创 2020-10-29 16:20:45 · 163 阅读 · 0 评论 -
leetcode-1521.找到最接近目标值的函数值-java
读大佬文章第四题有感Winston 构造了一个如上所示的函数 func 。他有一个整数数组 arr 和一个整数 target ,他想找到让 |func(arr, l, r) - target| 最小的 l 和 r 。请你返回 |func(arr, l, r) - target| 的最小值。请注意, func 的输入参数 l 和 r 需要满足 0 <= l, r < arr.length 。示例 1:输入:arr = [9,12,3,7,15], target = 5 输出:2 解释原创 2020-09-01 17:33:30 · 354 阅读 · 0 评论 -
leetcode-整数拆分-Java
题目描述:给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。思路:众所周知将一个数尽可能多地分为3,这样的乘积最大,但如果一个数分为了3+1,那么需要将其转换为2+2,因为31 < 22。此题O(n)解法如下:class Solution原创 2020-07-30 10:05:01 · 378 阅读 · 0 评论 -
leetcode-300/673上升子序列-Java
遇到两个比较类似的动态规划题目No.300:题目描述:给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。思路:定义一个dp[i] 表示以 nums[i] 这个数结尾的最长递增子序列的长度。而dp[i] = Math.max(dp[i], dp[j] + 1); (0<= j <i)。该问题的主要解决是确定dp要存储什么内容确定好dp存储原创 2020-07-22 22:55:30 · 134 阅读 · 0 评论 -
leetcode-在排序数组中查找元素的第一个和最后一个位置-java
题目描述:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: [-1,-1]思路:其实就是寻求最左边界问题,遇到target不要着急原创 2020-07-22 11:12:44 · 180 阅读 · 0 评论 -
leetcode-153/154旋转数组的最小值-Java
遇到两个比较不错二分查找的题,不过我觉得难度可能标反了,用简单二分查找就能解决的题No.153寻找旋转排序数组中的最小值标成了中等,而比No.153要多考虑一个条件的题剑指 Offer 11. 旋转数组的最小数字标成了简单下面我们先看中等题153:题目描述:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素(重点,要考!!)。示例 1:输入:原创 2020-07-22 10:18:57 · 246 阅读 · 0 评论 -
leetcode-有序数组中的单一元素-Java
题目描述:给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。示例 1:输入: [1,1,2,3,3,4,4,8,8]输出: 2示例 2:输入: [3,3,7,7,10,11,11]输出: 10思路:二分查找:int mid = l + (r - l)/2,boolean flag = (r - mid)%2 == 0有四种情况(1)nums[mid] == nums[mid+1] && flag 说明mid指向双数的前一个原创 2020-07-21 14:11:56 · 182 阅读 · 0 评论 -
leetcode-划分字母区间-Java
题目描述:字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。示例 1:输入:S = “ababcbacadefegdehijhklij”输出:[9,7,8]解释:划分结果为 “ababcbaca”, “defegde”, “hijhklij”。每个字母最多出现在一个片段中。像 “ababcbacadefegde”, “hijhklij” 的划分是错误的,因为划分的片段数较少。思想:策略就是先维原创 2020-07-21 11:01:05 · 290 阅读 · 0 评论 -
leetcode-最大子序和-Java
题目描述:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。思想:动态规划,比如上边的数组 [-2,1,-3,4,-1,2,1,-5,4],我们每遇到前一个是正数就加到当前值上边,将数组转换成[-2,1,-2,4,3,5,6,1,5]这样求最大值,这个是官方给的一个题解,还有另外一个题解使用的分治法,比较复杂。原创 2020-07-21 10:23:16 · 143 阅读 · 0 评论 -
leetcode-判断子序列-Java
题目描述:给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。示例 1:s = “abc”, t = “ahbgdc”返回 true.示例 2:s = “axc”, t =原创 2020-07-17 15:47:30 · 197 阅读 · 0 评论 -
leetcode-买卖股票的最大收益II-Java
题目描述:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3原创 2020-07-17 14:48:20 · 1018 阅读 · 0 评论 -
leetcode-用最少数量的箭引爆气球-Java
题目描述:在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了。开始坐标总是小于结束坐标。平面内最多存在104个气球。一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得原创 2020-07-16 11:55:19 · 156 阅读 · 0 评论 -
leetcode-无重叠区间-Java
题目描述:给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: [ [1,2], [1,2], [1,2] ]输出: 2解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。示例 3:原创 2020-07-16 11:28:59 · 551 阅读 · 0 评论 -
leetcode-分发饼干-Java
题目描述:假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:你可以假设胃口值为正。一个小朋友最多只能拥有一块饼干。示例 1:输入: [1,2,3], [1,1]输出: 1解释:你原创 2020-07-16 09:40:41 · 451 阅读 · 0 评论 -
leetcode-根据字符出现频率排序-Java
题目描述:给定一个字符串,请将字符串里的字符按照出现的频率降序排列。示例 1:输入:“tree”输出:“eert”解释:'e’出现两次,'r’和’t’都只出现一次。因此’e’必须出现在’r’和’t’之前。此外,"eetr"也是一个有效的答案。示例 2:输入:“cccaaa”输出:“cccaaa”解释:'c’和’a’都出现三次。此外,"aaaccc"也是有效的答案。注意"cacaca"是不正确的,因为相同的字母必须放在一起。示例 3:输入:“Aabb”输出:原创 2020-07-15 21:13:56 · 408 阅读 · 0 评论 -
leetcode-前k个高频元素-java
题目描述:给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]思想:使用桶排序,先将数组中的元素遍历到map中,key为元素,value为元素出现的次数。再声明一个bucket,将元素存在出现频率作为下标的位置,从后向前遍历bucket,直到结果集中的元素个数达到k。class Solution { //这个题之前是返回一原创 2020-07-15 20:46:12 · 245 阅读 · 1 评论 -
leetcode-不同的二叉搜索树-java
题目描述 :给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树:思路:参照leetcode解题大致思路是定义两个函数:G(n): 长度为 nn 的序列能构成的不同二叉搜索树的个数。F(i,n): 以 i 为根、序列长度为 n 的不同二叉搜索树个数 (1≤i≤n)。G(n) 为F(i,n)(1≤i≤n)的总和F(i,n)=G(i−1)⋅G(n−i)class Solutio原创 2020-07-15 14:55:20 · 115 阅读 · 0 评论 -
138.复制带随机指针的链表
一、回溯既然有随机指针,那就可能指向前面的节点,形成环。我们可以将带随机指针的链表看成是一张图,遍历这个图。从head开始分random、next两条遍历遍历到一个节点,如果已经遍历过就不再创建新节点,反会当前节点。没有遍历过那就创建节点,并将该节点存入visited字典中node.next = copyRandomList(curNode.next)node.random = copyRandomList(curNode.Random)二、 O(N)空间的迭代先复制一个头结点,并将头原创 2020-06-10 21:32:49 · 90 阅读 · 0 评论