leetcode
java小白沣
研究生就读,非科班记录从0开始学java
展开
-
Leetcode108 将有序数组转换为二叉搜索树(简单篇)
题目如下:给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。示例 1:输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]自己的思路:这个升序数组其实就是二叉树的中序遍历得来的结果,但是反推的话好像不太会,应该有很多种可能。大神思路:这里其实就是用了二分法,选取中间的数作为根节点。这样两边就能高度平衡了。原创 2021-05-24 12:09:25 · 133 阅读 · 0 评论 -
Leetcode94 二叉树的中序遍历(简单篇)
题目如下:给定一个二叉树的根节点 root ,返回它的 中序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,3,2]自己的思路:二叉树的遍历是很常用的,一般有先序遍历、中序遍历和后序遍历。这里考察的就是中序遍历,前中后三个其实代表的是根节点的顺序位置,中序遍历就是根节点在中间,先遍历左子树,再是根节点,最后才是右子树。一般有递归和非递归的方法。大神思路:/** * Definition for a binary tree node. * public cl原创 2021-05-23 16:48:37 · 195 阅读 · 0 评论 -
Leetcode104二叉树的最大深度
题目如下:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。自己的思路:终于自己写出了一道题,这道题确实很简单,使用一个简单的递归就可以了,利用深度优先搜索或者广度搜索都可以,深度优先就用递归不需要借助其他的栈什么的了,就比较简洁。class Solution { public int maxDepth(TreeNode root) { if(root == null){ return 0; }原创 2021-04-29 15:04:21 · 62 阅读 · 0 评论 -
Leetcode100 相同的树(简单篇)
题目如下:给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入:p = [1,2,3], q = [1,2,3]输出:true自己的思路:想的是用递归遍历两棵树,一直比较下去,遇到不等的就返回false,这里我是前序遍历,结果时间超出限制了。。。class Solution { public boolean isSameTree(TreeNode p, TreeNode q)原创 2021-04-27 20:31:02 · 102 阅读 · 0 评论 -
Leetcode88 合并两个有序数组
题目如下:给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。示例 1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]自己的思路:看到这道题想到可以用双指原创 2021-04-26 16:57:00 · 63 阅读 · 0 评论 -
Leetcod225 用队列实现栈(简单篇)
题目如下:请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。注意:你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、s原创 2021-04-21 19:35:13 · 109 阅读 · 0 评论 -
Leetcode83 删除排序链表中的重复元素(简单篇)
题目如下:存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。示例 1:输入:head = [1,1,2]输出:[1,2]自己的思路:对于一个链表,从头节点开始遍历,如果它的next的val值等于本身的val,说明需要去掉,那么直接让head.next = head.next.next,直到遍历到next为空停止。大神思路:这个确实是这样的思路。/** * Definition for singl原创 2021-04-21 15:52:40 · 106 阅读 · 0 评论 -
Leetcode70 爬楼梯(简单篇)
题目如下:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 . 1 阶 + 1 阶2 . 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 . 1 阶 + 1 阶 + 1 阶2 . 1 阶 + 2 阶3 . 2 阶 + 1 阶自己的思路:每一次的下一步选择不是1就是2,感觉像递原创 2021-04-19 23:44:59 · 72 阅读 · 0 评论 -
Leetcode69 x的平方根(简单篇)
题目如下:实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。自己的思路:这道题确实很简单,就用sqrt函数求个根号,然后强转类型为int就可以舍去小数部分了,这是我的代码:class Solution { public int原创 2021-04-19 20:53:00 · 168 阅读 · 0 评论 -
Leetcode66 加一(简单篇)
题目如下:给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入:digits = [1,2,3]输出:[1,2,4]示例 2:输入:digits = [4,3,2,1]输出:[4,3,2,2]自己的思路:如果要加一,那么首先考虑的是末尾数字的情况,如果最后一个数不是9,那么只要把数组最后一个数字加上1在返回就可以了,如果最后一个是9,就原创 2021-04-14 13:42:02 · 98 阅读 · 0 评论 -
Leetcode58 最后一个单词的长度(简单篇)
题目如下:给你一个字符串 s,由若干单词组成,单词之间用空格隔开。返回字符串中最后一个单词的长度。如果不存在最后一个单词,请返回 0 。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。示例 1:输入:s = “Hello World”输出:5示例 2:输入:s = " "输出:0自己的思路:这个题思路比较简单,就简单的遍历,遇到空格就停下计数,保存成max,最后保留最大的max,但是我这里如果只有一个单词的时候,我不太对,不知道该在哪里改一下class Solutio原创 2021-04-13 21:16:09 · 67 阅读 · 0 评论 -
Leetcode53 最大子序和(简单篇)
题目如下:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1自己的思路:自己是想的用循环嵌套,慢慢遍历,先从数组第一个开始遍历,后面的依次加起来,保留局部最大值,然后从第二个数开始遍历,保留局部最大值,与前面那个比较,保留大的,这样就最后保存到原创 2021-04-13 10:09:10 · 89 阅读 · 0 评论 -
Leetcode38 外观数列
题目如下:给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = “1”countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:111211211111221第一项是数字 1描述前一项,这个数是 1 即 “ 一 个 1 ”,记作 “11原创 2021-04-13 09:08:09 · 83 阅读 · 0 评论 -
Leetcode35 搜索插入位置(简单篇)
题目如下:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1: 输入: [1,3,5,6], 5 输出: 2示例 2: 输入: [1,3,5,6], 2 输出: 1自己的思路:这很明显是一个数组搜索查找的问题,找到匹配值就返回索引这个比较简单,但是还加了一个限制条件,需要如果没找到的时候返回插入的地方的索引.大神思路:class Solution { public int se原创 2021-04-12 09:15:47 · 86 阅读 · 0 评论 -
Leetcode28 实现srtStr(简单篇)
题目如下:给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 :输入: haystack = “hello”, needle = “ll” 输出: 2自己的思路:如果直接用字符串函数可以直接匹配字符串。如果用遍历来做,需要两个遍历来做大神思路:其实这是一个字符串匹配问题,可以用KMP算法这里列出的是官网的暴力匹配 public int strStr(S原创 2021-04-09 18:01:27 · 106 阅读 · 0 评论 -
Leetcode27 移除元素(简单篇)
题目如下:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。自己的思路:输入一个数组和数值,输出一个改变后的数组和新的数组长度,首先肯定是遍历这个数组,当发现有和val相等的值时,就记录下新的长度,让长度减一,并且同时从这个数字开始让数组每一个nums[i] = nums[i+1],思路应该是这原创 2021-04-08 22:29:55 · 63 阅读 · 0 评论 -
Leetcode21 合并两个有序链表(简单篇)
题目如下:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = [] 输出:[]示例 3:输入:l1 = [], l2 = [0] 输出:[0]自己的思路:首先肯定得判断两个链表是否为空,如果两个都为空的话就直接返回空链表,如果只有一个为空,就返回那个不为空的链表,如果两个都不是空就需要比较原创 2021-04-08 09:41:56 · 64 阅读 · 0 评论 -
Leetcode 26 删除有序数组中的重复项(简单篇)
题目如下:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。自己的思路:首先题目条件是有序数组,那么肯定的是如果遍历的时候遇到不一样的就可以返回了,遇到一样的话就得继续往下走,直到遇到不一样的,然后把中间这些一样的数只保留一个下来,然后继续往后遍历,因为这里限制了只能用O(1)的额外空间,应该也就是用一个变量来临时存放吧,中间这一步虽然有一点思原创 2021-04-05 16:32:24 · 233 阅读 · 0 评论 -
Leetcode 14 最长公共前缀(简单篇)
题目如下:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。自己的思路:每次都是直接想到暴力求解,先遍历给定的字符串数组里面的每个字符串,然后依次对每一个字符比较是否相同,感觉这样的话时间复杂度就会非常的高,第二个思路就是把字符串放进栈里面,判断栈的内容是否相当,直到不同的时候截止。大神思路:这里看到一个比较巧妙的方法,利用了字符串对象的函数,直接简单解出了这道题,果然还是对这些函数不熟悉,需要补一补。public static String longest原创 2021-04-02 10:26:52 · 88 阅读 · 0 评论 -
Leetcode 13 罗马数字的反转(简单篇)
今天的是罗马数字的反转,题目如下:**罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即原创 2021-04-01 11:04:20 · 147 阅读 · 0 评论