GPT 3.5 免登录运用

今日清晨,OpenAI 宣告,ChatGPT 无需登录就能运用。

一直以来,GPT 3.5 都是注册账号,就能免费运用,只有 GPT 4 才是需求花钱订阅。

但即便仅仅注册账号,对于中国大陆用户来说,也是不少的费事。

需求科学上网不说,注册 OpenAI 还需求海外手机收短信验证码,这一度让「直接售卖 GPT 账号」和「短信打码服务二房东」成为了一门生意。

现在,OpenAI 取消了登录运用约束,让国内运用 GPT 的难度下降到拜访 Google 的级别。

大家只需翻开浏览器拜访 chat.openai.com 即可运用 ChatGPT 3.5。

清晨重磅!ChatGPT 今日起免登录运用

清晨重磅!ChatGPT 今日起免登录运用

需求留意的是:因为是非登录下运用 GPT,因而所有上下文会在刷新浏览器后消失。

因而这种免登录运用 GPT 的模式,更适合偶然暂时运用。

另外不知道是不是幻觉,尽管和登录状态下的 GPT 数据截止日期共同,但总感觉非登录状态下的 GPT 更”笨”一些:

清晨重磅!ChatGPT 今日起免登录运用

清晨重磅!ChatGPT 今日起免登录运用

但无论如何,降低运用门槛总是好的,你觉得呢?

回归主线。

来做一道和「美团」二面相关的算法原题。

标题描述

渠道:LeetCode

题号:108

给你一个整数数组 nums,其间元素现已按 升序 摆放,请你将其转换为一棵 高度平衡 二叉查找树。

高度平衡 二叉树是一棵满意「每个节点的左右两个子树的高度差的绝对值不超越 11 」的二叉树。

示例 1:

清晨重磅!ChatGPT 今日起免登录运用

输入:nums = [-10,-3,0,5,9]
输出:[0,-3,9,-10,null,5]
解说:[0,-10,5,null,-3,null,9] 也将被视为正确答案:

示例 2:

清晨重磅!ChatGPT 今日起免登录运用

输入:nums = [1,3]
输出:[3,1]
解说:[1,null,3][3,1] 都是高度平衡二叉查找树。

提示:

  • 1<=nums.length<=1041 <= nums.length <= 10^4
  • −104<=nums[i]<=104-10^4 <= nums[i] <= 10^4
  • nums 按严厉递加顺序摆放

递归分治

标题给定的 nums 严厉有序,为满意结构出来的 BST 整体平衡,我们需求确保每个子树的结构也是平衡的。

一个简单想到的思路:运用 nums 中最靠近中心的方位作为整棵 BST 的根节点,例如下标 mid=⌊l+r2⌋mid = left lfloor frac{l + r}{2} right rfloor 的方位,确保左右子树节点数量平衡。随后递归结构 nums 中下标范围为 [0,mid−1][0, mid – 1] 作为左子树,递归结构 nums 中下标范围为 [mid+1,n−1][mid + 1, n – 1] 作为右子树。

Java 代码:

class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        return build(nums, 0, nums.length - 1);
    }
    TreeNode build(int[] nums, int l, int r) {
        if (l > r) return null;
        int mid = l + r >> 1;
        TreeNode ans = new TreeNode(nums[mid]);
        ans.left = build(nums, l, mid - 1);
        ans.right = build(nums, mid + 1, r);
        return ans;
    }
}

Python 代码:

class Solution:
    def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:
        return self.build(nums, 0, len(nums) - 1)
    def build(self, nums, l, r):
        if l > r:
            return None
        mid = l + r >> 1
        ans = TreeNode(nums[mid])
        ans.left = self.build(nums, l, mid - 1)
        ans.right = self.build(nums, mid + 1, r)
        return ans

C++ 代码:

class Solution {
public:
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        return build(nums, 0, nums.size() - 1);
    }
    TreeNode* build(vector<int>& nums, int l, int r) {
        if (l > r) return nullptr;
        int mid = l + r >> 1;
        TreeNode* ans = new TreeNode(nums[mid]);
        ans->left = build(nums, l, mid - 1);
        ans->right = build(nums, mid + 1, r);
        return ans;
    }
};

TypeScript 代码:

function sortedArrayToBST(nums: number[]): TreeNode | null {
    const build = function (nums: number[], l: number, r: number): TreeNode | null {
        if (l > r) return null;
        const mid = l + r >> 1;
        const ans = new TreeNode(nums[mid]);
        ans.left = build(nums, l, mid - 1);
        ans.right = build(nums, mid + 1, r);
        return ans;
    }
    return build(nums, 0, nums.length - 1);
};
  • 时刻复杂度:O(n)O(n)
  • 空间复杂度:O(n)O(n)