Leetcode 排序题

349、给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2]

def intersect(nums1, nums2):
    # TODO 先将两个数组进行排序
    nums1.sort()
    nums2.sort()
    print(nums1)
    print(nums2)
    # TODO 初始化三个指针i, j, k,将i指向nums1,j指向nums2,k指向nums1
    i = 0
    j = 0
    result = list()
    k = 0
    # TODO  如果nums1[i] == nums2[j], 将其保存到nums1[k]中
    # TODO  如果nums1[i] < nums2[j], i++,否则j++
    while i < len(nums1) and j < len(nums2):
        if nums1[i] == nums2[j] :
            if nums1[i] not in result:
                result.append(nums1[i])
                k += 1
            i += 1
            j += 1

        elif nums1[i] < nums2[j]:
            i += 1
        else:
            j += 1
    return result

350、给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]

def intersect(nums1, nums2):
    # TODO 先将两个数组进行排序
    nums1.sort()
    nums2.sort()
    print(nums1)
    print(nums2)
    # TODO 初始化三个指针i, j, k,将i指向nums1,j指向nums2,k指向nums1
    i = 0
    j = 0
    k = 0
    # TODO  如果nums1[i] == nums2[j], 将其保存到nums1[k]中
    # TODO  如果nums1[i] < nums2[j], i++,否则j++
    while i < len(nums1) and j < len(nums2):
        if nums1[i] == nums2[j]:
            nums1[k] = nums1[i]
            i += 1
            j += 1
            k += 1
        elif nums1[i] < nums2[j]:
            i += 1
        else:
            j += 1
    return nums1[:k]

976、给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。如果不能形成任何面积不为零的三角形,返回 0。
示例 :
输入:[3,6,2,3]
输出:8

# 将数组排序后,只要两条短边之和大于第三遍就可以围城三角形
def largestPerimeter(arr):
    arr.sort()
    print(arr)
    index = len(arr) - 3
    while index >= 0:
        if arr[index] + arr[index + 1] > arr[index + 2]:
            return arr[index] + arr[index + 1] + arr[index + 2]
        index -= 1
    return 0

1122、给你两个数组,arr1 和 arr2,

arr2 中的元素各不相同
arr2 中的每个元素都出现在 arr1 中

对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。
示例:
输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]
输出:[2,2,2,1,4,3,3,9,6,7,19]
提示:
arr1.length, arr2.length <= 1000
0 <= arr1[i], arr2[i] <= 1000
arr2 中的元素 arr2[i] 各不相同
arr2 中的每个元素 arr2[i] 都出现在 arr1 中

def relativeSortArray(num1, num2):
    temp = [0] * 1001
    res = list()
    for i in arr1:
        temp[i] += 1
    # for i in range(len(temp)):
    #     while temp[i] > 0:
    #         res.append(i)
    #         temp[i] -= 1
    # print(res)
    for i in arr2:
        while temp[i] > 0:
            res.append(i)
            temp[i] -= 1

    for i in range(len(temp)):
        while temp[i] > 0:
            res.append(i)
            temp[i] -= 1
    return res

1370、上升下降字符串

def sortString(s):
    bucket = [0] * 26
    for i in s:
        bucket[ord(i) - 97] += 1
    res = list()
    while True:
        if not any(bucket[i] for i in range(26)):
            break
        for i in range(26):
            if bucket[i] > 0:
                res.append(chr(i + 97))
                bucket[i] -= 1
        for i in range(26):
            if bucket[25 - i] > 0:
                res.append(chr(25 - i + 97))
                bucket[25 - i] -= 1
    return "".join(res)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值