C++_快慢指针在业务开发中的应用-数据结构与算法

报错的解决

vector不是模板问题,
第一是由于没有添加#include <vector>。
第二是需要添加命名空间。命名空间添加有两种,
     第一是直接在vector前面加上std::,
     第二是开头加入using namespace std;
加入vector后,std命名空间没有vector的问题--C++ 版本问题

其他

  快慢下标  快慢指针(下标)法  链表的节点的地址
    同向指针、对向指针、快慢指针等	  
	  三个指针,分别是快指针、慢指针、慢指针的前一个指针
  临时数组
  数组移位
       
	快慢指针:一快一慢两个指针来遍历数据对象并解决问题

有序数据去重

 没有元素或者仅有一个元素 --直接返回
 大于1个元素:   引入一个下标变量 index  和单个下标 i 
 审题: 把数组中不重复的元素都存到前面来,要把前面重复的元素用后面不重复的元素覆盖掉,
     至于后面的元素存的是什么不用管,
 思路:这里可以用设置 快慢针 来解决--快慢下标

代码示例

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        
        int n = nums.size();
        if(n == 0 || n == 1)
            return n;
        int index=0;
        int i = 1;
        while(i<n)
        {
            if(nums[index] != nums[i])
            {
                index++;
                nums[index] = nums[i];
            }
            i++;
        }
        return index+1;
    }
};
int main(){
 vector<int> nums = {7,3,3,1,2}
 Solution solution;
 int result = solution.removeDuplicates(nums);
 std::vector<int>::const_iterator start = nums.begin();
 std::vector<int>::const_iterator end  = nums.begin()+result;
 std::vector<int> cut_vector(start,end);
 for(int elem: cut_vector){
  std::cout << "num_element" << elem <<endl;
 }
 
}

应用场景

 删除-去重-过滤-保留-移除等--时序-排序
 过滤重复图像--筛选出典型数据,前后比较的方式 
    通过图像计算的相似性,两两比较--快慢下标的方式	

派生类

派生类对象 可以赋值给 
     基类的对象 / 基类的指针 / 基类的引用。
这里有个形象的说法叫切片或者切 割。寓意把派生类中父类那部分切来赋值过去。 

 const_iterator的正向常量迭代器,该类型迭代器只能用于读取容器内的元素,但不能改变其值。
   对const_iterator类型解引用,得到的是一个指向const对象的引用
 作为一个迭代器,遍历元素是必须要的,不然就丧失了一个迭代器的意义了
    const_iteartor代表的就是不能改变容器元素,但是可以遍历容器的迭代器。

滑动窗口法

 双下标或者双指针--		
 
 递归-迭代的思想

参考

 兜兜的乐扣刷题算法小记 https://blog.csdn.net/aishuirenjia/article/details/120422328		
	https://jaemon.blog.csdn.net/article/details/116456482
posted @ 2024-12-13 18:00  辰令  阅读(44)  评论(0)    收藏  举报