LeetCode 1174, 274, 240

目录

  • 1174. 即时食物配送 II
    • 题目链接
    • 要求
    • 知识点
    • 思路
    • 代码
  • 274. H 指数
    • 题目链接
    • 标签
    • 思路
    • 代码
    • 优化
  • 240. 搜索二维矩阵 II
    • 题目链接
    • 标签
    • 特性
    • 线性查找 + 二分查找
      • 思路
      • 代码
    • 官方题解的Z字形查找
      • 思路
      • 代码

1174. 即时食物配送 II

题目链接

1174. 即时食物配送 II

  • Delivery的字段为delivery_idcustomer_idorder_datecustomer_pref_delivery_date

要求

  • 如果顾客期望的配送日期和下单日期相同,则该订单称为 「即时订单」,否则称为 「计划订单」
  • 「首次订单」 是顾客最早创建的订单。我们保证一个顾客只会有一个 「首次订单」
  • 编写解决方案以获取即时订单在所有用户的首次订单中的比例。保留 两位小数

知识点

  1. round():四舍五入函数。
  2. min():取最小值函数,不仅适用于数值,还适用于日期等。
  3. count():统计个数函数。
  4. if:根据条件判断返回的是第一个值还是第二个值。
  5. group by:按照一个字段的值对数据进行分组。
  6. 子查询:将查询到的结果作为一个表进行查询。

思路

要想获取即时订单在所有用户的首次订单中的比例,得先获取所有用户的首次订单,这个可以通过子查询得到:按顾客的id分组,查询最小的日期即可。然后就是确定及时订单的数量,可以通过条件order_date = customer_pref_delivery_date进行判断。最后就能得到两者的比值了,再乘100并且四舍五入到小数点后第二位就是百分比。

代码

selectround(count(if(d.order_date = customer_pref_delivery_date, 1, null)) * 100 / count(*) , 2) immediate_percentage
fromDelivery d,(selectcustomer_id,min(order_date) min_order_datefromDeliverygroup bycustomer_id) sub
whered.customer_id = sub.customer_id
andd.order_date = sub.min_order_date

274. H 指数

题目链接

274. H 指数

标签

数组 计数排序 排序

思路

本题中citations[i]的范围为[0, 1000],它代表第i篇论文被引用的次数,范围不是很大,适合用数组count统计,对于count[j],它表示引用次数为j的论文有count[j]篇。

所以思路是先统计,然后从索引为1000的位置开始向索引为0的位置反向遍历,每次都让论文的数量num(此处的论文数量num指的是引用次数比j大的论文数量)加上当前引用次数的论文数count[j],如果论文的数量num比当前的索引j还大,则返回这个索引,否则就继续找,直到遍历完整个数组,这时返回0。

代码

class Solution {public int hIndex(int[] citations) {int[] count = new int[1001]; // 索引是从0开始的,所以数组大小比1000多1for (int c : citations) {count[c]++;}int res = 0, num = 0;for (int j = 1000; j >= 0; j--) {num += count[j];if (num >= j) {return j;}}return 0;}
}

优化

可以看看力扣官方题解的方法二——计数排序,题解中将1001替换成citations.length + 1、1000替换成citations.length,这样做可以降低空间和时间复杂度。

240. 搜索二维矩阵 II

题目链接

240. 搜索二维矩阵 II

标签

数组 二分查找 分治 矩阵

特性

该矩阵具有以下特性:

  • 每行的元素从左到右升序排列。
  • 每列的元素从上到下升序排列。

线性查找 + 二分查找

思路

如果熟悉二分查找,在看到标签时基本能想到解决方法,如果不熟悉,可以看一下我写的这篇博客——算法——二分查找。

很简单地就能想到,在二维矩阵中查找一个数可以在每行都使用一次二分查找,如果能查找到,就返回真,如果每行都查找完了还没找到,就返回假。也就是线性查找 + 二分查找

代码

class Solution {public boolean searchMatrix(int[][] matrix, int target) {for (int[] row : matrix) {int id = binarySearch(row, target);if (id != -1) {return true;}}return false;}private int binarySearch(int[] nums, int target) {int left = 0, right = nums.length - 1;while (left <= right) {int mid = left + (right - left >> 1);if (nums[mid] == target) {return mid;} else if (nums[mid] < target) {left = mid + 1;} else {right = mid - 1;}}return -1;}
}

官方题解的Z字形查找

思路

从第一行的最后一个元素开始比较,如果目标元素比一行的“最后一个”元素还大,又由于每行都是单调递增的,则说明目标元素不在这一行,所以去下一行查找;如果目标元素比一行的“最后一个”元素小,又由于每列都是单调递增的,则说明目标元素不在这一列,所以去上一列查找

给 最后一个 使用双引号的原因是:最后一个元素是用来划分无用区间的,而不是真实的最后一个元素。因为如果目标元素比某一列的某个元素小(假定它为第3行第2列的元素),则目标元素不可能是第>= 3行第>= 2列的元素。可以不用考虑目标元素是第< 3行第>= 2列的元素,因为目标元素能在第3行查找已经说明它不是第< 3行的任意元素了。

代码

class Solution {public boolean searchMatrix(int[][] matrix, int target) {int row = matrix.length, col = matrix[0].length;int r = 0, c = col - 1;while (r < row && c >= 0) {if (matrix[r][c] == target) {return true;} else if (matrix[r][c] < target) { // 目标元素比一行的“最后一个”元素还大r++; // 去下一行查找} else { // 目标元素比一行的“最后一个”元素小c--; // 去上一列查找}}return false;}
}

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

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

相关文章

Vue08-数据代理

一、Object.defineProperty() Object.defineProperty() 是 JavaScript 中的一个方法&#xff0c;用于直接在一个对象上定义一个新属性&#xff0c;或者修改一个对象的现有属性&#xff0c;并返回这个对象。 这个方法允许你精确地控制一个对象的属性&#xff0c;包括它的值、是…

1. 在Java中,为何枚举类型的比较推荐==而不是equals

开源项目SDK&#xff1a;https://github.com/mingyang66/spring-parent 个人文档&#xff1a;https://mingyang66.github.io/raccoon-docs/#/ 比较运算符和equals的区别 比较运算符是比较两个对象在内存中的引用&#xff0c;equals方法是比较两个对象的值是否相等。 枚举类型…

数据库存储过程和锁机制

存储过程 存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的&#xff0c;存储过程思想上很简单,就是数据库SQL语言层面的代码封装与有重用 …

找工作,你知道找你的是外包吗?这篇文章讲透各种外包、内包公司!

文章目录 一、传统外包公司二、软件厂商。三、内包如何选择?参考链接互联网上存在大量键盘侠,但多数缺乏对行业的深入了解,凭个人热情和经历妄下定论。为避免误导,现详细探讨市场上涉及“外包”的不同公司类型,希望能为大家提供帮助。 一、传统外包公司 首先是传统的外包…

Flutter开发效率提升1000%,Flutter Quick教程之对Widget进行删除,剪切,粘贴

一&#xff0c;删除操作 1&#xff0c;首先我们选中要删除的Widget。 2&#xff0c;在左边的侧边栏&#xff0c;点击删除按钮&#xff0c;即可完成对组件的删除操作。 二&#xff0c;剪切。剪切是相同的道理&#xff0c;都是先选中&#xff0c;再点击对应的按钮。 1&#xff…

C#朗读语音

最近有个需求&#xff0c;需要在C#程序发生异常时候&#xff0c;朗读文字&#xff0c;C#提供了.net framework可以提供简单的语音朗读功能。 引入依赖 using System.Media; using System.Speech.Synthesis; using System.Runtime.InteropServices; //报警音量 SystemSounds.…

【程序语言定义】

文章目录 一、程序语言的定义与分类1.程序语言的定义2.程序语言的分类低级语言高级语言 二、程序语言的组成1.语法&#xff08;Syntax&#xff09;2.语义&#xff08;Semantics&#xff09;3.实现&#xff08;Implementation&#xff09; 三、程序语言的发展历程早期的机器语言…

javaWeb4 Maven

Maven-管理和构建java项目的工具 基于POM的概念 1.依赖管理&#xff1a;管理项目依赖的jar包 &#xff0c;避免版本冲突 2.统一项目结构&#xff1a;比如统一eclipse IDEA等开发工具 3.项目构建&#xff1a;标准跨平台的自动化项目构建方式。有标准构建流程&#xff0c;能快速…

java 原生http服务器 测试JS前端ajax访问实现跨域传post数据

后端 java eclipse 字节流转字符 package Httpv3;import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer;import java.io.IOException; import java.i…

【全开源】JAVA打车小程序APP打车顺风车滴滴车跑腿源码微信小程序打车源码

&#xff1a;构建便捷出行新体验 一、引言&#xff1a;探索打车系统小程序源码的重要性 在数字化快速发展的今天&#xff0c;打车系统小程序已成为我们日常生活中不可或缺的一部分。它以其便捷、高效的特点&#xff0c;极大地改变了我们的出行方式。而背后的关键&#xff0c;…

for of 和 for in 的区别

for in适合遍历对象&#xff0c; for of适合遍历数组。 for in遍历的是数组的索引&#xff0c;对象的属性&#xff0c;以及原型链上的属性。 1.循环数组 区别一&#xff1a;for in 和 for of 都可以循环数组。for in 输出的是数组的index下标&#xff0c;而for of 输出的是数…

KOL+UGC:解锁品牌内容营销新策略,增强用户参与与互动

在当今数字化时代&#xff0c;品牌与受众之间的互动性和参与感变得至关重要。其中&#xff0c;KOL和UGC&#xff08;用户生成内容&#xff09;的结合&#xff0c;为品牌创造了一种全新的内容创作模式。这种模式不仅增强了内容的吸引力&#xff0c;还极大地提升了品牌与受众之间…

win键盘键位映射:欧版键盘->国内布局|是否应该买国外版笔记本?

最近买了个欧版笔记本电脑&#xff0c;键盘是欧版键盘&#xff1a; 键盘上的按钮实体和国内不完全一样键盘按钮上印的字母符号和国内不完全一样 具体差异 如图&#xff1a; shift处欧版是两个按键。可通过键盘键位映射解决。回车Enter、| 、布局不同。非常别扭&#xff0c;…

跨境反向海淘系统:业务流程解析与未来发展展望

随着全球化的深入发展和互联网技术的飞速进步&#xff0c;跨境购物已经成为越来越多消费者日常生活中的一部分。在这个过程中&#xff0c;反向海淘系统以其独特的优势&#xff0c;逐渐崭露头角&#xff0c;成为跨境电商领域的新星。作为一名在跨境反向海淘系统业务中耕耘了10年…

基于CycleGAN的图像风格转换

基于CycleGAN的图像风格转换 1.导入所需要的包和库&#xff1a;2.将一个Tensor转换为图像&#xff1a;3.数据加载&#xff1a;4.图像变换&#xff1a;5.加载和预处理训练数据&#xff1a;6.定义了一个残差块&#xff1a;7.生成器&#xff1a;8.判断器&#xff1a;9.数据缓存器&…

编写程序,提示用户输入以米/秒(m/s)为单位的速度v和以米/秒的平方(m/s)为单位的加速度 a,然后显示最短跑道长度。

(物理:求出跑道长度)假设一个飞机的加速度是a而起飞速度是v&#xff0c;那么可以使用下 面的公式计算出飞机起飞所需的最短跑道长度: 编写程序&#xff0c;提示用户输入以米/秒(m/s)为单位的速度v和以米/秒的平方(m/s)为单 位的加速度 a&#xff0c;然后显示最短跑道长度。下面…

LCM — Least Common Multiple 最小公倍数

因为任何一个数都可以表示为若干个质数幂的乘积。 比如75 3*5*5&#xff0c;即 2^0 * 3^1 * 5^2 * 7^0 ... 那么对于两个数来说&#xff0c;gcd就是他们取每个质数的较小幂的乘积&#xff0c;lcm则相反。显然&#xff0c;这些幂加起来就是他们乘积。 gcd(a,b) * lcm(a,b) a…

CorelDRAW2024发布更新啦!设计师们的得力助手

在数字化的今天&#xff0c;视觉设计已经成为我们生活中不可或缺的一部分。从手机界面到广告海报&#xff0c;从网页布局到包装设计&#xff0c;每一个细节都离不开设计师们的专业与创意。然而&#xff0c;面对日益增长的设计需求和不断提升的审美标准&#xff0c;许多设计师开…

【算法专题--栈】最小栈--高频面试题(图文详解,小白一看就会!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐解题方法--1 ⭐解题方法--2 四、总结 五、共勉 一、前言 最小栈这道题&#xff0c;可以说是--栈专题--&#xff0c;比较经典的一道题&#xff0c;也是在面试中频率较高的一道题目&#xff0c;通常在面试中&#xff0c;面试官可…

OpenAI发布GPT-4思维破解新策略,Ilya亦有贡献!

OpenAI正在研究如何破解GPT-4的思维&#xff0c;并公开了超级对齐团队的工作&#xff0c;Ilya Sutskever也在作者名单中。 论文地址&#xff1a;https://cdn.openai.com/papers/sparse-autoencoders.pdf 代码&#xff1a;https://github.com/openai/sparse_autoencoder 特征可…