📜  排序数组中最接近字符K 的较小字符(1)

📅  最后修改于: 2023-12-03 14:54:42.493000             🧑  作者: Mango

排序数组中最接近字符K的较小字符

题目描述

给定一个有序数组和一个字符K,找出数组中最接近K并且比K小的字符。如果不存在这样的字符,则返回数组中最小的字符。

示例

输入:arr = ['a', 'c', 'f', 'h', 'j'], k = 'd'

输出:'c'

输入:arr = ['a', 'c', 'f', 'h', 'j'], k = 'k'

输出:'j'

思路

这是一道比较简单的题目,可以使用二分查找法求解。具体如下:

  1. 如果K比数组中所有元素都大,直接返回数组中最后一个元素;
  2. 如果K比数组中所有元素都小,直接返回数组中第一个元素;
  3. 如果K在数组中,则返回前一个元素,如果前一个元素不存在,则返回数组中第一个元素;
  4. 如果K在数组中不存在,则在数组中进行二分查找,找到第一个大于K的元素位置,返回该位置的前一个元素。
代码实现
def findClosestChar(arr, k):
    if arr[0] > k:
        return arr[0]
    if arr[-1] < k:
        return arr[-1]
    left, right = 0, len(arr) - 1
    while left <= right:
        mid = (left + right) // 2
        if arr[mid] == k:
            return arr[mid - 1]
        elif arr[mid] > k:
            right = mid - 1
        else:
            left = mid + 1
    return arr[left - 1]
复杂度分析
  • 时间复杂度:O(log n),其中n为数组的长度;
  • 空间复杂度:O(1)。