leetcode_cpp
文章平均质量分 65
PandaDou
啥都别说了,学吧......
展开
-
43. 字符串相乘
题目给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。分析1、去年10月份的时候的做法,涉及到了很多string的加法运算,由于每次string相加,都会设计内存的分配与拷贝,效率很差。因此这次用数组保存中间计算结果,最后再用stringstream拼接到一起,效率会提升很多。2、这里引用LeetCode评论区一位朋友的图。可见,我们可以把每一位的计算结果保存在数组里,最后遍历一遍数组,该进位的进位,该相加的相加。3、用原创 2022-04-15 01:38:30 · 998 阅读 · 0 评论 -
962. 最大宽度坡
题目给定一个整数数组AAA,坡是元组 (i,j)(i, j)(i,j),其中 i<ji < ji<j且 A[i]<=A[j]A[i] <= A[j]A[i]<=A[j]。这样的坡的宽度为 j−ij - ij−i。找出 AAA 中的坡的最大宽度,如果不存在,返回 0 。思路先遍历一遍数组,讲单调递减的元素放入栈中,然后从数组末尾开始遍历,用endendend表示末尾开始的元素indexindexindex。当endendend表示的元素不小于栈顶元素的时候,计算一个原创 2021-11-30 00:45:09 · 684 阅读 · 0 评论 -
leetcode84、85两道单调栈简单记录
简单记录一下,明早还要上班。。。题目:84. 柱状图中最大的矩形给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。解法这道题使用一个栈,遍历一遍高度数组,栈元素为高度对应的index,栈的特点是进栈的高度保持单调递增。所以若当前元素元素大于栈顶元素,则先不进栈,这会破坏栈的单调性。如何操作呢,计算当前栈顶元素为高度的矩形面积。这样高度已经确定了为height[stk.top()],下面确定宽度。注意到,在栈里,s原创 2021-08-01 23:49:04 · 310 阅读 · 1 评论 -
下一个更大的元素(1,2,3)
下一个更大的元素1题目给定两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。示例输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输出: [-1,3,-1]解释: 对于num1中的数字4,你无法在第二个数组原创 2020-09-09 16:06:52 · 134 阅读 · 0 评论 -
60. 第k个排列
题目给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:“123”“132”“213”“231”“312”“321”给定 n 和 k,返回第 k 个排列。说明:给定 n 的范围是 [1, 9]。给定 k 的范围是[1, n!]。示例1输入: n = 3, k = 3输出: "213"示例2输入: n = 4, k = 9输出: "2314"牢骚每天就处于,看过的知识点,看原创 2020-09-07 16:07:41 · 216 阅读 · 0 评论 -
7. 整数反转
题目给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例1输入: 123输出: 321示例2输入: -123输出: -321示例3输入: 120输出: 21注意假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。思路主要注意的就是溢出时返回0...原创 2020-03-07 10:56:06 · 87 阅读 · 0 评论 -
6. Z 字形变换
题目将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下: L C I R E T O E S I I G E D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字符串进行指定行数变换...原创 2020-03-06 10:28:03 · 95 阅读 · 0 评论 -
581. 最短无序连续子数组
题目给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。方法一复制数组,对该数组排序,然后和原数组相比较,得到两头第一个不一样元素的位置,这个区间的长度即为返回值。这种方式的负责度是 O(排序的复杂度)+O(n),效率较低,n2n^2n2的排序在leetcode上会超时。我这里用的快排。快排用了...原创 2020-02-01 11:23:30 · 177 阅读 · 0 评论 -
560. 和为k的子数组
和为k的子数组暴力法:三层循环for start in numsfor end in numsfor start to end 求和,计算是否和为k。两层循环:for start in numssum = 0for end in nums,计算start-end的和,用sum保存,对于给定的start,新end处的值加上sum即可。哈希表sum记录数...原创 2020-01-31 10:52:03 · 95 阅读 · 0 评论 -
[leetcode]208.实现Trie(前缀树)
题目实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。示例Trie trie = new Trie();trie.insert("apple");trie.search("apple"); // 返回 truetrie.search("app"); // 返回 falsetrie.startsWith("app"...原创 2019-12-29 19:55:35 · 164 阅读 · 1 评论 -
62.二进制求和
关于一个程序的记录看到一个程序,里面有些东西不是很清楚,搞清楚之后记录一下。struct Solution { string addBinary(string a, string b) { if (a.size() < b.size()) swap(a, b); int i = a.size(), j = b.size();...原创 2019-03-27 19:48:48 · 223 阅读 · 0 评论