news 2026/7/15 15:29:56

经典算法实例:寻找比目标字母大的最小字母(二)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
经典算法实例:寻找比目标字母大的最小字母(二)

接上文,我们继续来分享第二种解题思路:

方法二:二分查找

利用列表有序的特点,可以使用二分查找降低时间复杂度。

首先比较目标字母和列表中的最后一个字母,当目标字母大于或等于列表中的最后一个字母时,答案是列表的首个字母。当目标字母小于列表中的最后一个字母时,列表中一定存在比目标字母大的字母,可以使用二分查找得到比目标字母大的最小字母。

初始时,二分查找的范围是整个列表的下标范围。每次比较当前下标处的字母和目标字母,如果当前下标处的字母大于目标字母,则在当前下标以及当前下标的左侧继续查找,否则在当前下标的右侧继续查找。

代码

Python3

class Solution: def nextGreatestLetter(self, letters: List[str], target: str) -> str: return letters[bisect_right(letters, target)] if target < letters[-1] else letters[0]

Java

class Solution { public char nextGreatestLetter(char[] letters, char target) { int length = letters.length; if (target >= letters[length - 1]) { return letters[0]; } int low = 0, high = length - 1; while (low < high) { int mid = (high - low) / 2 + low; if (letters[mid] > target) { high = mid; } else { low = mid + 1; } } return letters[low]; } }

C#

public class Solution { public char NextGreatestLetter(char[] letters, char target) { int length = letters.Length; if (target >= letters[length - 1]) { return letters[0]; } int low = 0, high = length - 1; while (low < high) { int mid = (high - low) / 2 + low; if (letters[mid] > target) { high = mid; } else { low = mid + 1; } } return letters[low]; } }

C++

class Solution { public: char nextGreatestLetter(vector<char> &letters, char target) { return target < letters.back() ? *upper_bound(letters.begin(), letters.end() - 1, target) : letters[0]; } };

C

char nextGreatestLetter(char* letters, int lettersSize, char target){ if (target >= letters[lettersSize - 1]) { return letters[0]; } int low = 0, high = lettersSize - 1; while (low < high) { int mid = (high - low) / 2 + low; if (letters[mid] > target) { high = mid; } else { low = mid + 1; } } return letters[low]; }

JavaScript

var nextGreatestLetter = function(letters, target) { const length = letters.length; if (target >= letters[length - 1]) { return letters[0]; } let low = 0, high = length - 1; while (low < high) { const mid = Math.floor((high - low) / 2) + low; if (letters[mid] > target) { high = mid; } else { low = mid + 1; } } return letters[low]; };

复杂度分析

  • 时间复杂度:O(logn) ,其中 n 是列表 letters 的长度。二分查找的时间复杂度是 O(logn) 。
  • 空间复杂度:O(1) 。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/15 15:29:04

【ChatGPT论文辅助黄金法则】:20年学术写作专家亲授——92%研究生忽略的5大合规雷区与3步精准润色法

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;ChatGPT论文辅助的学术伦理边界与核心定位 人工智能工具正深度介入学术写作全流程&#xff0c;但其角色必须严格限定于“辅助者”而非“创作者”。当研究者使用ChatGPT生成文献综述草稿、润色语言或提炼研究问…

作者头像 李华
网站建设 2026/7/15 15:28:57

compose2nix 标签系统详解:使用 Compose 标签扩展系统功能

compose2nix 标签系统详解&#xff1a;使用 Compose 标签扩展系统功能 【免费下载链接】compose2nix Generate a NixOS config from a Docker Compose project. 项目地址: https://gitcode.com/gh_mirrors/co/compose2nix compose2nix 是一个强大的工具&#xff0c;能够…

作者头像 李华
网站建设 2026/7/15 15:28:13

cann/asc-devkit:bfloat16转half函数

__bfloat162half_rz 产品支持情况产品 是否支持 Ascend 950PR/Ascend 950DT √ Atlas A3 训练系列产品/Atlas A3 推理系列产品 x Atlas A2 训练系列产品/Atlas A2 推理系列产品 x功能说明 将bfloat16类型数据转换为向零舍入的half类型数据。 函数原型 __simt_callee__ inline h…

作者头像 李华
网站建设 2026/7/15 15:27:43

OBS Advanced Masks:实时视频蒙版处理的GPU加速架构设计与性能优化

OBS Advanced Masks&#xff1a;实时视频蒙版处理的GPU加速架构设计与性能优化 【免费下载链接】obs-advanced-masks Advanced Masking Plugin for OBS 项目地址: https://gitcode.com/gh_mirrors/ob/obs-advanced-masks 在专业直播和视频制作领域&#xff0c;实时蒙版处…

作者头像 李华
网站建设 2026/7/15 15:24:27

导购APP的实时风控引擎构建:规则引擎与机器学习模型的融合应用

导购APP的实时风控引擎构建&#xff1a;规则引擎与机器学习模型的融合应用 大家好&#xff0c;我是省赚客APP研发者微赚淘客&#xff01; 在导购返利业务中&#xff0c;风控是保障平台健康运营的生命线。面对“薅羊毛”、刷单、恶意套利等黑产行为&#xff0c;单一的风控手段往…

作者头像 李华