算法题leetcode
掌握大致的算法思想
Mr.Q
纸上得来终觉浅,绝知此事要躬行。 ---陆游
展开
-
leetcode 82 删除排序链表中的重复元素 II (c++和python)
逐行详解原创 2022-01-13 14:23:02 · 362 阅读 · 0 评论 -
leetcode 25 K 个一组翻转链表 (c++和python)
题目:给你一个链表,每k个节点一组进行翻转,请你返回翻转后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。进阶:你可以设计一个只使用常数额外空间的算法来解决此问题吗?你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-nodes-in-k-group著作权归领扣网络所有。商业转...原创 2021-12-08 17:08:53 · 118 阅读 · 0 评论 -
leetcode 23 合并K个升序链表(c++和python)
题目:给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例 2:输入:list...原创 2021-12-06 12:22:36 · 178 阅读 · 0 评论 -
leetcode 12 整数转罗马数字 (c++和python)
题目:罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,即为X+II。 27 写做XXVII, 即为XX+V+II...原创 2021-11-18 10:38:19 · 944 阅读 · 0 评论 -
leetcode 环路检测-快慢指针(c++和python)
1 题目描述给定一个链表,如果有环路,找出环路的开始点。2 输出示例示例 1:输入:head = [3,2,0,-4], pos = 1输出:返回索引为 1 的链表节点解释:链表中有一个环,其尾部连接到第二个节点。# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.nex原创 2021-01-07 15:17:30 · 299 阅读 · 0 评论 -
leetcode 88 合并两个有序数组 (c++和python)
1 题目描述给定两个有序数组,把两个数组合并为一个。2 输出样例输入是两个数组和它们分别的长度 m 和 n。其中第一个数组的长度被延长至 m + n,多出的n 位被 0 填补。题目要求把第二个数组归并到第一个数组上,不需要开辟额外空间。Input: nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3Output: nums1 = [1,2,2,3,5,6]def merge(self, nums1, m, nums2, n):原创 2021-01-06 09:50:00 · 233 阅读 · 1 评论 -
双指针-有序数组求和问题 (python)
1 题目描述在一个增序的整数数组里找到两个数,使它们的和为给定值。已知有且只有一对解。2 输入输出样例输入是一个数组(numbers)和一个给定值(target)。输出是两个数的位置,从 1 开始计数。Input: numbers = [2,7,11,15], target = 9Output: [1,2]def twoSum(self, numbers, target): """ 双指针,两个指针分别找这两个数,左指针从最小数开始,即数组最左边,右指原创 2021-01-05 08:54:36 · 446 阅读 · 0 评论 -
leetcode 605 种花问题 (c++和python)
假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给你一个整数数组flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数n ,能否在不打破种植规则的情况下种入n朵花?能则返回 true ,不能则返回 false。示例 1:输入:flowerbed = [1,0,0,0,1], n = 1输出:truedef canPlaceFlowers(self, f...原创 2021-01-04 15:36:25 · 714 阅读 · 0 评论 -
leetcode 435 无重叠区间 (c++和python)贪心算法
1 贪心算法:保证每次局部操作是最优解,从而是最终得到的结果是全局最优解。2 题目描述给定多个区间,计算让这些区间互不重叠所需要移除区间的最少个数。起止相连不算重叠。输入是一个数组,数组由多个长度固定为 2 的数组组成,表示区间的开始和结尾。输出一个整数,表示需要移除的区间数量。Input: [[1,2], [2,4], [1,3]]Output: 1def eraseOverlapIntervals(self, intervals): """原创 2021-01-04 08:39:53 · 490 阅读 · 0 评论 -
leetcode 135 分发糖果(c++和python)贪心算法
1 贪心算法:保证每次局部操作是最优解,从而是最终得到的结果是全局最优解。2 题目描述一群孩子站成一排,每一个孩子有自己的评分。现在需要给这些孩子发糖果,规则是如果一个孩子的评分比自己身旁的一个孩子要高,那么这个孩子就必须得到比身旁孩子更多的糖果;所有孩子至少要有一个糖果。求解最少需要多少个糖果。输入是一个数组,表示孩子的评分。输出是最少糖果的数量。Input: [1,0,2]Output: 5在这个样例中,最少的糖果分法是 [2,1,2]class Solution(o原创 2021-01-03 11:29:46 · 1452 阅读 · 3 评论 -
leetcode 455 分发饼干(c++和python) 贪心算法
1 贪心算法:保证每次局部操作是最优解,从而是最终得到的结果是全局最优解。2 题目描述有一群孩子和一堆饼干,每个孩子有一个饥饿度,每个饼干都有一个大小。每个孩子只能吃一个饼干,且只有饼干的大小不小于孩子的饥饿度时,这个孩子才能吃饱。求解最多有多少孩子可以吃饱。class Solution(object): def findContentChildren(self, g, s): """ 给剩余孩子里面最小饥饿度的孩子分配最小的能饱腹的饼干。原创 2021-01-01 21:37:56 · 2442 阅读 · 0 评论 -
leetcode 118 杨辉三角 (c++和python)
题目描述:给定一个非负整数numRows,生成杨辉三角的前numRows行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 5输出:[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]解题思路:观察发现。二维数组的值可分为两种情况:边界值为1,中间值 由左上加上右上。二...原创 2018-12-05 16:52:09 · 875 阅读 · 0 评论 -
leetcode 31 下一个排列(c++和python)
一,题目描述:实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3→1,3,23,2,1→1,2,31,1,5→1,5,1二,解题思路:参考思路:网上看来一...原创 2018-12-12 15:49:41 · 232 阅读 · 1 评论 -
leetcode 104 二叉树的最大深度(c++和python)
题目描述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度3 。C++代码:/** * Definition fo...原创 2018-11-28 11:15:28 · 162 阅读 · 0 评论 -
leetcode 101 对称二叉树(c++和python)
题目描述:给定一个二叉树,检查它是否是镜像对称的。例如,二叉树[1,2,2,3,4,4,3]是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个[1,2,2,null,3,null,3]则不是镜像对称的: 1 / \ 2 2 \ \ 3 3解题思路:递归法。判断当前...原创 2018-11-28 10:30:18 · 467 阅读 · 0 评论 -
leetcode 100 相同的树 (c++和python)
题目描述:给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: ...原创 2018-11-27 16:05:36 · 172 阅读 · 0 评论 -
leetcode 88 合并两个有序数组 (c++和python)
题目描述:给定两个有序整数数组nums1和nums2,将nums2合并到nums1中,使得num1成为一个有序数组。说明:初始化nums1和nums2的元素数量分别为m和n。 你可以假设nums1有足够的空间(空间大小大于或等于m + n)来保存nums2中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3...原创 2018-11-27 15:24:21 · 240 阅读 · 0 评论 -
leetcode 83 删除排序链表中的重复元素 (c++和python)
题目描述:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例1:输入: 1->1->2输出: 1->2示例2:输入: 1->1->2->3->3输出: 1->2->3C++代码:/** * Definition for singly-linked list. * struct Li...原创 2018-11-27 10:39:25 · 170 阅读 · 0 评论 -
leetcode 36 有效的数独 (c++和python)
一,题目描述:判断一个9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字1-9在每一行只能出现一次。 数字1-9在每一列只能出现一次。 数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用'.'表示。示例1:输入:[ ["5","3",...原创 2018-12-15 17:48:58 · 403 阅读 · 0 评论 -
leetcode 110 平衡二叉树 (c++和python)
题目描述:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树[3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回true。示例 2:给定二叉树[1,2,2,3,3,nu...原创 2018-11-30 11:13:19 · 300 阅读 · 0 评论 -
leetcode 119 杨辉三角 II (c++和python)
题目描述:给定一个非负索引k,其中k≤33,返回杨辉三角的第k行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 3输出: [1,3,3,1]解题思路:观察发现。二维数组的值可分为两种情况:边界值为1,中间值 由左上加上右上。题目k的取值范围[0,33], 所以先求出行数为k+1的二维矩阵,即[0, 1, 2, ..., k] ,再返回第k...原创 2018-12-05 17:25:05 · 525 阅读 · 0 评论 -
leetcode 121 买卖股票的zuijia时机 (c++和python)
题目描述:给定一个数组,它的第i个元素是一支给定股票第i天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 =...原创 2018-12-06 10:13:37 · 161 阅读 · 0 评论 -
leetcode 122 买卖股票的zuijia时机 II (c++和python)
题目描述:给定一个数组,它的第i个元素是一支给定股票第i天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时...原创 2018-12-06 11:24:57 · 161 阅读 · 0 评论 -
leetcode 17 电话号码的字母组合 (c++和python)
题目描述:给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].解原创 2018-11-21 11:11:38 · 310 阅读 · 0 评论 -
leetcode 全排列
一,题目描述:给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]二,解题思路: 采用不断交换两个位置的方法获得所有的排列,即以某个点为开始点,依次和后面的做交换,因为没有重复项,所以得到的序列都是不同的...转载 2019-01-15 16:57:31 · 1944 阅读 · 0 评论 -
leetcode 组合总和 II
一,题目描述:给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。 解集不能包含重复的组合。 示例 1:输入: candidates = [10,1,2,7,6,1,5], target ...原创 2018-12-19 13:24:32 · 241 阅读 · 0 评论 -
leetcode 组合总和
一,题目描述:给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。 解集不能包含重复的组合。 示例 1:输入: candidates = [2,3,6,7], target =...原创 2018-12-18 10:54:11 · 587 阅读 · 0 评论 -
leetcode 24 两两交换链表中的节点(c++和python)
题目描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.说明:你的算法只能使用常数的额外空间。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。解题思路:定三个指针:pre指向前面节点, cur指向当前节点, post指向后面节点。指向...原创 2018-12-09 16:57:39 · 301 阅读 · 0 评论 -
leetcode 在排序数组中查找元素的第一个和最后一个位置
一,题目描述:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = [5,...原创 2018-12-14 17:18:42 · 389 阅读 · 0 评论 -
leetcode 22 括号生成 (c++和python)回溯
题目描述:给出n代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出n=3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]解题思路:回溯法。搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。括号生成规律:...原创 2018-12-07 11:18:01 · 259 阅读 · 0 评论 -
leetcode 搜索旋转排序数组
一,题目描述:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,...原创 2018-12-13 11:58:21 · 199 阅读 · 0 评论 -
leetcode 将有序数组转换为二叉搜索树
题目描述:将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / ...原创 2018-11-30 10:14:56 · 287 阅读 · 0 评论 -
leetcode 爬楼梯
题目描述:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1...原创 2018-11-26 19:03:57 · 162 阅读 · 0 评论 -
leetcode 删除排序数组中的重复项
题目描述:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。...原创 2018-11-23 22:03:29 · 162 阅读 · 0 评论 -
leetcode 21 合并两个有序链表 (c++和python)
题目描述:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4解题思路:1) 定两个指针p1和p2,分别指向两个链表;2)p1->val <= p2->val,则将p1值利用尾...原创 2018-11-23 21:16:36 · 161 阅读 · 0 评论 -
leetcode 20 有效的括号 (c++和python)
题目描述:给定一个只包括'(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例2:输入: "()[]{}"输出: true示例3:输入: "(]"输出:...原创 2018-11-23 20:05:51 · 180 阅读 · 0 评论 -
leetcode 18 四数之和 (c++和python)
题目描述:给定一个包含n个整数的数组nums和一个目标值target,判断nums中是否存在四个元素a,b,c和d,使得a+b+c+d的值与target相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要...原创 2018-11-22 10:46:07 · 412 阅读 · 0 评论 -
leetcode 13 罗马数字转整数(c++和python)
题目描述:例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,即为X+II。 27 写做XXVII, 即为XX+V+II。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做IIII,而是IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为IX。这...原创 2018-11-23 16:17:20 · 251 阅读 · 0 评论 -
Leetcode 翻转图像
题目描述:给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果。水平翻转图片就是将图片的每一行都进行翻转,即逆序。例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]。反转图片的意思是图片中的 0 全部被 1 替换, 1 全部被 0 替换。例如,反转 [0, 1, 1] 的结果是 [1, 0, 0]。示例 1:输入: [[1,1,0],[1,0,1...原创 2018-11-19 10:58:10 · 171 阅读 · 1 评论 -
Leetcode 04求两个有序数组的中位数(c++和python)
题目:给定两个大小为 m 和 n 的有序数组nums1和nums2。请找出这两个有序数组的中位数。要求算法的时间复杂度为O(log (m+n)) 。你可以假设nums1和nums2不同时为空。示例 1:nums1 = [1, 3]nums2 = [2]中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]中...原创 2018-11-16 21:39:44 · 322 阅读 · 0 评论