
力扣
丸子姑娘vivi
独立思考 好好科研
展开
-
力扣678——有效的括号字符串
题目描述: 解题思路: 不同于之前做的 valid parenthse,这道题给的字符串还含有特殊字符*,且该字符可以为 ( 或 )。解题思路即为遇到)则用出现过的( 或* 去抵消,对剩下的字符串进行判断。 class Solution { public: bool checkValidString(string s) { vector<char>left; vector<char>star; for(int i=0;i<原创 2020-09-12 00:04:20 · 356 阅读 · 0 评论 -
力扣-Z字形变换
题目描述: 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下: 解题思路: 在明确了字符的排列顺序后,题目要求是按照行的排列顺序输出,所以想到使用字符串数组来保存每一行的字符串。 class Solution { public: string convert(string s, int numRows) { int len=s.size(); if(numRo原创 2020-08-03 00:42:41 · 327 阅读 · 0 评论 -
力扣-三数之和
题目描述: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 解题思路: 为防止有重复三元组的情况,首先把数组排序。对于找三元组,可以使用暴力求解的方法,但如果对运行时间有限制的话, 会超时。本文采用固定一个数,另外两个数的求解用双指针的方法。 class Solution { public: vector<vector<int&g原创 2020-08-02 22:56:08 · 213 阅读 · 0 评论 -
力扣-加一
题目描述: 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 解题思路: 首先,当最后一位元素不是9,直接加一返回即可;当最后一位元素是9时,考虑逐级判断进位。 class Solution { public: vector<int> plusOne(vector<int>& digits) { int len=dig原创 2020-08-02 02:04:21 · 240 阅读 · 0 评论 -
力扣26- 删除排序数组中的重复项
题目描述: 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 解题思路: 当当前数字与后一个数字不同时,保存当前数字,不管当前数字出现了几次,当然需要考虑最后一个出现的数字。 class Solution { public: int removeDuplicates(vector<int>& nums) { ve原创 2020-08-02 01:33:43 · 124 阅读 · 0 评论 -
力扣-旋转数组
题目描述: 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 解题思路: 由题述可以看到,向右移动k,则数组的后k个元素就移到前面了,前n-k个元素放到了后面,可以先将整个数组反转,然后逐段反转。 class Solution { public: void rotate(vector<int>& nums, int k) { reverse(nums.begin(),nums.end()); reverse(nums.beg原创 2020-08-01 22:07:52 · 253 阅读 · 0 评论 -
力扣122-买股票的最佳时期II
题目描述: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票) 解题思路: 一只股票可进行多次买卖,获得最大利润的前提是低价买入,高价卖出,但在买入前手里的股票必须全部卖出。 将股票价格画成折现显示如下: 可分别在A和B区间买卖股票。 class Solution { public: int maxProfit(vecto原创 2020-08-01 21:27:55 · 222 阅读 · 0 评论 -
小红书——测开编程题-动态规划
题目描述: 某小红薯在小红书的活动中抽奖中了一定价值的薯券,这些薯券可以用来购买一批商品,求有多少种购买组合。其中一件商品可以买多件。 输 入:薯券金额、商品分别价格 输出 :组合数 例: 输入 10 [2,3,5] 输出 4 题解:组合数:[2,2,2,2,2],[2,2,3,3],[2,3,5],[5,5] 解题思路: 动态规划,看了其他同学的代码,解释一下代码含义:一定要注意题述的输入形式,这道题中,输入是一个整数和一个字符串,读取到有效数字后,dp[j]=dp[j]+dp[j-data[i]], 其原创 2020-07-05 22:59:42 · 574 阅读 · 0 评论 -
LeetCode——generate parentheses
题目描述: 给出n对括号,请编写一个函数来生成所有的由n对括号组成的合法组合。 例如,给出n=3,解集为: “((()))”, “(()())”, “(())()”, “()(())”, “()()()” 解题思路: 对于回归问题,到现在也不太会使。看了其他同学的解答才明白一点,讲一下代码的思路吧。l和r分别代表字符串中剩余‘(’和‘)’的个数,当剩余左括号的个数大于右括号时,肯定不是合法的组合,直接返回;当剩余左括号的个数小于等于右括号的个数时,可以增加左括号,也可以增加右括号。 class Soluti原创 2020-07-03 20:23:47 · 192 阅读 · 0 评论 -
LeetCode——valid parentheses
题目描述: 给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列 括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。 解题思路: 使用栈。当遇到括号的左半边时,直接入栈,当遇到右半边时,判断栈顶元素是不是和右半边对应的括号,若不是,返回false,若是,弹出栈顶元素,进行下一个判断。 class Solution { public: /** * * @param s原创 2020-07-02 21:42:58 · 158 阅读 · 0 评论 -
LeetCode——remove n-th node from end of list
题目描述: 给定一个链表,删除链表的倒数第n个节点并返回链表的头指针 例如, 给出的链表为:1->2->3->4->5, n= 2.↵↵ 删除了链表的倒数第n个节点之后,链表变为1->2->3->5. 备注: 题目保证n一定是合法的 请尝试只用一步操作完成该功能 解题思路: 删除链表倒数第n个节点,关键是找到该节点且尽量使用较少的循环。 可以使用两个指针,一个指针先走n步,另一个指针才开始同步走,这样当快指针到达链表尾部的时候,慢指针也刚好指到要删除节点的上一个原创 2020-07-01 20:18:34 · 137 阅读 · 0 评论 -
LeetCode——letter-combinations-of-a-phone
题目描述: 给出一个仅包含数字的字符串,给出所有可能的字母组合。 数字到字母的映射方式如下:(就像电话上数字和字母的映射一样) 注意:虽然上述答案是按字典序排列的,但你的答案可以按任意的顺序给出 解题思路: 由题述可知,输入是给定一个由数字组成的字符串,每个数字对应电话上的字符串,要求输出所有可能的字母组合。 首先会考虑由给定的输入可以得到每个数字对应的字符串,剩下的工作就是如何得到这些字符串的排列组合:常规的思路就是首先固定第一个数字对应的第一个字符,然后一次与剩余字母对应的字符串组合,但这样会用好多f原创 2020-07-01 16:22:04 · 136 阅读 · 0 评论