首页 > 其他分享 >【LBLD】双指针技巧秒杀七道数组题目

【LBLD】双指针技巧秒杀七道数组题目

时间:2023-03-31 11:15:12浏览次数:41  
标签:size right int numbers ans 七道 LBLD 指针 left

【LBLD】双指针技巧秒杀七道数组题目

快慢指针技巧

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int fast = 0;
        int slow = 0;
        while (fast < nums.size()) {
            if (nums.at(fast) != nums.at(slow)) {
                nums.at(++slow) = nums.at(fast);
            }
            fast++;
        }
        return slow+1;
    }
};

左右指针的常用算法

2、两数之和

class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        int left = 0, right = numbers.size()-1;
        int sum = numbers[left] + numbers[right];
        while (left < right) {
            if (sum == target) {
                return {left+1, right+1};
            }
            else if (sum < target) {
                left++;
            }
            else {
                right--;
            }
            sum = numbers[left] + numbers[right];
        }
        return {-1, -1};
    }
};

3、反转数组

class Solution {
public:
    void reverseString(vector<char>& s) {
        int left = 0, right = s.size()-1;
        char temp = '\0';
        while (left < right) {
            temp = s[left];
            s[left] = s[right];
            s[right] = temp;
            left++; right--;
        }
    }
};

4、回文串判断

class Solution {
public:
    string palindromeLength(string s, int i, int j) {
        int left = i, right = j;
        while (left >= 0 && right < s.size() && s[left] == s[right]) {
            left--; right++;
        }
        return s.substr(left+1, right-left-1);
    }

    string longestPalindrome(string s) {
        string ans = "";
        string res1 = "", res2 = "";
        for (int i = 0; i < s.size(); i++) {
            res1 = palindromeLength(s, i, i);
            res2 = palindromeLength(s, i, i+1);
            ans = ans.size() > res1.size() ? ans : res1;
            ans = ans.size() > res2.size() ? ans : res2;
        }
        return ans;
    }
};

标签:size,right,int,numbers,ans,七道,LBLD,指针,left
From: https://www.cnblogs.com/yangxuanzhi/p/17275633.html

相关文章

  • 【LBLD】如何判断回文链表
    【LBLD】如何判断回文链表判断回文单链表/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),next(nullptr){}*ListNode(intx):val(x),next(nullptr){}*ListNode(intx,......
  • 结构体里面定义一个该结构体类型变量为什么必须用指针
    一.错误:structTreeNode{intval;TreeNodeleft;TreeNoderight;};二.分析原因:如果在定义classA时,A域的类型是未定义的classA而不是指向classA对象的指针类型,编译器会尝试在编译时分配一块内存给A域,但由于classA的定义还没有出现,因此无法确定A域需要多......
  • 指针作业
    #include<stdio.h>#include<string.h>#include<assert.h>#include<math.h>voidreverse(char*str){assert(str);//断言intlen=strlen(str);//这里是字符串char*......
  • 删除链表的第N个节点|栈、双指针
    删除链表的倒数第N个节点类似于删除链表中的第N个节点,但是这里是倒数第N个且不知道链表的长度,如果用删除第N个节点的方法去解决问题的时候需要先知道链表的长度。这就需......
  • 环形链表|哈希、快慢指针
    环形链表判断一个链表中是否有环,如果有返回环的起始位置。难点有两个,一是判断是否有环,二是找到起始点。这里有两种方法,一种是哈希集,另一种是快慢指针。对应题目142.环......
  • 力扣-数组-双指针
        1classSolution(object):2defremoveElement(self,nums,val):3"""4:typenums:List[int]5:typeval:int......
  • 指针
    1、指针:用来存放地址的,地址是唯一标识一块地址空间的2.1、意义:指针的类型决定了指针进行解引用操作时,访问空间的大小     int*---访问4个字节     char*-......
  • C++黑马程序员——P56-62. 指针
    P56.指针——指针的定义和使用P57.指针——指针所占内存空间P58.指针——空指针P59.指针——野指针P60.指针——const修饰指针P61.指针——指针和数组P62.指......
  • C++智能指针、绑定器和函数对象、lambda表达式
    智能指针​ 智能指针可以保证资源的自动释放不带引用计数的智能指针auto_ptr只让最后一个指向的指针管理资源,之前的auto_ptr会被置为nullptrscoped_ptr删除了拷贝构造......
  • C-指针
    指针每一个变量都有一个内存位置,每一个内存位置都定义了可使用&运算符访问的地址,它表示了在内存中的一个地址.指针也就是内存地址,指针变量是用来存放内存地址的......