双指针法
2023-11-02 16:10:00   1  举报             
     
         
 AI智能生成
  双指针总结
    作者其他创作
 大纲/内容
  链表篇    
     206.反转链表    
     前后指针和一个记录指针  
     前后指针依次移动交换  
     开始后指针指向头节点,结束后指针指向空  
     142.环形链表II    
     判断有环    
     快慢指针相遇判断有没有环  
     找环入口    
     定义一个指针index1,在头结点处定一个指针index2  
     让index1和index2同时移动,每次移动一个节点, 那么他们相遇的地方就是 环形入口的节点  
     N数之和    
     第15题. 三数之和    
     先对数组排序    
     a,left,right去重    
     a去重    
     if (i > 0 && nums[i] == nums[i - 1]) {
continue;
}
    continue;
}
 // 错误去重a方法,将会漏掉-1,-1,2 这种情况
/*
if (nums[i] == nums[i + 1]) {
continue;
}
    /*
if (nums[i] == nums[i + 1]) {
continue;
}
 去重逻辑应该放在找到一个三元组之后    
     left去重,left向右移动    
     while (right > left && nums[left] == nums[left + 1]) left++;  
     right去重,right向左移动    
     while (right > left && nums[right] == nums[right - 1]) right--;  
     a = nums[i],b = nums[left],c = nums[right]    
     nums[i] + nums[left] + nums[right] > 0    
     三数之和大了,right向左移动  
     nums[i] + nums[left] + nums[right] < 0    
     三数之和小了,left 向右移动  
     其他细节    
     if (nums[i] > 0) {
break;
}
    break;
}
 第18题. 四数之和    
     先对数组排序    
     nums[k] + nums[i] + nums[left] + nums[right] == target    
     k去重    
     if (k > 0 && nums[k] == nums[k - 1]) {
continue;
}
    continue;
}
 i去重    
     if (i > k + 1 && nums[i] == nums[i - 1]) {
continue;
}
    continue;
}
 去重逻辑应该放在找到一个四元组之后    
     left去重,left向右移动    
     while (right > left && nums[left] == nums[left + 1]) left++;
  
     right去重,right向左移动    
     while (right > left && nums[right] == nums[right - 1]) right--;  
     剪枝操作    
     k剪枝    
     if (nums[k] > target && nums[k] >= 0) {
break;
}
    break;
}
 k和i剪枝    
     if (nums[k] + nums[i] > target && nums[k] + nums[i] >= 0) {
break;
}
    break;
}
 数组篇    
     27. 移除元素    
     通过两个指针在一个for循环下完成两个for循环的工作  
     左指针遇到要移除的元素停下,然后移动右指针,右指针移动遇到要移除的元素就继续,不是要移除的就和左指针交换元素  
     右指针移动遇到要移除的元素就继续,不是要移除的就和左指针交换元素  
     左指针遇到右指针循环结束  
     字符串篇    
     344.反转字符串    
     利用左右指针,移动交换两端元素  
     剑指Offer 05.替换空格    
     统计空格数量count  
     增加数组大小count*2  
     老指针遇到非空格元素,赋值给新指针,遇到空格,新指针依次加入02%  
     151.翻转字符串里的单词    
     利用双指针去空格,和27移除元素类似  
    
 
 
 
 
  0 条评论
 下一页