leetcode

LeetCode All in One 题目讲解汇总(持续更新中...)

走远了吗. 提交于 2019-12-26 00:30:24
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and return its area. Example: Input: [ ["1","0","1","0","0"], ["1","0","1","1","1"], ["1","1","1","1","1"], ["1","0","0","1","0"] ] Output: 6 此题是之前那道的 Largest Rectangle in Histogram 的扩展,这道题的二维矩阵每一层向上都可以看做一个直方图,输入矩阵有多少行,就可以形成多少个直方图,对每个直方图都调用 Largest Rectangle in Histogram 中的方法,就可以得到最大的矩形面积。那么这道题唯一要做的就是将每一层都当作直方图的底层,并向上构造整个直方图,由于题目限定了输入矩阵的字符只有 '0' 和 '1' 两种,所以处理起来也相对简单。方法是,对于每一个点,如果是 ‘0’,则赋0,如果是 ‘1’,就赋之前的 height 值加上1。具体参见代码如下: 解法一: class Solution { public: int maximalRectangle(vector<vector<char> >

Arts打卡第10周

好久不见. 提交于 2019-12-25 04:23:06
Algorithm。主要是为了编程训练和学习。 每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard)。 进行编程训练,如果不训练你看再多的算法书,你依然不会做算法题,看完书后,你需要训练。 关于做Leetcode的的优势,你可以看一下我在coolshell上的文章 Leetcode 编程训练 - 酷 壳 - CoolShell。 Review:主要是为了学习英文,如果你的英文不行,你基本上无缘技术高手。 所以,需要你阅读并点评至少一篇英文技术文章, 我最喜欢去的地方是 http://Medium.com(需要梯子) 以及各个公司的技术blog,如Netflix的。 Tip:主要是为了总结和归纳你在是常工作中所遇到的知识点。 学习至少一个技术技巧。你在工作中遇到的问题,踩过的坑,学习的点滴知识。 Share:主要是为了建立你的影响力,能够输出价值观。 分享一篇有观点和思考的技术文章。 Algorithm: 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 注意: 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设

链表

岁酱吖の 提交于 2019-12-24 15:25:39
链表是一种线性数据结构 链表与其他数据结构的比较: 如果你需要经常添加或删除结点,链表可能是一个不错的选择。 如果你需要经常按索引访问元素,数组可能是比链表更好的选择。 实现 单链表的实现 静态单链表的实现 单循环链表的实现 双向循环链表的实现 常用技巧 双指针 两个指针从不同位置出发:一个从始端开始,另一个从末端开始; 两个指针以不同速度移动:一个指针快一些,另一个指针慢一些。 哑结点 在首结点前添加哑结点dummy,可以方便处理头结点。 解决问题1 leetcode 2.两数相加 leetcode 19.删除链表的倒数第N个节点 leetcode 21.合并两个有序链表 leetcode 23.合并K个排序链表 leetcode 61.旋转链表 leetcode 138.复制带随机指针的链表 leetcode 141.环形链表 leetcode 142.环形链表 II leetcode 148.排序链表 leetcode 160.相交链表 leetcode 203.移除链表元素 leetcode 206.反转链表 leetcode 234.回文链表 leetcode 237.删除链表中的节点 leetcode 328.奇偶链表 leetcode 430.扁平化多级双向链表 leetcode 707.设计链表 解决问题2 leetcode 24.两两交换链表中的节点

(菜鸟算法分享)LeetCode--初级算法--加一问题(C++描述)

折月煮酒 提交于 2019-12-24 04:40:54
(菜鸟算法分享)LeetCode–初级算法–加一问题(C++描述) BY Ray 题目描述 先附上原题链接: LeetCode–初级算法–加一 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 示例 1: 输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123。 示例 2: 输入: [4,3,2,1] 输出: [4,3,2,2] 解释: 输入数组表示数字 4321。 算法描述代码 class Solution { public : vector < int > plusOne ( vector < int > & digits ) { int len = digits . size ( ) ; for ( int i = len - 1 ; i >= 0 ; i -- ) //从最后一个元素开始遍历数组 { if ( digits [ i ] == 9 ) //遇到数字9,置0 { digits [ i ] = 0 ; if ( i == 0 ) //若第一个元素也是9,则添加一个0并将首位置1,退出循环 { digits . push_back ( 0 ) ; digits [ 0 ] = 1 ; break ; } }

LeetCode All in One 题目讲解汇总(持续更新中...)

♀尐吖头ヾ 提交于 2019-12-24 03:43:51
Given a list of strings words representing an English Dictionary, find the longest word in words that can be built one character at a time by other words in words . If there is more than one possible answer, return the longest word with the smallest lexicographical order. If there is no answer, return the empty string. Example 1: Input: words = ["w","wo","wor","worl", "world"] Output: "world" Explanation: The word "world" can be built one character at a time by "w", "wo", "wor", and "worl". Example 2: Input: words = ["a", "banana", "app", "appl", "ap", "apply", "apple"] Output: "apple"

LeetCode All in One 题目讲解汇总(持续更新中...)

半世苍凉 提交于 2019-12-23 22:26:17
In a given array nums of positive integers, find three non-overlapping subarrays with maximum sum. Each subarray will be of size k , and we want to maximize the sum of all 3*k entries. Return the result as a list of indices representing the starting position of each interval (0-indexed). If there are multiple answers, return the lexicographically smallest one. Example: Input: [1,2,1,2,6,7,5,1], 2 Output: [0, 3, 5] Explanation: Subarrays [1, 2], [2, 6], [7, 5] correspond to the starting indices [0, 3, 5]. We could have also taken [2, 1], but an answer of [1, 3, 5] would be lexicographically

021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode

五迷三道 提交于 2019-12-23 11:15:23
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 原题   Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. 题目大意   合并两个排序链表并返回一个新的列表。新的链表的结果由原先的两个链表结点组成,也就是不能合并后的链表不能包含新创建的结点。 解题思路   使用头结点root进行辅助操作,创建一个头结点,再使用两个引用指向两个链表的头结点,将较小的结点值的结点摘下来接到root链表的末尾,同时被摘的链头引用移动到下一个结点,一直操作,到到原先两个链表中有一个为空,最后再将剩下的结点接到root链表的末尾。最后返回root的下一个结点,其就为新的链表头。 代码实现 //整体代码 import java.util.* ; public class Demo04{ //非递归实现 public static ListNode mergeLists(ListNode l1,ListNode l2){ ListNode head = new ListNode(0); ListNode p = head ; while(l1!=null&

Leetcode-203 移除链表元素

穿精又带淫゛_ 提交于 2019-12-23 11:04:08
今天刚刚学习了链表这种数据结构,正好Leetcode上有一道关于链表的比较简单的题目,顺手做一下。 题目描述 删除链表中等于给定值 val 的所有节点。 示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5 波波老师讲了两种方法去做,一种是不设dummyHead节点,此时需要判断头节点head是否为给定值val,以及其是否为空等,会比较麻烦,于是我直接使用第二种设置dummyHead的方法做。 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode removeElements ( ListNode head , int val ) { ListNode dummyHead = new ListNode ( - 1 ) ; dummyHead . next = head ; ListNode prev = dummyHead ; while ( prev . next != null ) { if ( prev . next . val == val )

LeetCode-[数组/栈]-每日温度

拟墨画扇 提交于 2019-12-22 03:03:26
1. 图解 2. 代码 ```java package leetCode . temperatures ; import java . util . Stack ; /** * 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。 * * 例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。 * * 提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。 * * 来源:力扣(LeetCode) * 链接:https://leetcode-cn.com/problems/daily-temperatures * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 */ /** 最近关系类的题目第一时间就应该想到用栈 */ public class Temperature01 { //我的:229ms public static int [ ] dailyTemperatures1 ( int [ ] arr ) { int [ ] result = new int [ arr .

非算法工程师面试必问的算法面试理论

帅比萌擦擦* 提交于 2019-12-22 02:58:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 非算法方向的你 面了多少次试? 最后,因为不懂算法, 死在了半路上? 这些痛, 作为技术创新型公司的小编——个推君 怎么会不懂? 为此,个推君特请了我司经验丰富的面试官 为你奉上一份热乎的 面试宝典 。 宝典可不是面试题哦 仅送给想认真钻研的童鞋 帮大家梳理知识点 让大家举一反三, offer拿到手软! 注:此处建议大家使用 C 语言来学习数据结构与算法。 一、数据结构 数据结构是算法的基础。大家需要对数据结构有个清晰的概念,因为大部分的算法题均需要带入数据结构的概念来处理。科班出身的程序员或多或少学习过数据结构。我们推荐大家可以重温下这本书,温故而知新。 时间复杂度与空间复杂度 在说算法之前和大家科普两个重要的理论知识:算法的时间复杂度与空间复杂度。 时间复杂度 算法的时间复杂度,用来度量算法的运行时间,记作: T(n) = O(f(n))。它表示随着 输入大小n 的增大,算法执行需要的时间的增长速度可以用 f(n) 来描述,并且会忽略常量部分。 举个例子 int aFunc(void) { printf("Hello, World!\n"); // 需要执行 1 次 return 0; // 需要执行 1 次} 调用此方法,printf("Hello, World!\n"); 执行了一次,那么我们记作 T