双指针
nepu_bin
前方的路没有答案,只有走着走着才有了答案
展开
-
翻转字符串里的单词 给定一个字符串,逐个翻转字符串中的每个单词。
翻转字符串里的单词给定一个字符串,逐个翻转字符串中的每个单词说明:无空格字符构成一个单词 。输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。分析:本题在翻转字符串之前需要思考的是我们如何除去单词间多余的空格,这里我只采用c++中提供的 istringstream 方法(如不采用此法可使用双指针去除空格),首先将字符串的每个单词取出并另存于字符串变量;去掉多余空格的之后,我们观察到:整体反转一次就能将颠倒单词原创 2021-02-09 23:36:48 · 1380 阅读 · 0 评论 -
力扣1004滑动窗口超详细解答(转载)
最大连续1的个数 III给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。返回仅包含 1 的最长(连续)子数组的长度。解题思路首先考虑本问题的最直观朴素的想法:枚举出每一个子串,逐个验证其有效性并且更新最大值这种做法的时间复杂度是O(n^3),在这一数据规模下是一定会超时的超时的原因是做了非常多重复的验证计算,且枚举了非常多没有意义的串那么基于我们在这类连续子数组最值性质问题的经验,使用双指针(滑动窗口)会是一个非常好的想法双指针解法双指针解法.转载 2021-01-30 21:29:13 · 260 阅读 · 0 评论 -
移除元素给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-elementclass Solution {public: int removeElement(vector<i原创 2021-01-20 22:08:26 · 536 阅读 · 0 评论 -
比较含退格的字符串
给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 ‘#’ 代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。力扣原题链接class Solution {public: bool backspaceCompare(string S, string T) { int i = S.length() - 1, j = T.length() - 1; int skipS = 0, skipT = 0;原创 2021-01-20 20:43:47 · 150 阅读 · 0 评论 -
求最大子序和(力扣53)
给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。力扣原题链接示例:输入:[ -2, 1, -3, 4, -1, 2, 1, -5, 4 ]输出:6解释:连续子数组[4,-1,2,1]的和最大,为6暴力求解:class Solution {public: int maxSubArray(vector<int>& nums) { int n = nums.size(),max=nums[0],sum=原创 2021-01-20 20:36:16 · 111 阅读 · 0 评论