leetcode 744. 寻找比目标字母大的最小字母

news/2024/11/29 12:53:53/

  • 题目描述
  • 解题思路
  • 执行结果
leetcode 744. 寻找比目标字母大的最小字母


题目描述

  1. 寻找比目标字母大的最小字母

给你一个字符数组 letters,该数组按非递减顺序排序,以及一个字符 target。letters 里至少有两个不同的字符。

返回 letters 中大于 target 的最小的字符。如果不存在这样的字符,则返回 letters 的第一个字符。

示例 1:

输入: letters = ["c", "f", "j"],target = "a" 输出: "c" 解释:letters 中字典上比 'a' 大的最小字符是 'c'。 示例 2:

输入: letters = ["c","f","j"], target = "c" 输出: "f" 解释:letters 中字典顺序上大于 'c' 的最小字符是 'f'。 示例 3:

输入: letters = ["x","x","y","y"], target = "z" 输出: "x" 解释:letters 中没有一个字符在字典上大于 'z',所以我们返回 letters[0]。

提示:

2 <= letters.length <= 104 letters[i] 是一个小写字母 letters 按非递减顺序排序 letters 最少包含两个不同的字母 target 是一个小写字母

解题思路

法1

方法1:二分法
根据题目描述,数组是一个有序数组,对于有序数组的查找,我们通常使用的是二分法进行查找,可以极大的优化性能

  1. 查找目标:nums[n-1]<=x&&num[n]>x
  2. 定义二分法,如果再目标的左边,那么将左边的范围分成两份,对比中间的数值,如果小于于,就对右边的数组进行二分,持续循环直到找到目标值为止
  • 时间复杂度(O(logn))
  • 空间复杂度(O(1))

执行结果

法1

二分查找的思想。由于数组letters是按非递减顺序排序的,我们可以使用二分查找来找到大于target的最小字符。

我们初始化左指针left为0,右指针right为len(letters)-1。如果target大于或等于letters的最后一个字符,那么返回letters的第一个字符。

然后我们开始二分查找,每次取中间的字符mid。如果letters[mid]小于等于target,则说明目标字符在mid的右边,将左指针left更新为mid+1。否则,说明目标字符在mid的左边或就是mid本身,将右指针right更新为mid-1。

最终,当二分查找结束时,左指针left指向的位置就是大于target的最小字符的位置,我们将其返回作为结果。

func nextGreatestLetter(letters []byte, target byte) byte {
 n := len(letters)
 left := 0
 right := n - 1

 // 如果 target 大于或等于 letters 的最后一个字符,
 // 则返回 letters 的第一个字符
 if target >= letters[right] {
  return letters[0]
 }

 // 使用二分查找找到大于 target 的最小字符
 for left <= right {
  mid := left + (right-left)/2

  if letters[mid] <= target {
   left = mid + 1
  } else {
   right = mid - 1
  }
 }

 return letters[left]
}

执行结果: 通过 显示详情 查看示例代码 添加备注

执行用时: 0 ms , 在所有 Go 提交中击败了 100.00% 的用户 内存消耗: 2.5 MB , 在所有 Go 提交中击败了 71.15% 的用户 通过测试用例: 167 / 167 炫耀一下:


本文由 mdnice 多平台发布


http://www.ppmy.cn/news/66841.html

相关文章

Windows 7 字体常见问题及解决方法

随着电脑的普及&#xff0c;越来越多的人开始使用 Windows 7 操作系统。在使用过程中&#xff0c;可能会遇到一些字体方面的问题&#xff0c;比如字体模糊、字体显示不完整等。这些问题可能会影响到我们的使用体验&#xff0c;下面我们就来看一下 Windows 7 中常见的字体问题及…

PAT 乙级 1028 人口普查(解题思路+AC代码)

题目&#xff1a; 某城镇进行人口普查&#xff0c;得到了全体居民的生日。现请你写个程序&#xff0c;找出镇上最年长和最年轻的人。 这里确保每个输入的日期都是合法的&#xff0c;但不一定是合理的——假设已知镇上没有超过 200 岁的老人&#xff0c;而今天是 2014 年 9 月…

2023年湖北武汉安全员ABC报名条件和报名资料是什么?全国通用?

2023年湖北武汉安全员ABC报名条件和报名资料是什么&#xff1f;全国通用&#xff1f; 一、湖北安全员ABC报名条件要求&#xff1a; 1.安全员A证针对的是企业主要负责人&#xff0c;包括法定代表人、总经理&#xff08;总裁&#xff09;、分管安全生产的副总经理&#xff08;副…

Nodejs 常见版本管理工具(nvm、n、fnm、nvs、nodenv)

一、简介 Node.js 中文文档、Node.js 英文文档 通过包管理器安装 Node.js 插件列表 官方地址&#xff1a;https://nodejs.org/zh-cn/download/package-manager 国内地址&#xff1a;http://website2.nodejs.cn/download/package-manager/ 其他地址&#xff1a;http://dev.no…

不是吧,3 : 00 面试,还没10分钟就出来了,问的也太...

从外包出来&#xff0c;没想到死在另一家厂子 自从加入这家公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以也就忍了。没想到2月一纸通知&#xff0c;所有人不许加班&#xff0c;薪资直降30%&#xff0c;顿时有吃不起饭的赶脚。 好在有个兄弟内推我去…

Windows 10字体模糊发虚! 如何解决?

在使用Windows 10操作系统的过程中&#xff0c;有些用户可能会遇到字体模糊、发虚的问题&#xff0c;这给用户的视觉体验带来了不小的困扰。本文将介绍几种解决Windows 10字体模糊发虚问题的方法。 一、更新显卡驱动程序 如果更新显卡驱动程序后问题仍未解决&#xff0c;那么很…

前端HTML学习(二)

1、列表标签 列表标签概述&#xff1a;能够使用无序列表、有序列表、自定义列表标签&#xff0c;实现网页中列表结构的搭建。列表应用在网页中按照行展示关联性的内容&#xff0c;如:新闻列表、排行榜、账单等。 特点&#xff1a;按照行的方式&#xff0c;整齐显示内容 种类&a…

2023年北京.NET线下技术沙龙来了!大咖分享,还有精品好礼等你

MASA技术团队来北京啦&#xff01; 为了与北京的.NET开发者们更深入的交流学习&#xff0c;我们将在北京市举办一场.NET线下技术沙龙。同时也是希望通过举办这样的线下沙龙&#xff0c;让更多的.NET开发者了解我们&#xff0c;加入.NET开源技术生态&#xff0c;向更多的.NET开…