每日刷题(翻转+二分+BFS)

news2024/11/17 23:32:57

 

                                        食用指南:本文为作者刷题中认为有必要记录的题目

                                       ♈️今日夜电波:凄美地—郭顶

                                                                1:10 ━━━━━━️💟──────── 4:10
                                                                    🔄   ◀️   ⏸   ▶️    ☰ 

                                      💗关注👍点赞🙌收藏您的每一次鼓励都是对我莫大的支持😍 


目录

一、局部翻转+整体翻转

二、二分查找

三、BFS—广度优先算法


一、局部翻转+整体翻转

题目链接:剑指 Offer 58 - II. 左旋转字符串

题目描述:

        字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

        示例 1:

输入: s = "abcdefg", k = 2
输出: "cdefgab"

        示例 2:

输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"

        限制:

  • 1 <= k < s.length <= 10000

本题思路:

        使用 整体反转+局部反转 就可以实现「反转单词顺序」的目的。当然,你使用先整体还是先局部翻转得到的效果都是一样的!

        这里使用先局部后整体的思路:(时间复杂度O(n),空间复杂度 O(1))

                反转前 n 个字符

                反转 n 到末尾的字符

                反转整个字符串

char* reverse(char* s, int start, int end) {
    while (start < end) {
        char temp = s[start];
        s[start++] = s[end];
        s[end--] = temp;
    }
    return s;
}
char* reverseLeftWords(char* s, int n){
    int len = strlen(s);
    //反转前 n 个字符
    s = reverse(s, 0, n - 1);
    //反转 k 到末尾的字符
    s = reverse(s, n, len - 1);
    //反转整个字符串
    s = reverse(s, 0, len - 1);
    return s;
}

二、二分查找

题目链接:剑指 Offer 53 - I. 在排序数组中查找数字 I

题目描述:

        统计一个数字在排序数组中出现的次数。

        示例 1:

输入: nums = [5,7,7,8,8,10], target = 8
输出: 2

        示例 2:

输入: nums = [5,7,7,8,8,10], target = 6
输出: 0

        提示:

  • 0 <= nums.length <= 105
  • -109 <= nums[i] <= 109
  • nums 是一个非递减数组
  • -109 <= target <= 109

本题思路:

         一种是暴力,一种是二分法求边界

        暴力法当然简单,一个for循环就搞定了那为什么我还把这道简单题放到这里呢?因为我们需要做的是以简答题来体现我们思想递进的过程。

        于是我们就想到了二分法,这里是使用了两次二分。一次找到x元素最左边位置,一次找到x元素最右边的位置,最终返回的是右边的位置减左边的位置 + 1。当数组大小为零时候特殊处理,返回0。

        暴力法 

int search(int* nums, int numsSize, int target){
    int cn=0;
    for(int i=0;i<numsSize;i++)
    {
        if(nums[i]==target)
        {
            cn++;
        }
    }
    return cn;
}

        二分法

int L(int *nums, int x, int size)
{
    int l=0, r=size-1, mid=0;
    while( l < r ) {
        mid = l + (r-l)/2;
        if( nums[mid] >= x ) r = mid;
        else l = mid + 1;
    }
    return nums[l] == x?l:0;
}

int R(int *nums, int x, int size)
{
    int l=0, r=size-1, mid=0;
    while( l < r ) {
        mid = l + (r-l)/2 + 1;
        if( nums[mid] <= x ) l = mid;
        else r = mid - 1;
    }
    return nums[l] == x?l:-1;
}

int search(int* nums, int numsSize, int target){
    if( !numsSize ) return 0;
    return R(nums,target,numsSize) - L(nums,target,numsSize) + 1;
}

三、BFS—广度优先算法

题目链接:剑指 Offer 32 - I. 从上到下打印二叉树

题目描述:

        从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。

        例如:
给定二叉树: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

        返回:

[3,9,20,15,7]

        提示:

节点总数 <= 1000

本题思路:

        运用队列来实现BFS。需要注意二叉树空的情况,返回NULL,这里有个*returnsize也是需要反回的,所以开始先设置其为0,然后后面再返回一次。这里队列遍历时也需要注意要用个中间的变量来存储之前遍历的节点,以此来模拟触发BFS进队列的功能。

#define MAX_SIZE 1001
int* levelOrder(struct TreeNode* root, int* returnSize)
{
    *returnSize=0;
    if(root==NULL)
    return NULL;//为空情况

    struct TreeNode* queue[MAX_SIZE];//初始化
    memset(queue,0,sizeof(struct TreeNode*));
    int *ren=(int*)malloc(sizeof(int)*MAX_SIZE);
    int ret=0,front=0,rear=0;

    queue[rear++]=root;//先进一个,保证进入循环

    while(front<rear)//BFS
    {
        struct TreeNode* tmp=queue[front++];
        ren[ret++]=tmp->val;
        if(tmp->left!=NULL)
        queue[rear++]=tmp->left;
        if(tmp->right!=NULL)
        queue[rear++]=tmp->right;
    }
    *returnSize=ret;
    return ren;
}


                感谢你耐心的看到这里ღ( ´・ᴗ・` )比心,如有哪里有错误请踢一脚作者o(╥﹏╥)o!  

                                 

                                                                 给个三连再走嘛~      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/906054.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android 标准语音识别框架:SpeechRecognizer 的封装和调用

前言 此前&#xff0c;笔者梳理了语音相关的两篇文章&#xff1a; 如何打造车载语音交互&#xff1a;Google Voice Interaction 给你答案&#xff1a;介绍的是 3rd Party App 如何通过 Voice Interaction API 快速调用系统的语音交互服务快速完成确认、选择的基础语音对话直面…

创建 github 项目,并自动化配置

一 新建项目 github 创建新项目&#xff0c;并自动化部署 二 github 到本地 三 自动化部署

苹果iOS17引入新功能:实时显示充电设施信息,续航焦虑不再

据外媒9to5mac报道&#xff0c;苹果公司计划在iOS 17中引入一项非常方便电动汽车车主的功能&#xff0c;即iPhone内置的地图应用将实时显示充电设施的可用性信息。在最新发布的iOS 17 Beta 1版本中&#xff0c;这一功能仍在开发阶段&#xff0c;尚缺少一些必要的数据。 据称&am…

【健康医疗】Axure用药提醒小程序原型图,健康管理用药助手原型模板

作品概况 页面数量&#xff1a;共 10 页 兼容软件&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 应用领域&#xff1a;健康管理领域&#xff0c;用药助手 作品申明&#xff1a;页面内容仅用于功能演示&#xff0c;无实际功能 作品特色 本作品为「用药提醒」小程序原…

基于Java+SpringBoot+Vue的养老服务管理系统【源码+论文+演示视频+包运行成功】

博主介绍&#xff1a;✌csdn特邀作者、博客专家、java领域优质创作者、博客之星&#xff0c;擅长Java、微信小程序、Python、Android等技术&#xff0c;专注于Java技术领域和毕业项目实战战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏…

Linux面试笔试题(3)

54、统计磁盘空间或文件系统使用情况的命令是&#xff1a;(  A  ) A. df        B. dd   C. du        D. fdisk 在Linux系统中&#xff0c;df命令用于统计磁盘空间或文件系统使用情况。例如&#xff0c;要查看当前目录及其子目录下所有文件和文件夹…

linux 安装 kibana

首先下载 kibana https://www.elastic.co/cn/downloads/kibana 然后上传到linux /usr/local 目录下解压安装 修改config/kibana.yml 配置文件&#xff0c;将elasticsearch.hosts

攻防世界-supersqli

原题 解题思路 直接查找看不到明显的回显变化 先找回显变化数量 -1 order by 2 #如果是3列就报错&#xff0c;说明只有两列。接下来找数据库名称&#xff1a; -1 union select 1,databases # 结果是后端做了一些简单的过滤&#xff0c;需要更换查找语句。 -1; show …

python打包的exe文件运行时出现DLL load failed找不到DLL

一、问题&#xff0c;python开发的py代码文件通过"pyinstaller -c -F .\test.py"命令打包后在windows控制台(cmd.exe)运行报如下错误 D:\python\test>test.exe Traceback (most recent call last):File "test.py", line 7, in <module>File &qu…

轮胎侧偏刚度拟合估计

参考博客&#xff1a; carsim如何获得轮胎侧偏刚度_SSW.hani的博客-CSDN博客

面试算法变成题-必须掌握

一 多线程 1.1 死锁 1.1.1 死锁的案例 package com.ljf.day0814;/*** ClassName: DeadLock* Description: TODO* Author: admin* Date: 2023/08/21 09:31:16 * Version: V1.0**/ public class DeadLock {public static void main(String[] args) {Object objAnew Object(…

Delphi 安卓App自动升级

Androidapi.JNI.Support引用这个单元 procedure _InstallApk(Apk: string); varLFile: JFile;LIntent: JIntent; beginLFile : TJFile.JavaClass.init(StringToJString(ExtractFilePath(Apk)), StringToJstring(ExtractFileName(Apk)));LIntent : TJIntent.Create;LIntent.set…

【Vue】全家桶之Axios

文章目录 概述axios特点安装关于 ajax、fetch、axiosAxios APIAxios 实例请求配置响应结构默认配置拦截器错误处理取消请求取消请求请求体编码 概述 Axios是基于promise的网络请求库&#xff0c;可以在nodejs和浏览器中运行&#xff0c;是isomorphic的&#xff0c;意思就是同一…

fastgpt构建镜像

1.把client目录复制到服务器 .next和node_modules文件夹不用上传到服务器 在服务器目录运行 docker build -t fastgpt:1.0.3 . 构建服务 再运行 docker ps 就可以看到容器了

【从零学习python 】58.Python中的自定义异常及引发异常的方法

文章目录 自定义异常补充文件备份制作文件的备份 进阶案例 自定义异常 你可以用 raise 语句来引发一个异常。异常/错误对象必须有一个名字&#xff0c;且它们应是 Error 或 Exception 类的子类。 下面是一个引发异常的例子: class ShortInputException(Exception):自定义的异…

触摸屏与PLC之间 EtherNet/IP无线以太网通信

在实际系统中&#xff0c;同一个车间里分布多台PLC&#xff0c;用触摸屏集中控制。通常所有设备距离在几十米到上百米不等。在有通讯需求的时候&#xff0c;如果布线的话&#xff0c;工程量较大耽误工期&#xff0c;这种情况下比较适合采用无线通信方式。 本方案以MCGS触摸屏和…

Linux面试笔试题(6)

91、6块300G的硬盘做raid5&#xff0c;新的设备容量是多大&#xff08;C&#xff09; A 900G B 1800G C 1500G D 300G 6300G−300G 1500G 由于一块硬盘用于奇偶校验&#xff0c;所以设备容量将是1500G. Raid 5是一种磁盘阵列&#xff0c;将数据分散到多个硬盘上以提高性能和可…

leetcode刷题之1089: 复写零

题目 解题思路: 2)处理边界情况 这种情况越界会发生报错 处理边界情况 3) 双指针法 "从后向前" 完成复写操作 cur指向 最后一个复写的数 , 用cur指向的元素复写dest指向元素, 随后cur, dest 均向前移动一位 此时cur指向零元素, 需要复写两位, 复写两个元素的…

【Linux】Centos安装 mariadb 并授权远程登陆

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

YOLO入门必备的哪些知识点?

YOLO&#xff08;You Only Look Once&#xff09;是一种基于深度学习的目标检测算法&#xff0c;它具有快速、准确的特点&#xff0c;在计算机视觉领域广受关注。 如果你想入门YOLO&#xff0c;以下是一些必备的知识点&#xff1a; 深度学习基础知识&#xff1a;了解深度学习…