
leetcode
CodeBoy975
你不对自己狠一点,生活将会对你狠一点
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
leetcode32:最长的有效括号
题目描述:给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: “(()”输出: 2解释: 最长有效括号子串为 “()”示例 2:输入: “)()())”输出: 4解释: 最长有效括号子串为 “()()”解题思路:首先定义一个栈,但栈中存储的元素不在是括号,而是存储的是遍历数组中的下标。初始化栈,则先加入-1到栈中,因为考虑到...原创 2020-01-09 14:36:38 · 253 阅读 · 0 评论 -
链表的增删改查
链表的增删改查链表的增删改查可以说是面试题的基础中的基础,博主就在某次面试中遇到过这种题。所以还是记录一下,方便以后自己复习。/** * 描述: 实现一个链表的增删改查 * * @author pengjie_yao * @date 2019/8/2 9:44 */public class LinkList { Node head; public static ...原创 2019-08-04 08:46:33 · 313 阅读 · 0 评论 -
剑指offer:查找链表倒数第k个节点
题目: 输入一个链表和所要求的k,返回该链表的倒数第k个节点解法1(快慢指针)整体思路: 利用快慢指针,让快指针先走k步后,快慢指针再同步一起走,当快指针走到末尾的时候,此时慢指针的位置就是k节点的位置;这里博主画图来解释快慢指针是如何找到倒数第k个节点的;我们假设数组是[1,2,3,4,5,6],且K=3,即我们要找的节点为4;首先让快慢指针都为首节点2. 接下来让快指针先走k步...原创 2019-08-04 08:51:16 · 493 阅读 · 0 评论 -
leetcode: 链表的中间节点
leetcode:876题目:给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.va...原创 2019-08-04 08:52:30 · 743 阅读 · 0 评论 -
leetcode: 合并两个有序的链表
leetcode:21将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4解法1思路:我们主要是通过定义两个节点,通过不断比较两个链表的节点值,然后让合并节点依次走过这些比较的节点值,从而达到有序;接下来图解说...原创 2019-08-04 08:55:03 · 338 阅读 · 0 评论 -
剑指offer: 从尾节点到头节点开始打印链表
题目: 输入一个链表的头节点,从尾到头反过来打印出每个节点的值;解法:使用栈,我们可以把链表遍历,然后加入栈中,利用栈的“先进后出”特性,即头结点加入将放入栈底依次这样,则出栈第一个元素则为尾节点;代码:/** * 描述: 从尾到头打印链表 * * @author pengjie_yao * @date 2019/8/3 16:17 */public class printNo...原创 2019-08-04 08:56:07 · 170 阅读 · 0 评论 -
leetcode: 相交链表
leetcode:160编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表**:**在节点 c1 开始相交。示例 1:输入: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输入解...原创 2019-08-04 08:57:50 · 238 阅读 · 0 评论 -
leetcode: 判断字符串是否有效
题目:给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。解法1:思路: 使用hashmap进行存括号的匹配关系,再使用栈来存储左括号;每次进行比较然后弹栈;步骤:将括号匹配关系放入hashmap中 遍历数...原创 2019-08-04 15:05:42 · 2760 阅读 · 0 评论 -
leetcode: 有效的字符异位词
题目描述:给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母。法一: 排序方式通过将 s 的字母重新排列成 t 来生成变位词...原创 2019-07-22 20:44:57 · 135 阅读 · 0 评论 -
leetcode: 删除字符串中所有相邻的字符串
题目描述:给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:“abbaca”输出:“ca”解释:例如,在 “abbaca” 中,我们可以删除 “bb” 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字...原创 2019-07-27 18:29:47 · 1108 阅读 · 0 评论 -
leetcode: 计算x的幂次函数
题目:实现 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递归解法这里采用的思想是分治思想,比如y = xxxxx…x,则如...原创 2019-07-27 18:32:23 · 809 阅读 · 0 评论 -
leetcode: 求众数
5.31 求众数给定一个大小为 *n *的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2法一(Map)首先, 题目,我们明白了,目的就是找出数组中每个数字出现的次数,并且大于n/2。解题步骤:...原创 2019-07-28 19:15:39 · 335 阅读 · 0 评论 -
leetcode122: 买卖股票的最佳时机
题目:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候...原创 2019-08-02 09:40:57 · 122 阅读 · 0 评论 -
leetcode: 每 k 个节点一组翻转链表
每 k 个节点一组翻转链表题目25:给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例 :给定这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时...原创 2019-08-06 22:26:41 · 2339 阅读 · 1 评论 -
leetcode: 最接近的三数之和
leetocode16题目:给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).解题...原创 2019-08-28 10:35:17 · 168 阅读 · 0 评论 -
leetcode: 二叉搜索树的最近公共祖先
这里的思路其实跟二叉树找最近公共祖先一样,唯一不同是二叉搜索树是已经有序的了。也就是左子树一定会小于树节点,右子树一定会小于树节点,所以我们可以直接判断p、q的位置,减少遍历。递归方式代码:public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { // 1. root节...原创 2019-07-25 21:46:42 · 216 阅读 · 0 评论 -
leetcode: 二叉树的最近公共祖先
题目:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root ...原创 2019-07-25 21:45:07 · 173 阅读 · 0 评论 -
leetcode: 验证二叉搜索树
题目:给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 ...原创 2019-07-25 17:26:30 · 190 阅读 · 0 评论 -
Leetcode: 求出两个整数的最大公约数
该算法用到了几个定理,如下:辗转相除法辗转相除法又名欧几里得算法(Euclidean algorithm),目的是求出两个正整数的最大公约数。它是已知最古老的算法, 其可追溯至公元前300年前。这条算法基于一个定理:两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。比如10和25,25除以10商2余5,那么10和25的最大公约数,等同于1...原创 2019-07-13 20:19:50 · 2297 阅读 · 0 评论 -
Leetcode: 如何判断一个数是否为2的整数次幂
该题其实说白了,做过以后,遇到基本就懂的了。题海战术观察规律:/** * 描述: 如何判断一个数是否是2的整数次幂 * * @author pengjie_yao * @date 2019/7/13 12:09 */public class IntegerPower { public static void main(String[] args) { ...原创 2019-07-13 20:22:14 · 492 阅读 · 0 评论 -
Leetcode: 大整数相加
解题思路:1 首先我们能想到,如果两个整数超过long范围呢,那么该如何计算呢,这里我们可以把整数转为数组来进行计算。2 比如我们计算 345+567 这两个数的时候,按我们基本的数学计算不就如下:那么我们转为数组的话,数组A={3, 4, 5} ,B={4, 5,6},则我们应该得出的结果为C={8, 0, 1}很明显,我们如果直接A和B数组对应的位置值相加是无法得到数组C的...原创 2019-07-15 21:49:12 · 666 阅读 · 0 评论 -
Leetcode: 寻找数据流中的第K大元素
题目:设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中的初始元素。每次调用 KthLargest.add,返回当前数据流中第K大的元素。示例:int k = 3;int[] arr = [4,5,8,2];KthLar...原创 2019-07-18 22:07:56 · 433 阅读 · 0 评论 -
Leetcode: 链表的反转I
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?整体目录:1 基本实现2 迭代实现3 递归实现基本实现解题步骤: 设置三个节点pre、cur、next(1)每次查...原创 2019-07-16 20:08:08 · 143 阅读 · 0 评论 -
Leetcode24: 两两交换链表中的节点
题目:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。注意: 对于递归,不要去想层级调用逻辑,我们应该专注于将过程抽象化,因为递归就是不断去做重复的事情,我们更多专注于递归的三个条件:返回值调用单元做了什么终止条件我们将问题抽象化:第一个节点跟第二个节点进行交换,然后下一次,则依然是第三个节点跟第四...原创 2019-07-16 20:17:08 · 145 阅读 · 0 评论 -
leetcode: 三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]法一: 左右指针方式(时间空间比较好的...原创 2019-07-23 22:51:45 · 216 阅读 · 0 评论 -
Leetcode: 不含重复字符串的最长子串长度
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 :输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。流程:1 移动窗口方式的解法(set集合方式)2 移动窗口的优化解法(hashMap方式)动图(移动窗口方式的解法)借用五分钟学漫画动图移动窗口方式的解法(HashSet)...原创 2019-07-17 15:51:32 · 1516 阅读 · 0 评论 -
Leetcode: 两数相加(链表方式)
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -...原创 2019-07-17 15:55:48 · 193 阅读 · 0 评论 -
Leetcode: 判断有环链表的环长度(2)
思路: 当两个指针相遇,证明链表有环的时候,让两个指针从相遇点继续循环前进,并统计前进的循环次数,直到两个指针第2次相遇,此时,统计出来的前进次数就是环数。思考一下:假设两指针分为为p1,p2,则指针p2每次比p1多走一步,两者的速度差为1步,当两个指针再次相遇,p2比p1多走了1圈,因此 环长 = 每一次速度差 X 前进次数 = 前进次数一下代码有两种,分别是本人自己解法和网上的解...原创 2019-07-17 16:14:16 · 2106 阅读 · 0 评论 -
Leetcode: 判断链表是否有环(1)
题目:给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。如果pos是-1,则在该链表中没有环。示例1:输入:head = [3,2,0,-4], pos = 1输出:true动图来源五分钟学算法公众号解释:链表中有一个环,其尾部连接到第二个节点。解题思路: 利用快慢指针来解决。...原创 2019-07-17 16:05:54 · 270 阅读 · 0 评论 -
leetcode: 判断有环链表的入环点(3)
这题稍有有点需要计算公式来辅助才可以。假设从起点到入环点的距离为D,入环点到相遇点的距离为S1,相遇点再回到入环点的距离为S2,如图所示我们来算一下首次相遇,各自走了多少步?我们假设指针p1每次只走1步,p2每次走2步p1所走的距离为: D+S1p2所走的距离为: D+S1+S2+S1 = D+2S1+S2又因为p2是p1的两倍,则有2(D+S1) = D+2S1+S...原创 2019-07-17 16:26:19 · 401 阅读 · 0 评论 -
leetcode: 寻找全排列的下一个数
给定一个正整数,实现一个方法来求出离该整数最近的大于自身的“换位数”。什么是换位数呢?就是把一个整数各个数位的数字进行全排列,从而得到新的整数。例如53241和23541。题目要求写一个方法来寻找最近的且大于自身的换位数。比如下面这样:输入12345,返回12354输入12354,返回12435输入12435,返回12453思路:比如给定整数12354,如何找到离它最...原创 2019-07-17 16:29:59 · 1467 阅读 · 0 评论 -
leetcode:滑动窗口的最大值
5.23 滑动窗口的最大值题目描述:给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口 k 内的数字。滑动窗口每次只向右移动一位。返回滑动窗口最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3**输出: **[3,3,5,5,6,7]解释:滑动窗口的位置 最大...原创 2019-07-20 11:30:48 · 563 阅读 · 0 评论 -
LeetCode:无序数组排序后的最大相邻差
最近看了《漫画算法》这本书,小灰大神这本书写的不是一般好。受益匪浅,讲总结的知识点归纳出来。有一个无序整型数组,如何求出该数组排序后的任意两个相邻元素的最大差值?要求时间复杂度和空间复杂度尽可能低。(例如:无序数组 2,3,1,4,6,排序后是1,2,3,4,6,最大差值是6-4=2)解法一: 先使用时间复杂度为O(nlogn)的排序算法给原来数组排序,然后遍历数组,对每两个相邻元素求...原创 2019-07-13 20:11:33 · 2478 阅读 · 1 评论