首页 > 编程语言 >力扣744(java&python)- 寻找比目标字母大的最小字母(简单)

力扣744(java&python)- 寻找比目标字母大的最小字母(简单)

时间:2022-11-20 09:44:05浏览次数:41  
标签:right letters target python 字母 mid java left

题目:

给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。

在比较时,字母是依序循环出现的。举个例子:

如果目标字母 target = 'z' 并且字符列表为 letters = ['a', 'b'],则答案返回 'a'
 

示例 1:

输入: letters = ["c", "f", "j"],target = "a"
输出: "c"
示例 2:

输入: letters = ["c","f","j"], target = "c"
输出: "f"
示例 3:

输入: letters = ["c","f","j"], target = "d"
输出: "f"
 

提示:

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-smallest-letter-greater-than-target
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

【二分查找】

设定左右指针并初始化,left = 0, right = letters.length - 1,根据题目中【如果目标字母 target = 'z' 并且字符列表为 letters = ['a', 'b'],则答案返回 'a'】,可以知道特殊情况,如果target大于等于letters中任何字母,则直接返回letters中的第一个字母。然后判断一般情况,逐渐缩小搜索范围,循环条件是while(left < right):

  • 算出mid = left + (right - left) / 2;
  • 如果letters[mid] > target:有可能这时的答案就是mid,如果不是也只是在mid的左边,即right = left;
  • 如果letters[mid] <= target:这时答案只可能存在在mid的右边,即left = mid +  1;
  • 循环结束的条件是:left == right,搜索区间缩为一个点,返回 letters[left] 或者 letters[right]均可。
 1 class Solution {
 2     public char nextGreatestLetter(char[] letters, char target) {
 3         int left = 0, right = letters.length - 1;
 4         if (target >= letters[letters.length - 1]) return letters[0];
 5         while (left < right){
 6             int mid = left + (right - left) / 2;
 7             if (letters[mid] > target){
 8                 //答案可能在右边:[left, mid]
 9                 right = mid;
10             }else {
11                 //[mid + 1, right]
12                 left = mid + 1;
13             }
14         }
15         return letters[left];
16     }
17 }

 python3代码:

 1 class Solution:
 2     def nextGreatestLetter(self, letters: List[str], target: str) -> str:
 3         left, right = 0, len(letters) - 1
 4         if target >= letters[len(letters) - 1]:
 5             return letters[0]
 6         while left <= right:
 7             mid = left + (right - left) // 2
 8             if letters[mid] > target:
 9                 right = mid - 1
10             else:
11                 left = mid + 1
12         # left > right:left的位置为大于target的最小字母下标
13         return letters[left]

标签:right,letters,target,python,字母,mid,java,left
From: https://www.cnblogs.com/liu-myu/p/16907551.html

相关文章

  • Python3-实战
    实战01(模拟支付宝蚂蚁森林的能量产生过程)1print("查询能量请输入能量来源!退出程序请输入0")2source=input("能量来源如下:\n生活缴费,行走捐,共享单车,线下支付,网......
  • python面试题常用语句
    一、比较与交换1.比较并输出大的print(aifa>belseb)2.交换两个元素a,b=b,alist1[i],list[j]=list1[j],list[i] 二、排序1.字符串排序s='aaccbgd'pri......
  • java——异常——异常的分类
                                                        ......
  • java RSA加密
    参考了下面这个博主的文章,很有收获,简单处理后记录一下RSA加密、解密、签名、验签的原理及方法-PC君-博客园  工具类自带生成秘钥的方法,也可以用第三方工具生成秘......
  • java——异常——异常概念&异常体系
                                                异常的概念与体系异常的......
  • python课本学习第六章
    一、字典的概念#示例代码student={'name':'xx','name':'yy','grade1':98.1,'grade':99.2}print(student)#output:{'name':'yy','grade1':98.1,'grade':99.2}字典的......
  • String和int互相转化(java)
    1如何将字串String转换成整数int?A.有两个方法:1、 inti=Integer.parseInt([String]); 或 i=Integer.parseInt([String],[intradix]);2、 inti=Inte......
  • java异常处理机制(实践建议篇)
    转载自java全栈知识体系https://www.cnblogs.com/dolphin0520/p/3769804.html在java中对于异常的处理并不是一件简单的事情,可能需要经过大量的思考以确保其合理性,以便程......
  • java——Debug调试
    Debug调试Debug调试程序:可以让代码逐行执行,查看代码执行的过程,调试程序中出现的bug使用方式:在行号的右边,鼠标左键单击,添加断点(每个方法的第一行,哪里有bug添......
  • java——集合——Map集合——HashMap存储自定义类型键值
    HashMap存储自定义类型键值packagecom.itheima.demo02.Map;importjava.util.HashMap;importjava.util.Map;importjava.util.Set;/*HashMap存储自定义类......