当前位置: 首页 > news >正文

【刷题笔记】第三天

两道简单题

文章目录

      • [2923. 找到冠军 I](https://leetcode.cn/problems/find-champion-i/description/)
      • [3095. 或值至少 K 的最短子数组 I](https://leetcode.cn/problems/shortest-subarray-with-or-at-least-k-i/description/)

2923. 找到冠军 I

方法1:
如果 i 是冠军,那么 grid[i][j] == 1, 其中j!=i
所以我们遍历grid的每一行,假设是第i行,只要除第i列外,其他位置的元素都是1,则 i 就是冠军。
除了判断每一行,也可以判断每一列,只要这一列的所有元素都为0,说明没有队伍可以战胜该队伍。

class Solution {public int findChampion(int[][] grid) {for (int i = 0; i < grid.length; ++i) {boolean flag = true; // 记录是否决出了冠军for (int j = 0; j < grid[i].length; ++j) {if (j != i && grid[i][j] == 0) {flag = false; // j比i强,i不可能是冠军break;}}if (flag) {return i;}}return -1;}
}

时间复杂度 O ( n 2 ) O(n^2) O(n2)

方法2:擂主争霸

class Solution {public int findChampion(int[][] grid) {int champinon = 0; // 假设0是冠军int index = 1;int n = grid.length;while (index < n) {if (grid[index][champinon] == 1) {// index比champinon,所以冠军变为indexchampinon = index;}// 冠军变了,为什么index不需要从0开始?// 因为在1~index - 1都不能战胜原来的冠军,当然更战胜不了当前的冠军(当前的冠军战胜了原来的冠军)index++;}return champinon;}
}

时间复杂度 O(n)

3095. 或值至少 K 的最短子数组 I

3097. 或值至少为 K 的最短子数组 II
两道题区别只是数据规模不同

方法1:
暴力枚举每一个子数组

class Solution {public int minimumSubarrayLength(int[] nums, int k) {int ans = Integer.MAX_VALUE;for (int i = 0; i < nums.length; ++i) {int res = 0;for (int j = i; j < nums.length; ++j) {res |= nums[j];if (res >= k) {ans = Math.min(ans, j - i + 1);break;}}}return ans == Integer.MAX_VALUE ? -1 : ans;}
}

方法2:
遇到到子数组考虑以i结尾的子数组……
或的性质:越或,值越大或者不变,肯定不能变小。
考虑以i结尾的子数组,当i-1结尾的子数组的或值 |nums[i] ,就是i结尾的子数组的或值。
为了计算最短子数组的长度,在保存或值的同时,记录该或值对应的左端点位置。如果遇到相同的或值,就保留最大的左端点。

还有一些coding细节,例如如何利用一个list,动态的更新当前子数组的或值,下面代码用到了双指针思想。

class Solution {public int minimumSubarrayLength(int[] nums, int k) {// list中的元素按照左端点位置从小到大排序List<int[]> list = new ArrayList<>();// 保存以i结尾的子数组的{or值,对应的最大左端点}int n = nums.length;int ans = Integer.MAX_VALUE;for (int i = 0; i < n; ++i) {list.add(new int[]{0, i}); // 先占个位,不参与或运算// 此时,list是以i-1结尾的子数组的or值及其左端点位置int l = 0, r = 0;// 将list中的元素或上nums[i]for (; r < list.size(); ++r) {int[] cur = list.get(r);cur[0] |= nums[i];if (cur[0] >= k) {// 满足条件就收集结果ans = Math.min(ans, i - cur[1] + 1);}if (cur[0] == list.get(l)[0]) {// 有重复值,保留左端点最大的list.get(l)[1] = cur[1]; // 左端点更新为最大的} else {list.set(++l, cur); // 将l+1位置覆盖}}// 以i结尾的子数组对应的或值,其实是[0, l]范围,l之后的元素需要删除list.subList(l + 1, list.size()).clear();}return ans == Integer.MAX_VALUE ? -1 : ans;}
}

优化:list.subList(l + 1, list.size()).clear();这一行代码其实是比较耗时的,其实可以用一个变量记录有效值的长度。用二维数组保存子数组的或值和左端点位置

二维数组优化

class Solution {public int minimumSubarrayLength(int[] nums, int k) {// 为什么只需要开32长度的二维数组?// 注意题目中说了nums中的元素最大位int[][] list = new int[32][2]; // list[i][0]表示或值,list[i][1]表示对应的左端点位置int len = 0; // 记录list中的有效值int n = nums.length;int ans = Integer.MAX_VALUE;for (int i = 0; i < n; ++i) {list[len][0] = 0;list[len++] = i;int l = 0, r = 0;for (; r < len; ++r) {int[] cur = list[r];cur[0] |= nums[i];if (cur[0] >= k) {ans = Math.min(ans, i - cur[1] + 1);}if (cur[0] == list[l][0]) {list[l][1] = cur[1]; // 重复值} else {list[++l][0] = cur[0];list[l][1] = cur[1];}}len = l + 1; // 更新有效值的长度}return ans == Integer.MAX_VALUE ? -1 : ans;}
}

为什么只需要开辟32长度的二维数组?
nums[i] <= 1 0 9 10^9 109,而 2 29 < 1 0 9 < 2 30 2^{29} < 10^9<2^{30} 229<109<230,假设nums[i] = 1 0 9 10^9 109,其二进制位数也就31位。
由于或操作,可以使一位或者多位由0变为1,所以或值最多也就有31种,所以开辟32长度的二维数组,足以保存所有的或值。

相关文章:

【刷题笔记】第三天

两道简单题 文章目录 [2923. 找到冠军 I](https://leetcode.cn/problems/find-champion-i/description/)[3095. 或值至少 K 的最短子数组 I](https://leetcode.cn/problems/shortest-subarray-with-or-at-least-k-i/description/) 2923. 找到冠军 I 方法1&#xff1a; 如果 i …...

开源模型应用落地-LangChain试炼-CPU调用QWen1.5(一)

一、前言 尽管现在的大语言模型已经非常强大&#xff0c;可以解决许多问题&#xff0c;但在处理复杂情况时&#xff0c;仍然需要进行多个步骤或整合不同的流程才能达到最终的目标。然而&#xff0c;现在可以利用langchain来使得模型的应用变得更加直接和简单。 通过langchain框…...

STM32-模数转化器

ADC(Analog-to-Digital Converter) 指模数转换器。是指将连续变化的模拟信号转换 为离散的数字信号的器件。 ADC相关参数说明&#xff1a; 分辨率&#xff1a; 分辨率以二进制&#xff08;或十进制&#xff09;数的位数来表示&#xff0c;一般有 8 位、10 位、12 位、16 位…...

算法刷题记录2

4.图 4.1.被围绕的区域 思路&#xff1a;图中只有与边界上联通的O才不算是被X包围。因此本题就是从边界上的O开始递归&#xff0c;找与边界O联通的O&#xff0c;并标记为#&#xff08;代表已遍历&#xff09;&#xff0c;最后图中剩下的O就是&#xff1a;被X包围的O。图中所有…...

中国代工巨头旗下芯片公司遭网络攻击,千兆字节数据被泄露

近日&#xff0c;中国智能手机代工巨头闻泰科技旗下荷兰芯片制造商Nexperia发布声明&#xff0c;称其遭遇网络攻击&#xff0c;有未经授权的第三方访问了公司的 IT 服务器&#xff0c;目前已向相关部门报告了此次事件&#xff0c;并与网络安全专家合作开启调查。而据相关消息&a…...

【ARM 裸机】汇编 led 驱动之基本语法

我们要编写的是 ARM 汇编&#xff0c;编译使用的是 gcc 交叉编译器&#xff0c;所以要符合 GNU 语法。 1、汇编指令 汇编由一条条指令构成&#xff0c;ARM 不能直接访问存储器&#xff0c;比如 RAM 中的数据&#xff0c;I.MX6UL 中的寄存器就是 RAM 类型的&#xff0c;我们用…...

scala---基础核心知识(变量定义,数据类型,流程控制,方法定义,函数定义)

一、什么是scala Scala 是一种多范式的编程语言&#xff0c;其设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台&#xff08;Java虚拟机&#xff09;&#xff0c;并兼容现有的Java程序。 二、为什么要学习scala 1、优雅 2、速度快 3、能融合到hado…...

OSPF星型拓扑和MGRE全连

一&#xff0c;拓扑 二&#xff0c;要求 1&#xff0c;R6为ISP只能配置IP地址&#xff0c;R1-R5的环回为私有网段 2&#xff0c;R1/4/5为全连的MGRE结构&#xff0c;R1/2/3为星型的拓扑结构&#xff0c; 3&#xff0c;R1为中心站点所有私有网段可以互相通讯&#xff0c;私有网段…...

智能时代中的工业应用中前所未有的灵活桥接和I/O扩展功能解决方案MachXO2系列LCMXO2-1200HC-4TG100I FPGA可编程逻辑IC

lattice莱迪斯 MachXO2系列LCMXO2-1200HC-4TG100I超低密度FPGA现场可编程门阵列&#xff0c;适用于低成本的复杂系统控制和视频接口设计开发&#xff0c;满足了通信、计算、工业、消费电子和医疗市场所需的系统控制和接口应用。 瞬时启动&#xff0c;迅速实现控制——启动时间…...

php:实现压缩文件上传、解压、文件更名、压缩包删除功能

效果图 1.上传文件 2.压缩包文件 3.itemno1文件 或 4.上传到系统路径\ItemNo 5.更名后的itemno1文件(命名&#xff1a;当天日期六位随机数) 代码 <form action"<?php echo htmlspecialchars($_SERVER[PHP_SELF], ENT_QUOTES, UTF-8); ?>" methodpost en…...

【机器学习】科学库使用第5篇:Matplotlib,学习目标【附代码文档】

机器学习&#xff08;科学计算库&#xff09;完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;机器学习&#xff08;常用科学计算库的使用&#xff09;基础定位、目标&#xff0c;机器学习概述定位,目标,学习目标,学习目标,1 人工智能应用场景,2 人工智能小…...

Java面试八股文(JVM篇)(❤❤)

Java面试八股文_JVM篇 1、知识点汇总2、知识点详解&#xff1a;3、说说类加载与卸载11、说说Java对象创建过程12、知道类的生命周期吗&#xff1f;14、如何判断对象可以被回收&#xff1f;17、调优命令有哪些&#xff1f;18、常见调优工具有哪些20、你知道哪些JVM性能调优参数&…...

「51媒体」如何有效进行媒体邀约,提升宣传传播效果?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 进行有效的媒体邀约&#xff0c;提升宣传传播效果的关键在于策略性和专业性。以下是具体的做法&#xff1a; 明确目标&#xff1a;要确立清晰的品牌推广目标和策略&#xff0c;包括确定目…...

docker初始化进程

docker run --init 是一个 Docker 命令的选项&#xff0c;用于在容器中运行一个初始化进程&#xff08;通常是 tini&#xff09;。这个初始化进程负责处理一些 Unix 信号&#xff08;如 SIGTERM 和 SIGCHLD&#xff09;&#xff0c;并确保容器中的进程能够正确地被管理和清理。…...

基于快照行情的股票/基金 1分钟 K 线合成指南

1. 概述 由于不同交易所不同资产的交易规则是有差异的&#xff0c;导致不同交易所基于快照行情或逐笔成交合成不同资产1分钟 K 线的计算方法是不同的。 本教程旨在提高 DolphinDB 在具体业务场景下的落地效率&#xff0c;降低 DolphinDB 在实际业务使用中的开发难度。 本教程…...

新质生产力崛起:精益化能力助力企业转型升级

在智能制造、物联网、大数据、大模型、AI风起云涌的时代背景下&#xff0c;一个崭新的概念——“新质生产力”逐渐进入了人们的视野。这一热词不仅成为今年两会的讨论焦点&#xff0c;更代表了企业、国家乃至社会未来发展的核心动能。那么&#xff0c;什么是新质生产力&#xf…...

开发了一个在线客服系统

开发了一个在线客服系统 作为程序员&#xff0c;我一直在寻找能够提高工作效率和用户体验的方法。最近&#xff0c;我成功开发了一个在线客服系统&#xff0c;这个系统旨在帮助企业更高效地管理客户咨询和服务流程。 技术栈 我选择了以下的技术栈来构建这个系统&#xff1a;…...

cowa新的数据筛选代码

cowa新的数据筛选代码 代码地址&#xff1a; https://git.cowarobot.com/lhb/data_extracting 一阶段筛选 修改配置文件 config/common_stage.yamlversion: 3 services:de:image: harbor.cowarobot.cn/lhb/data:crpilot2.5-torch2.2environment:- CRPILOT_INSTALL_VERSIONx86…...

项目篇 | 图书管理系统 | 管理员模块 | 图书管理 | 删除

项目篇 | 图书管理系统 | 管理员模块 | 图书管理 | 删除 概述 图书管理页通过列表展示所有图书的相关信息,集成了搜索、添加、删除、修改的功能。 函数简介 // admin.h void delBook(); // 删除图书 void openDelBookMessage(); // 打开删除图书弹框 void closeDelBookMessa…...

自己动手封装axios通用方法并上传至私有npm仓库:详细步骤与实现指南

文章目录 一、构建方法1、api/request.js2、api/requestHandler.js3、api/index.js 二、测试方法1、api/axios.js2、main.js3、app.vue4、vue.config.js5、index.html 三、打包1、配置package.json2、生成库包3、配置发布信息4、发布 四、使用1、安装2、使用 五、维护1、维护和…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

什么是VR全景技术

VR全景技术&#xff0c;全称为虚拟现实全景技术&#xff0c;是通过计算机图像模拟生成三维空间中的虚拟世界&#xff0c;使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验&#xff0c;结合图文、3D、音视频等多媒体元素…...