每日算法4/21

server/2024/10/18 20:21:12/

LCR 073. 爱吃香蕉的狒狒

题目

狒狒喜欢吃香蕉。这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 H 小时后回来。

狒狒可以决定她吃香蕉的速度 K (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 K 根。如果这堆香蕉少于 K 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉,下一个小时才会开始吃另一堆的香蕉。  

狒狒喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。

返回她可以在 H 小时内吃掉所有香蕉的最小速度 KK 为整数)。

示例 1:

输入: piles = [3,6,7,11], H = 8
输出: 4

示例 2:

输入: piles = [30,11,23,4,20], H = 5
输出: 30

示例 3:

输入: piles = [30,11,23,4,20], H = 6
输出: 23

提示:

  • 1 <= piles.length <= 10^4
  • piles.length <= H <= 10^9
  • 1 <= piles[i] <= 10^9

思路

二分答案

  1. 首先确定答案的区间范围
  2. 然后根据题目建立check函数
  3. 然后不断对答案区间进行二分找到符合题目的答案 

代码

bool check(int* piles, int pilesSize, int h, int mid) {long int sum = 0;for (int i = 0; i < pilesSize; i++) {sum += (piles[i] + mid - 1) / mid;}return sum <= h;
}
int minEatingSpeed(int* piles, int pilesSize, int h) {int l = 1;int r = 0;for (int i = 0; i < pilesSize; i++) {if (piles[i] >= r)r = piles[i];}int ans = 0;while (l <= r) {int mid = (r + l) / 2;if (check(piles, pilesSize, h, mid)) {ans = mid;r = mid - 1;} else {l = mid + 1;}}return ans;
}

64. 最小路径和

题目

给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。

示例 1:

输入:grid = [[1,3,1],[1,5,1],[4,2,1]]
输出:7
解释:因为路径 1→3→1→1→1 的总和最小。

示例 2:

输入:grid = [[1,2,3],[4,5,6]]
输出:12

提示:

  • m == grid.length
  • n == grid[i].length
  • 1 <= m, n <= 200
  • 0 <= grid[i][j] <= 200

思路

定义 dp[i] [j]的含义为:

  • 当机器人从左上角走到(i, j) 这个位置时,最下的路径和是 dp[i] [j]

找出关系数组元素间的关系式:

  • 由于机器人可以向下走或者向右走,所以有两种方式到达
  • 一种是从 (i-1, j) 这个位置走一步到达
  • 一种是从(i, j - 1) 这个位置走一步到达
  • 题目是计算哪一个路径和是最小的,那么我们要从这两种方式中,选择一种,使得dp[i] [j] 的值是最小的,显然有dp[i] [j] = min(dp[i-1][j],dp[i][j-1]) + arr[i][j];

找出初始值:

最上面一行,机器人只能一直往左走:dp[0] [j] = arr[0] [j] + dp[0] [j-1];

最左面一列,机器人只能一直往下走:dp[i] [0] = arr[i] [0] + dp[i] [0];

代码

int minPathSum(int** grid, int gridSize, int* gridColSize) {int m = *gridColSize;int n = gridSize;if (m < 0 || n < 0) {return 0;}int dp[m][n];dp[0][0] = grid[0][0];for (int i = 1; i < m; i++) {dp[i][0] = dp[i - 1][0] + grid[i][0];}for (int i = 1; i < n; i++) {dp[0][i] = dp[0][i - 1] + grid[0][i];}for (int i = 1; i < n; i++) {for (int j = 1; j < n; j++) {dp[i][j] = fmin(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];}}return dp[m - 1][n - 1];
}

 


http://www.ppmy.cn/server/7917.html

相关文章

http和https区别与上网过程

1.概念 HTTP和HTTPS是两种常用于Web浏览器和网站服务器之间信息传递的协议。HTTP在传输数据时使用的是明文&#xff0c;而HTTPS则是在HTTP的基础上增加了SSL/TLS加密层&#xff0c;提供了数据的加密传输。 HTTP&#xff08;超文本传输协议&#xff09;&#xff1a;是一个基于…

idea设置了maven会自动变回C盘那个

idea设置了maven会自动变回C盘那个 IDE支持Maven包装器&#xff0c;IDEA会将其用于项目&#xff0c;如果不想从包装器中使用Maven。 需要将项目中.mvn/wrapper/下的maven-wrapper.properties从项目中删除。

nacos 2022.0.0.0 版本实现负载均衡及集群

一、loadbalancer实现负载均衡 新版本的nacos已经取消了对ribbon的支持&#xff0c;所以不能使用ribbon来实现nacos提供的负载均衡。 但是新版本中我们可以使用loadbalancer实现负载均衡。 二、导入loadbalancer坐标 1、原本的坐标&#xff1a; 在parent的pom.xml中 <p…

Springboot的Test单元测试操作

Springboot的Test单元测试操作 简单总结需要操作的步骤 1&#xff0c;导入依赖 2&#xff0c;创建目录&#xff08;目录和启动类的目录保持一致&#xff09; 3&#xff0c;添加注解 4&#xff0c;写方法测试 1&#xff0c;导入依赖 <dependency><groupId>org.spri…

SQL语句每日一练十

586. 订单最多的客户 题目 表: Orders --------------------------- | Column Name | Type | --------------------------- | order_number | int | | customer_number | int | --------------------------- 在 SQL 中&#xff0c;Order_number是该表的…

【架构】负载均衡SLB浅谈

SLB负载均衡架构培训文档 1. 引言 作为一名架构师&#xff0c;理解并掌握SLB&#xff08;Server Load Balancer&#xff09;负载均衡架构是非常重要的。本培训文档旨在为您提供关于SLB负载均衡架构的详细知识和指导&#xff0c;帮助您更好地设计和优化企业级应用。 2. SLB负…

【Linux】小知识点温习---命令

许多常见命令会用&#xff0c;但是很少注意他们的区别&#xff1b;亦或在学习中使用较少&#xff0c;容易忘记&#xff0c;今天做一个回顾。 ls系列 -a:显示所有文件&#xff08;包括隐藏文件&#xff09; -l:将文件以竖列形式显示 -i&#xff1a;显示文件的inode编号 pwd 显…

在golang中实现KDTREE 的 queryBallPoint方法

最近工作中遇到用go重写kdtree的需求&#xff0c;上github上查了下&#xff0c;发现go的算法库是真心烂。star最高的kyroy/kdtree库&#xff0c;没有queryBallPoint方法&#xff0c;没办法&#xff0c;自己加一个 拉取源码 go get github.com/kyroy/kdtreequeryBallPoint 函数…