算法刷题模版

36 阅读1分钟

1、双指针模版

  1. 初始化两个指针,通常两者设置为0或者0,length-1;(同向双指针/反向双指针)

  2. while(j < array.length):

    如果我们需要array[j],我们将其保留分配给array[i] = array[j], 并且向前移动 i , 使其准备好在下一个位置

    否则跳过它,不需要移动 i 因为他的位置没有被占用

344 反转字符串

class Solution {
public:
    void reverseString(vector<char>& s) {
        int i=0,j= s.size()-1;
        while(i < j){
            if(s[i]==s[j]){
                i++;
                j--;
                continue;
            }else{
                //交换值
                int temp = s[i];
                s[i++] = s[j];
                s[j--] = temp;
            }
        }
    }
};

26 删除有序数组中的重复字母

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int i = 0,j = 0;
        while(j < nums.size()){
            if(i == 0 || nums[i-1]!=nums[j]){
                nums[i++] = nums[j++];
            }else{
                j++;
            }
        }
        return i;
    }
};

2、二分查找模版

3、链表题型模版