跳转至

我的博客

两数之和

LeetCode原题地址: https://leetcode-cn.com/problems/two-sum

给定一个整数数组 nums 和一个目标值 target,请在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例

给定 nums = [2, 7, 11, 15], target = 9,因为 nums[0] + nums[1] = 2 + 7 = 9,所以返回 [0, 1]

1. 暴力解法

1
2
3
4
def two_sum(nums: list[int], target: int) -> list[int]:
    for i, e in enumerate(nums):
        if target - e in nums[i + 1:]:
            return([i, i + 1 + nums[i + 1:].index(target - e)])

2. 列表推导式

1
2
3
4
5
6
def two_sum(nums: list[int], target: int) -> list[int]:
    result = [
        [i, i + 1 + nums[i + 1:].index(target - e)] 
        for i, e in enumerate(nums) if target - e in nums[i + 1:]
    ]
    return  result[0] if len(result) > 0 else None

3. 排序

思路:先对数组进行排序,然后使用双指针进行查找。

def two_sum(nums: list[int], target: int) -> list[int]:
    sorted_id_nums = sorted(range(len(nums)), key=lambda x: nums[x])
    left = 0
    right = len(nums) - 1

    while left < right:
        two_sum = nums[sorted_id_nums[left]] + nums[sorted_id_nums[right]]
        if two_sum == target:
            return [sorted_id_nums[left], sorted_id_nums[right]]
        elif two_sum < target:
            left += 1
        elif two_sum > target:
            right -= 1

4. 哈希求解

def two_sum(nums: list[int], target: int) -> list[int]:
    hashmap = {}

    for i, e in enumerate(nums):
        diff = target - e

        if diff in hashmap:
            return [hashmap.get(diff), i]

        hashmap[e] = i

5. 排序+哈希

def two_sum(nums: list[int], target: int) -> list[int]:
    hashmap = {}
    sorted_id_nums = sorted(range(len(nums)), key=lambda x: nums[x])
    left, right = 0, len(nums) - 1

    while left <= right:
        lv = nums[sorted_id_nums[left]]
        rv = nums[sorted_id_nums[right]]
        ldiff = target - lv
        rdiff = target - rv

        if ldiff in hashmap:

            return [hashmap.get(ldiff), sorted_id_nums[left]]
        else:
            hashmap[lv] = sorted_id_nums[left]

        if rdiff in hashmap:
            return [hashmap.get(rdiff), sorted_id_nums[right]]
        else:
            hashmap[rv] = sorted_id_nums[right]

        left += 1
        right -= 1

三数之和

LeetCode原题地址: https://leetcode-cn.com/problems/3sum

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 abc ,使得 a + b + c = 0,请你找出所有满足条件且不重复的三元组。注意,答案中不可以包含重复的三元组。

示例

示例: 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:

1
2
3
4
[
    [-1, 0, 1],
    [-1, -1, 2]
]

无重复字符的最长子串

给定一个字符串,请找出其中不含有重复字符的最长子串的长度。

序号 输入 输出 解释
1 "abcabcbb" 3 因为无重复字符的最长子串是 "abc",所以其长度为 3。
2 "bbbbb" 1 因为无重复字符的最长子串是 "b",所以其长度为 1。
3 "pwwkew" 3 因为无重复字符的最长子串是 "wke",所以其长度为 3。请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

PyCharm 连接 Hive 和 Impala

PyCharm 没有 Impala 驱动,并且默认 Hive 驱动不能适配低版本的 Hive,我们需要下载匹配的驱动进行调整后,才能连接 Apache Hive 和 Apache Impala。

Python增量计算

原文地址:https://geek-blogs.com/blog/incremental-python

Incremental Python 是一种用于实现增量式计算和更新的编程范式,它允许程序在部分输入数据发生变化时,仅重新计算受影响的部分,而不是重新计算整个程序。这种方式可以显著提高程序的性能,尤其是在处理大规模数据或复杂计算时。

业务流程

原文地址:https://mp.weixin.qq.com/s/3q0LzJsB6u3_svb-5a_UPA

Info

本文摘录全面了解信贷业务流程仅作为学习,请查看原文

信贷业务流程对很多风控从业者来说既熟悉又陌生,多数人在日常工作中的职能覆盖范围远远达不到全面了解信贷风险点的要求,而不论是传统风控体系,还是大数据风控体系,都需要基于用户信贷生命周期的特点才能完整的建立。

本文旨在帮助大家全新认识用户借贷生命周期,全面了解网络借贷流程,包括信贷历史、不同产品形态、信贷业务流程、用户生命周期管理等。

量化风险管理

原文地址:https://mp.weixin.qq.com/s/hfJ3d5oSc-foF5HOF1sGPQ

Info

本文摘录全面了解量化风险管理 仅作为学习,请查看原文

过去 400 年间,只有保险公司始终积极从事风险管理活动;150年前,风险管理的范围开始扩大到信用风险和市场风险;最近40年,市场剧变让风险变得越来越复杂,潜在成本和未来机遇难以把握,企业开始有意识地从公司层面管理风险;20世纪80年代起, 企业在识别和管理风险上投入更多精力,带有“风险”的头衔成为新的职位。

Magic Studio开发者日志:页面布局

一个好的站点应该有一个好的页面布局,这利于页面能承载更多我们想要的内容,这里我们参考了 Shadcn Blocks 上的模板布局,并给 Shadcn 非常友好地给了详细代码。

除登录和注册页外,我们主体布局是支持整个平台各页面的,所以新建 app/(main) 文件夹,且布局并非是一个通用组件,所以不必放根目录下的 components 目录下。

Material-Mkdocs 配置 Github Page 自定义域名

问题汇总

1. 配置域名失效

在访问自己仓库域名时,我们自己有域名的情况下,可以给站点配置一个自定义域名。但奇怪的是,我们配置完后就每次提交更改后配置的域名就失效了,必须得重新配置一次才可以。

这是因为每次在 Custom domain 添加后都会给我们生成一个 CNAME 的文件,但是因为项目我们没有 pull 到本地,所以造成了,每次 push 之后 CNAME 信息被情动了。

解决办法很简单,在 /docs 目录下新建一个 CNAME 文件(注意是 /docs 目录不是根目录),并写入自己的域名:

docs/CNAME
www.xxx.com