Skip to content

Instantly share code, notes, and snippets.

@pengdu
pengdu / 在二叉树中删除节点.md
Created August 8, 2023 10:21
chatgpt在二叉树中删除节点

在二叉树中删除节点的操作相对于二叉搜索树来说稍微复杂一些,因为二叉树没有排序规则。删除节点的步骤如下:

  1. 首先,找到要删除的节点。可以使用递归或者迭代的方式进行查找。

  2. 如果要删除的节点是叶子节点(没有子节点),直接删除即可。

  3. 如果要删除的节点只有一个子节点,将子节点替代要删除的节点的位置。

  4. 如果要删除的节点有两个子节点,有两种方法可以选择:

    • 找到要删除节点的后继节点(比要删除节点大的最小节点)或前驱节点(比要删除节点小的最大节点),将后继节点或前驱节点的值赋给要删除的节点,然后在右子树或左子树中递归地删除后继节点或前驱节点。
@pengdu
pengdu / 在二叉搜索树中删除节点.md
Created August 8, 2023 09:59
chatgpt 在二叉搜索树中删除节点

在二叉搜索树中删除节点的操作可以分为以下几种情况:

  1. 如果要删除的节点是叶子节点(没有子节点),直接删除即可。

  2. 如果要删除的节点只有一个子节点,将子节点替代要删除的节点的位置。

  3. 如果要删除的节点有两个子节点,需要找到该节点的后继节点或前驱节点来替代该节点的位置。后继节点是指比要删除的节点值大的最小节点,前驱节点是指比要删除的节点值小的最大节点。可以选择使用后继节点或前驱节点来替代要删除的节点。

以下是一个使用C++实现二叉搜索树删除节点的示例代码:

@pengdu
pengdu / 最小编辑距离.md
Created August 8, 2023 09:46
chatgpt最小编辑距离

最小编辑距离(Minimum Edit Distance)是指将一个字符串转换为另一个字符串所需的最少编辑操作次数。编辑操作包括插入一个字符、删除一个字符和替换一个字符。

以下是一个使用动态规划算法实现最小编辑距离的示例代码:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
@pengdu
pengdu / 自定义deleter.md
Created August 8, 2023 09:34
chatgpt 自定义deleter

在C++中,我们可以自定义一个deleter来管理智能指针的资源释放。通过自定义deleter,我们可以在智能指针析构时执行我们自己的释放逻辑。

下面是一个示例,展示如何自定义deleter来管理一个动态分配的数组:

#include <iostream>
#include <memory>

struct MyArrayDeleter {
 template
@pengdu
pengdu / 接雨水.md
Created August 8, 2023 09:25
chatgpt接雨水

题目描述: 给定一个非负整数数组 height 表示一系列柱子的高度,每个柱子的宽度为 1。计算下雨后,能够在这些柱子之间存储多少雨水。

例子:

输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解释:如下图所示,灰色区域表示可以存储雨水的地方,可以存储的雨水量为 6 个单位。

   |
@pengdu
pengdu / 递归的方式来反转链表.md
Created August 8, 2023 09:18
chatgpt递归的方式来反转链表

在C++中,可以使用递归的方式来反转链表。具体步骤如下:

  1. 定义一个递归函数reverseList,该函数接收一个指向链表头节点的指针head作为参数,并返回反转后的链表头节点的指针。
  2. 在递归函数中,首先判断特殊情况,即如果链表为空或只有一个节点,则直接返回head
  3. 否则,递归调用reverseList函数来反转剩余的链表,并将返回的反转后的链表头节点的指针保存在变量newHead中。
  4. 将当前节点的下一个节点的next指针指向当前节点,即将当前节点的下一个节点指向当前节点,实现反转。
  5. 将当前节点的next指针置空,即将当前节点的下一个节点置空,防止形成环。
  6. 返回newHead作为反转后的链表头节点的指针。

下面是使用C++实现的代码:

@pengdu
pengdu / chatgpt两个有序数组的中值.md
Last active August 8, 2023 09:15
chatgpt两个有序数组的中值

在C++中,可以使用二分查找的思想来找到两个有序数组的中值。具体步骤如下:

  1. 确保数组nums1是较短的数组,如果不是,则交换nums1和nums2。
  2. 定义两个变量,m和n,分别表示数组nums1和nums2的长度。
  3. 定义两个指针,left和right,分别指向数组nums1和nums2的划分位置。
  4. 初始化left为0,right为m。
  5. 进行二分查找,直到找到合适的划分位置。
    • 令i = (left + right) / 2,j = (m + n + 1) / 2 - i。
    • 如果nums1[i - 1] > nums2[j],则说明划分位置过大,需要将right左移。
    • 如果nums2[j - 1] > nums1[i],则说明划分位置过小,需要将left右移。

可以使用C++标准库中的vector来实现一个简单的2维卷积函数。以下是一个示例代码:

#include <iostream>
#include <vector>

using namespace std;

// 二维卷积函数
vector<vector<int>> conv2d(const vector<vector<int>>& img, const vector<vector<int>>& kernel)

以下是使用Lambda表达式将C++的list转换为map的示例代码:

#include <iostream>
#include <list>
#include <map>
#include <string>

using namespace std;
以下是一种较为复杂的自动白平衡算法,称为“灰度世界假设”(Gray World Assumption):
1. 将图像转换为LAB颜色空间。
2. 对于每个像素,计算其在LAB颜色空间中的L, a, b值。
3. 计算图像的平均L, a, b值。
4. 将平均值的a, b值分别设置为0,保持平均值的L值不变。