
LeetCode算法刷题
LeetCode剑指offer,20校招,我要和科班出身的你们硬碰硬
Code进阶狼人
Stay hungry and modest
展开
-
leetcode0053最大子序和
题目描述方法一:分治法这个是使用分治法解决问题的典型的例子,并且可以用与合并排序相似的算法求解。下面是用分治法解决问题的模板:定义基本情况。将问题分解为子问题并递归地解决它们。合并子问题的解以获得原始问题的解。class Solution { public int crossSum(int[] nums, int left, int right, int p) { ...原创 2020-01-06 16:27:51 · 301 阅读 · 0 评论 -
LeetCode0040组合总和 II
上篇博文我们解决了组合总和的问题LeetCode0039组合总和现在我们来看第40题题目描述这道题与上一问的区别在于:第 39 题:candidates 中的数字可以无限制重复被选取。第 40 题:candidates 中的每个数字在每个组合中只能使用一次。编码的不同就在于,下一层递归的起始索引不一样。第 39 题:还从候选数组的当前索引值开始。第 40 题:从候选数组的...原创 2020-01-02 16:56:56 · 273 阅读 · 0 评论 -
LeetCode0039组合总和
题目描述java代码class Solution { public List<List<Integer>> combinationSum(int[] candidates, int target) { List<List<Integer>> res=new ArrayList<>(); Ar...原创 2020-01-02 16:13:03 · 282 阅读 · 0 评论 -
LeetCode0038外观数列
题目描述这题真的是有些奇葩,或者是我奇葩,根本没看懂,看了好几个评论才看懂~12 描述的是1,是一个1,也就是113 描述的是11,是两个1,也就是214 描述的是21,是一个2一个1,也就是12-115 描述的是1211, 是一个1,一个2,两个1,也就是11-12-216 描述的是111221,是三个1,两个2,一个1,也就是31-22-117 描述的是312211,是一个...原创 2020-01-02 14:48:53 · 826 阅读 · 4 评论 -
LeetCode0037解数独
上篇博文我们认识了什么是有效的数独LeetCode0036有效的数独今天我们来解数独题目描述回溯法使用的概念了解两个编程概念会对接下来的分析有帮助。第一个叫做 约束编程。基本的意思是在放置每个数字时都设置约束。在数独上放置一个数字后立即 排除当前 行, 列和子方块 对该数字的使用。这会传播约束条件并有利于减少需要考虑组合的个数。第二个叫做 回溯。让我们想象一下...原创 2020-01-02 14:19:12 · 300 阅读 · 2 评论 -
LeetCode0036有效的数独
题目描述实例2说明:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。给定数独序列只包含数字 1-9 和字符 ‘.’ 。给定数独永远是 9x9 形式的。java代码class Solution { public boolean isValidSudoku(char[][] board) { boole...原创 2020-01-02 13:43:36 · 274 阅读 · 0 评论 -
LeetCode0035搜索插入位置
题目描述java代码class Solution { public int searchInsert(int[] nums, int target) { for(int i=0;i<nums.length;i++){ if(nums[i]>=target){ return i; ...原创 2020-01-02 12:00:55 · 273 阅读 · 0 评论 -
LeetCode0034在排序数组中查找元素的第一个和最后一个位置
题目描述方法 1:线性扫描想法对 target 检查每一个下标,一定能得到正确答案。算法首先,我们对 nums 数组从左到右做线性遍历,当遇到 target 时中止。如没有中止过,那么 target不存在,我们可以返回“错误代码” [-1, -1]。如果我们找到了有效的左端点坐标,我们可以坐第二遍线性扫描,但这次从右往左进行。这一次,第一个遇到的 target将是最右边的一个(因为...原创 2020-01-02 11:28:59 · 327 阅读 · 0 评论 -
LeetCode0033搜索旋转排序数组
题目描述方法:二分查找题目要找到一种 O(logN)时间内的搜索方法,这提示我们可以用二分查找的方法。算法非常直接:找到旋转的下标 rotation_index ,也就是数组中最小的元素。二分查找在这里可以派上用场。在选中的数组区域中再次使用二分查找。class Solution { int [] nums; int target; public int find_r...原创 2020-01-02 10:48:06 · 238 阅读 · 2 评论 -
LeetCode0032最长有效括号
题目描述方法 1:暴力算法在这种方法中,我们考虑给定字符串中每种可能的非空偶数长度子字符串,检查它是否是一个有效括号字符串序列。为了检查有效性,我们使用栈的方法。每当我们遇到一个‘(’ ,我们把它放在栈顶。对于遇到的每个 ‘)’ ,我们从栈中弹出一个‘(’ ,如果栈顶没有 ‘(’,或者遍历完整个子字符串后栈中仍然有元素,那么该子字符串是无效的。这种方法中,我们对每个偶数长度的子字符串...原创 2019-12-30 17:03:02 · 348 阅读 · 0 评论 -
LeetCode0031下一个排列(java解法)
题目描述概要我们需要找到给定数字列表的下一个字典排列,而不是由给定数组形成的数字。解决方案方法一:暴力法算法在这种方法中,我们找出由给定数组的元素形成的列表的每个可能的排列,并找出比给定的排列更大的排列。但是这个方法是一种非常天真的方法,因为它要求我们找出所有可能的排列这需要很长时间,实施起来也很复杂。因此,这种方法根本无法通过。 所以,我们直接采用正确的方法。复杂度分析...原创 2019-12-30 16:39:27 · 383 阅读 · 0 评论 -
LeetCode0030串联所有单词的子串(Java解法)
题目描述class Solution { public List<Integer> findSubstring(String s, String[] words) { List<Integer> res = new ArrayList<>(); if (s == null || s.length() == 0 || ...原创 2019-12-30 11:51:06 · 432 阅读 · 0 评论 -
LeetCode0029两数相除Java解法
题目描述 * 解题思路:这题是除法,所以先普及下除法术语 * 商,公式是:(被除数-余数)÷除数=商,记作:被除数÷除数=商...余数,是一种数学术语。 * 在一个除法算式里,被除数、余数、除数和商的关系为:(被除数-余数)÷除数=商,记作:被除数÷除数=商...余数, * 进而推导得出:商×除数+余数=被除数。 * * 要求商,我们首先想到的是减法,能被减多少次,那么商就为多少,...原创 2019-12-30 11:20:31 · 323 阅读 · 2 评论 -
LeetCode0027移除元素C++解法
题目描述本题难度等级为简单,直接进入题解吧题解class Solution {public: int removeElement(vector<int>& nums, int val) { int sum=0; for(int i=0;i<nums.size();i++){ if(nums[i]=...原创 2019-12-16 22:50:11 · 375 阅读 · 0 评论 -
LeetCode0026 删除排序数组中的重复项C++解法
题目描述此题难度为简单,下面直接贴出C++解法解法class Solution {public: int removeDuplicates(vector<int>& nums) { if(nums.size()<2) return nums.size(); int j=0; for(int i=1;i&l...原创 2019-12-16 22:35:12 · 396 阅读 · 0 评论 -
LeetCode0025K 个一组翻转链表C++解法
题目描述此题难度等级为困难题解/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {publi...原创 2019-12-16 21:01:08 · 385 阅读 · 0 评论 -
LeetCode0024两两交换链表中的节点C++解法
题目描述思路在链表最前面设置一个pre指针,利用pre, cur, post三个指针即可完成,上述的任务,不难,分析好链表关系即可题解/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : v...原创 2019-12-16 20:35:00 · 402 阅读 · 0 评论 -
LeetCode0023合并K个排序链表C++解法
题目描述此题难度等级为困难故代码量较大,下面给出题解C++题解/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class...原创 2019-12-16 20:16:48 · 381 阅读 · 0 评论 -
LeetCode0022括号生成C++解法
题目描述解法1[c++] 深搜class Solution {public: vector<string> generateParenthesis(int n) { vector<string> res; dfs("", 0, n, &res); return res; } v...原创 2019-12-16 15:09:49 · 489 阅读 · 0 评论 -
LeetCode0021合并两个有序链表C++解法
题目描述本题难度程度为简单,因此我们直接上解法C++解法/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Sol...原创 2019-12-16 14:07:45 · 335 阅读 · 0 评论 -
LeetCode0020有效的括号C++解法
题目描述这道题的难度等级为简单,所以不能话不多说,直接上解法解法1class Solution {public: bool isValid(string s) { stack<char> stack1; for(char c:s){ if(stack1.empty()){ sta...原创 2019-12-16 13:41:55 · 286 阅读 · 0 评论 -
LeetCode0019删除链表的倒数第N个节点C++解法
题目描述思路快慢指针,快指针先走n步,然后快慢一起走,直到快指针走到最后,要注意的是可能是要删除第一个节点,这个时候可以直接返回head -> next题解/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListN...原创 2019-12-16 13:03:29 · 250 阅读 · 0 评论 -
Leetcode0006Z 字形变换C++解法
题目描述思路解析看到这道题其实一开始我是一脸懵的后面才慢慢清楚思路没有用数组以及其他工具,依次找到第一行、第2行…第n行所取S中的字符,存入ans中,返回ans即可。找到下标分布的规律:第一行和最后一行取出字符串S的下标间隔为(numRows*2-2),因为中间有(numRows-1)行,而每行中有2个数字;中间的每一行间隔有下三角部分和上三角部分,间隔分别为(n...原创 2019-12-10 16:00:19 · 544 阅读 · 0 评论 -
leetcode0008字符串转换整数 (atoi)
前期回顾今天又刷了一波leetcode配合博客与GitHub记录自己的解题之路具体代码可以在GitHub中git clone下来自己提交GitHub地址(持续更新,欢迎star)前面的刷题详见博客LeetCode0001.两数之和LeetCode0002两数相加LeetCode0003无重复字符的最长子串leetcode0004寻找两个有序数组的中位数LeetCode0005...原创 2019-11-25 17:55:53 · 376 阅读 · 0 评论 -
LeetCode0007整数反转
题目描述python3解法class Solution: def reverse(self, x): """ :type x: int :rtype: int """ if x==0: return 0 str_x = str(x) x = '' ...原创 2019-11-25 17:09:09 · 304 阅读 · 0 评论 -
leetcode0006Z 字形变换
题目描述C++解法class Solution {public: string convert(string s, int numRows) { vector<string> temp(numRows); string res; if(s.empty()||numRows<1) return res; ...原创 2019-11-25 16:07:05 · 276 阅读 · 0 评论 -
LeetCode0005最长回文子串
题目描述C++解法动态规划,T(n) = O(n^2),S(n) = O(n)class Solution {public: string longestPalindrome(string str) { const int n=str.size(); if(n<2) return str; int s=0,e=0; i...原创 2019-11-25 15:23:04 · 310 阅读 · 0 评论 -
leetcode0004寻找两个有序数组的中位数
题目描述python解法class Solution: def get_kth(self, nums1, nums2, k): # print(nums1, nums2, 'k=', k) m, n = len(nums1), len(nums2) if m == 0: return nums2[k-1] if n ==...原创 2019-11-25 14:36:35 · 303 阅读 · 0 评论 -
LeetCode0003无重复字符的最长子串
题目描述C++解法class Solution {public: int lengthOfLongestSubstring(string s) { int size,i=0,j,k,max=0; size=s.size(); for(j=0;j<size;j++){ for(k=i;k<j;k++)...原创 2019-11-25 13:33:24 · 268 阅读 · 0 评论 -
LeetCode0002两数相加
题目描述python3解法class Solution: def addTwoNumbers(self, l1, l2): re = ListNode(0) r=re carry=0 while(l1 or l2): x= l1.val if l1 else 0 y= l2...原创 2019-11-25 12:11:35 · 274 阅读 · 0 评论 -
LeetCode0001. 两数之和
从今天开始记录自己的LeetCode解题之路同时也会在GitHub上同步更新题目描述给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0]...原创 2019-11-19 16:15:19 · 292 阅读 · 0 评论