IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 寻找比目标字母大的最小字母 -> 正文阅读

[游戏开发]寻找比目标字母大的最小字母

题目

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

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

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

原题链接

题解

这道题本质上是一个搜索类的题目,最常用的无非就是线性搜索, 如果题目给的数组是已经排好序的,用二分搜索即可

线性搜索

class Solution {
public:
    char nextGreatestLetter(vector<char>& letters, char target) {
        for(char c:letters){
            if(c>target) return c;
        }
        return letters[0];
    }
};

低配版二分搜索

这里所说的低配版,是自己手写的一个二分搜索。

用了二分搜索后程序所需的时间和空间显著降低

class Solution {
public:
    char nextGreatestLetter(vector<char>& letters, char target) {
        if(target >= letters[letters.size()-1]) return letters[0];
        return findBinary(letters,target,0,letters.size()-2);
    }

    char findBinary(vector<char>& letters,char target,int l, int r){
        int mid = (l+r)/2;
        if(mid == 0 && letters[mid] > target)return letters[0]; 
        if(letters[mid + 1] > target && letters[mid]<=target) return letters[mid + 1];
        if(letters[mid] > target) return findBinary(letters,target,l,mid);
        if(letters[mid + 1]<= target) return findBinary(letters,target,mid + 1,r);
        return letters[0];
    }
};

c++ 自带的二分搜索

这次让我学到东西了,原来c++还有自带的二分搜索。

已知letters是vector类型的,

  • letters.back() 取得是该vector的最后一个元素
  • upper_bound(letters.begin(), letter.end(),target ), 前两个位置传的是迭代器,后面一个是目标,这个返回的是该大于target的迭代器,
  • low_bound()传参和upper_bound一样, 主要区别在于 该函数放回的是不大于target的迭代器
class Solution {
public:
    char nextGreatestLetter(vector<char>& letters, char target) {
        return target >= letters.back() ? (letters[0]) : *upper_bound(letters.begin(),letters.end(),target); 
    }
};

不过这个c++自带的二分搜索性能上并没有比自己手写的性能高

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:42:53  更:2022-04-04 12:45:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/26 8:27:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码