【算法刷题】Day16

news2024/11/25 0:27:43

文章目录

  • 1. 不同路径
    • 题干:
    • 算法原理:
    • 代码:
  • 2. 二分查找
    • 题干:
    • 算法原理:
      • 1、暴力解法 O(n)
      • 2、二分查找算法
    • 朴素二分模版:
    • 代码:

1. 不同路径

在这里插入图片描述
在这里插入图片描述
原题链接


题干:

机器人只能向下和向右走,不能回退(向上或者向左)


算法原理:

  1. 状态表示
    经验 + 题目要求
    以[ i,j ] 为结尾时…
    dp[i][j] 表示:走到 [i, j] 位置处,⼀共有多少种方式
  2. 状态转移方程
    最近的一步 划分问题
    在这里插入图片描述
    因为只能从上面或者左边走到这个位置
    所以
    从 [i, j] 位置的上方( [i - 1, j] 的位置)向下走一步,转移到 [i, j] 位置
    从 [i, j] 位置的左方( [i, j - 1] 的位置)向右走⼀步,转移到 [i, j] 位置
    在这里插入图片描述
    不过,这里走的是一步,而不是一次
    所以并不是上一步+1,而是直接加上下一步可能得次数
    dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
  3. 初始化
    这里我们依然要使用虚拟节点来写
    不过,这里我们要做到以下两点:
    (1)虚拟节点里面的值,要保证后面填表的结果正确
    (2)下标的映射
    这里最重要的就是第一点
    在这里插入图片描述
    在这里,因为求的第一行的值都是 1
    这里就需要第一行第一列上面的虚拟节点为 1
  4. 填表顺序
    从上往下填写每一行
    每一行从左往右填写
  5. 返回值
    dp[m][n]

代码:

class Solution {
    public int uniquePaths(int m, int n) {
        //1.创建dp 表
        //2.初始化
        //3.填表
        //4.返回值

        int[][] dp = new int [m + 1][n + 1];
        dp[0][1] = 1;
        for(int i = 1; i <= m; i ++) {//从上往下每一行
            for(int j = 1; j <= n; j++) {//从左往右填写每一行
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
            }
        }
        return dp[m][n]; 
    }
}

在这里插入图片描述

2. 二分查找

在这里插入图片描述
原题链接


题干:

n 个元素有序的数组,找到 target,返回下标

算法原理:

1、暴力解法 O(n)

从头开始遍历,遇到 target 返回

2、二分查找算法

使用“二分查找”,在遇到“二段性”的时候可用
在一个数组中,拿到目标值 在数组中查找,发现可以划分为两端的区域
并且可以选择性的舍去一段,在另一段进行查找
这个时候就可以使用
(二分查找并不一定在有序数组,满足“二段性”就可用)

  1. 定义 left ,right 指针,分别指向数组的左右区间
  2. 找到待查找区间的中间点 mid ,找到之后分三种情况讨论:
    (1)arr[mid] == target 说明正好找到,返回 mid 的值
    (2)arr[mid] > target 说明 [mid, right] 这段区间都是⼤于 target 的,因此舍去右边区间,在左边 [left, mid -1] 的区间继续查找,即让 right = mid -1 ,然后重复 2 过程
    (3)arr[mid] < target 说明 [left, mid] 这段区间的值都是⼩于 target 的,因此舍去左边区间,在右边 [mid + 1, right] 区间继续查找,即让 left = mid +1 ,然后重复 2 过程
  3. 当 left 与 right 开时,说明整个区间都没有这个数,返回 -1

看图也可
在这里插入图片描述


细节问题:

  1. 循环结束的条件
    left > right
  2. 为什么是正确的
    虽然比较的次数少,但是与暴力解法相似,因此结果是正确的
  3. 时间复杂度
    long(n)
    在这里插入图片描述

朴素二分模版:

        while(left <= right) {
            int mid = left + (right - left) / 2;//防止溢出
            if(......) {
                left = mid + 1;
            }else if(......) {
                right = mid - 1;
            }else{
                return ......;
            }
        }

代码:

class Solution {
    public int search(int[] nums, int target) {
        int left = 0;
        int right = nums.length - 1;
        while(left <= right) {
            int mid = left + (right - left) / 2;//为了防止溢出问题
            if(nums[mid] < target) {
                left = mid + 1;
            }else if(nums[mid] > target) {
                right = mid - 1;
            }else{
                return mid;
            }
        }
        return -1;
    }
}

在这里插入图片描述

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

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

相关文章

网络协议介绍

一、网络层 1.网络层功能 ①定义了基于IP协议的逻辑地址 ②连接不同的媒介设备 ③在网络中选择最佳路径转发数据 2.使用版本 使用的IP协议版本 ipv4 ipv6 首部长度&#xff1a;IP头部的长度 3.标识符 确定数据的分片是否来自于同一个文件。 4.标志 代表数据过小&…

C# WPF上位机开发(树形控件在地图软件中的应用)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们聊过图形软件的开发方法。实际上&#xff0c;对于绘制的图形&#xff0c;我们一般还会用树形控件管理一下。举个例子&#xff0c;一个地图…

聚观早报 |问界M9内饰爆料;滴滴乘车码上线北京

【聚观365】12月15日消息 问界M9内饰爆料 滴滴乘车码上线北京 小米汽车官方微博正式开通 网易市值超美团 华为nova 12 Ultra部分参数曝光 问界M9内饰爆料 据华为官方消息&#xff0c;12月26日将举办问界M9发布会。同时&#xff0c;余承东发布了一段问界M9的内饰视频&…

【STM32】STM32学习笔记-按键控制LED 光敏传感器控制蜂鸣器(08)

00. 目录 文章目录 00. 目录01. 按键控制LED接线图02. 按键控制LED程序示例03. 光敏传感器控制Buzzer接线图04. 有源蜂鸣器原理图05. 光敏传感器控制Buzzer示例06. 程序示例下载07. 附录 01. 按键控制LED接线图 02. 按键控制LED程序示例 led.h #ifndef __LED_H__ #define __L…

Qt 表格相关API

1.文本框 限制输入数据类型&#xff08;如仅英文&#xff09; QValidator* validator new QRegExpValidator(QRegExp("[a-zA-Z]"), lineText); // 创建正则表达式验证器lineText->setValidator(validator); // 将验证器设置给 QLineEdit QLineEdit&#xff1a;单…

岛屿数量介绍

在Java编程语言中&#xff0c;岛屿数量通常指的是在一个二维字符数组&#xff08;grid&#xff09;中&#xff0c;相邻的、值为1的格子数量。这个二维字符数组可能代表一个地图或一个二维平面&#xff0c;每个1代表一个岛屿或地形凸起&#xff0c;每个0代表一个海洋或平坦地区。…

HI3559AV100和FPGA 7K690T的PCIE接口调试记录-续

上文https://blog.csdn.net/fzktongyong/article/details/134963814?spm1001.2014.3001.5501 上一篇文中PCIE实测速度和理论计算有较大偏差&#xff0c;经过尝试后有所提升。 1、提升效果 1&#xff09;、RC写操作&#xff0c;实测速度817MB/s&#xff08;410407&…

JupyterNotebook VS JupyterLab 如果jupyter安装成功,点击jupyterlab即可进入lab环境

简介 JupyterNotebook 是一个款以网页为基础的交互计算环境&#xff0c;可以创建Jupyter的文档&#xff0c;支持多种语言&#xff0c;包括Python, Julia, R等等。一般来说&#xff0c;如果是使用R语言的话&#xff0c;使用Rstudio居多&#xff0c;使用Python的话&#xff0c;使…

第78讲:截取MySQL Binlog二进制日志中特定部分内容的技巧

文章目录 1.为什么要截取Binlog日志中的部分内容2.针对标识位截取Binlog日志中的部分数据2.1.以标识位号截取Binlog日志的方法2.2.截取Binlog日志中的部分数据2.3.模拟简单基于标识位的Binlog数据恢复 3.针对事件范围截取Binlog日志中的部分数据 1.为什么要截取Binlog日志中的部…

虚幻学习笔记15—C++和UI(一)

一、前言 在C可以直接创建按钮、滚轮等UI&#xff0c;并且可以直接绑定并处理响应事件。在创建C代码后还是需要通过蓝图来显示到应用中&#xff0c;总体来说还是不如直接用蓝图来的方便。 本文使用的虚幻引擎为5.2.1。 二、实现 2.1、创建UUserWidgetl类型的C类 声明两个按钮…

老杨说运维 | 年末大盘点!擎创CEO实时盘点运维大干货,不容错过

2023年即将走到尾声&#xff0c;对于擎创而言&#xff0c;这一年是颇具成长和成就的一年。我们庆幸获得了更多客户的信任&#xff0c;也为他们达到下一个运维阶段提供了充足的助力。 越多的实践就会带来越多新的理解和可优化的经验。这一年来&#xff0c;擎创在运维数据治理、智…

【PID学习笔记10】PID公式分析

写在前面 前面已经将控制系统的基础知识点过了一遍&#xff0c;从本节开始&#xff0c;将正式学习PID控制的相关知识&#xff0c;将会从基本的PID公式概念解释&#xff0c;再基于matlab仿真介绍十几种数字式PID的基本概念。本文重点讲解PID的经典公式。 一、连续与离散的概念…

Tableau进阶--Tableau数据故事慧(20)解构Tableau的绘图逻辑

官网介绍 官网连接如下&#xff1a; https://www.tableau.com/zh-cn tableau的产品包括如下&#xff1a; 参考:https://zhuanlan.zhihu.com/p/341882097 Tableau是功能强大、灵活且安全些很高的端到端的数据分析平台&#xff0c;它提供了从数据准备、连接、分析、协作到查阅…

【MATLAB】数据拟合第10期-二阶多项式的局部加权回归拟合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 二阶多项式局部加权回归拟合算法是一种用于回归分析的方法&#xff0c;主要通过局部加权线性回归模型来实现。以下是对二阶多项式局部加权回归拟合算法的介绍&#xff1a; 局部加权线性回…

C# OpenCvSharp DNN 部署YOLOV6目标检测

目录 效果 模型信息 项目 代码 下载 C# OpenCvSharp DNN 部署YOLOV6目标检测 效果 模型信息 Inputs ------------------------- name&#xff1a;image_arrays tensor&#xff1a;Float[1, 3, 640, 640] -------------------------------------------------------------…

搭建个人智能家居 开篇(搭建Home Assistant)

搭建个人智能家居 开篇&#xff08;搭建Home Assistant&#xff09; 前言Home Assistant搭建Home AssistantUbuntu系统搭建Windows系统搭建VM安装方法VirtualBox安装方法&#xff1a; 配置Home Assistant控制页面 前言 随着科技的进步、发展&#xff0c;物联网给我们的生活带来…

Axure的安装及界面基本功能介绍

目录 一. Axure概述 二. Axure安装 2.1 安装包下载 2.2 安装步骤 三. Axure功能介绍​ 3.1 工具栏介绍 3.1.1 复制&#xff0c;剪切及粘贴 3.1.2 选择模式和连接 3.1.3 插入形状 3.1.4 点&#xff08;编辑控点&#xff09; 3.1.5 置顶和置底 3.1.6 组合和取消组合 …

双向无线功率传输系统MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介&#xff1a; 初级侧转换器通过双向 AC/DC 转换器从电网获取电力&#xff0c;并由直流线电压 Vin 供电&#xff0c;而拾波侧被视为连接到 EV&#xff0c;并由连接到任一存储的单独直流源 Vout 表示或…

express 下搞一个 websocket 长连接

安装模块 npm i express npm i express-ws 新建文件app.js 先安排源码 监听端口 7777 var express require(express) var app express() require(express-ws)(app)var port 7777 var clientObject {} app.ws(/, (client, req) > {// 连接var key req.socket.re…

TypeScript【枚举、联合类型函数_基础、函数_参数说明 、类的概念、类的创建】(二)-全面详解(学习总结---从入门到深化)

文章目录 枚举 联合类型 函数_基础 函数_参数说明 类的概念 类的创建 枚举 枚举&#xff08;Enum&#xff09;类型用于取值被限定在一定范围内的场景&#xff0c;比如一周只能有七天&#xff0c;颜色限定为红绿蓝等 枚举例子 枚举使用 enum 关键字来定义 enum Days {…