代码随想录Day9——总结

双指针

  1. 移除元素的快慢指针:快指针不断向前移动,慢指针遇到需要移除的值就停下来,将快指针的值依次赋给慢指针,以覆盖掉需要移除的值。
    //移除字符串s中的target
    int fastpoint = 0;
    int slowpoint = 0;
    for(fastpoint = 0;fastpoint<s.size();fastpoint++)
    {
        s[slowpoint] = s[fastpoint];
        if(s[slowpoint] != target)
        {
            slowpoint++;
        }
    }
    s.resize(slowpoint);
  2. 寻找倒数第n个元素,见下边链表总结2。
  3.  前后指针:一个指针从前开始移动,一个从后开始移动,根据条件每次移动一个指针,知道两个指针相遇,遍历结束。
    int fronfpoint = 0;
    int behindpoint = s.size()-1;
    while(behindpoint >= frontpoint)
    {
        if()
        {
            func01();
            frontpoint++;
        }
        else
        {
            func02();
            behindpoint--;
        }
    }
  4.  滑动窗口:用到两个指针中间的元素,同时移动两个指针或者移动其中一个获得不同的元素集合。

链表 

  1. 虚拟头节点:避免对头节点和其他节点的操作差异。
    ListNode* dummyhead = new ListNode(0);
  2.  倒数第n个节点:双指针,两个指针相隔n个距离,后边的指针指到NULL则前边的指到倒数第n个节点
    ListNode* frontpoint = head;
    ListNode* behindpoint = head;
    for(int i = 0;i<n&&behindpoint != NULL;i++)
    {
        behindpoint = behindpoint->next;
    }
    while(behindpoint != NULL)
    {
        frontpoint = frontpoint->next;
        behindpoint = behindpoint->next;
    }
  3.  环形列表的快慢指针,一个指针以1为速度,一个以2为速度向前走,如果有环,则二者必相遇,相遇位置到进入环的距离和head到进入换的节点距离相同。

哈希表,字符串(vector,set,map,string的使用)

vector<T> v;
vector<T> v1(n,ele);//放入n个ele
v.assign(v1.begin(),v1.end());//将v1的值赋给v
v.assign(n,ele);//将n个ele赋给v
v.push_back();//尾插
v.pop_back;//尾删
v.empty();//是否为空
v.cacpcity();//容量
v.size();//元素个数
v.resize(num);//重新定义长度
v.insert(v.begin()+i,ele)//插入
v.erase(v.begin()+i)//删除
v.clear()//清空
v[i]//数据操作
v.at(i)//数据操作
v.swap(v1)//交换
set<T> s;
set<T> s1;
s.insert(ele)//插入
s.empty();//是否为空
s.size();//元素个数
s.swap(s1)//交换
s.erase(s.begin()+i)//删除
s.erase(s.begin(),s.end())//删除范围
s.erase(ele)//删除元素ele
s.clear()//清空
s.find(ele)//查找,找到返回迭代器,找不到返回s.end()
s.count(ele)//统计个数
map<T1,T2> m;
map<T1,T2> m1;
m.insert(pair<T1,T2>(key,value))//插入
m.empty();//是否为空
m.size();//元素个数
m.swap(s1)//交换
m.erase(s.begin()+i)//删除
m.erase(s.begin(),s.end())//删除范围
m.erase(key)//删除元素ele
m.clear()//清空
m.find(key)//查找,找到返回迭代器,找不到返回s.end()
m.count(key)//统计个数
string s;
string s1(n,ele);//放入n个ele
s = s + s1;
s.append(s1,n,m)//将s1从第下标n个字符拼接m个字符给s,n默认为0
s.find(str);//str第一次出现的位置,否则返回-1
s.rfind(str);//最后一次
s.replace(n,m,str)//n开始的m个字符换成str
s.insert(i,str)//插入
s.erase(n,m)//删除n开始的m个字符
s[i]//数据操作
s.at(i)//数据操作
s.substr(n,m)//取从n开始的n个字符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值