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

力扣hot100-普通数组

文章目录

    • 题目:最大子数组和
      • 方法1 动态规划
      • 方法2
    • 题目:合并区间
      • 题解
    • 题目:轮转数组
      • 方法1-使用额外的数组
      • 方法2-三次反转数组
    • 题目:除自身以外数组的乘积
      • 方法1-用到了除法
      • 方法2-前后缀乘积法

题目:最大子数组和

原题链接:最大子数组和
在这里插入图片描述

方法1 动态规划

public class T53 {//动态规划public static int maxSubArray(int[] nums) {if (nums.length == 0) return 0;int[] dp = new int[nums.length]; // dp[i] 表示以 nums[i] 结尾的最大子数组和dp[0] = nums[0]; // 初始化状态int res = dp[0]; // 初始化最大子数组和// 动态规划状态转移for (int i = 1; i < nums.length; i++) {dp[i] = Math.max(nums[i], dp[i - 1] + nums[i]);  //状态转移方程res = Math.max(res, dp[i]);}return res;}public static void main(String[] args) {int[] nums = {-2, 1, -3, 4, -1, 2, 1, -5, 4};System.out.println(maxSubArray(nums)); // 输出: 6}
}

方法2

方法二可能不容易想到

public class T53 {public int maxSubArray(int[] nums) {// 初始化为int类型最小值int res = nums[0];int tempTotal = 0;for (int i = 0; i < nums.length; i++) {tempTotal += nums[i];// 记录最大数值res = Math.max(tempTotal, res);if (tempTotal < 0) {// 如果和小于0,就重置为0,因为任何数加上一个负数一定小于当前数值tempTotal = 0;  //0加任何数都等于任何数}}return res;}public static void main(String[] args) {int[] nums = {-2, 1, -3, 4, -1, 2, 1, -5, 4};System.out.println(maxSubArray(nums)); // 输出: 6}
}

题目:合并区间

原题链接:合并区间
在这里插入图片描述

题解

    public static int[][] merge(int[][] intervals) {if (intervals.length == 0) {return new int[0][2];}// 可使用Lambda表达式Arrays.sort(intervals, new Comparator<int[]>() {@Overridepublic int compare(int[] interval1, int[] interval2) {return interval1[0]-interval2[0];}});List<int[]> merged = new ArrayList<>();for (int[] interval : intervals) {int L = interval[0], R = interval[1];// 如果merged列表为空,或者当前区间与上一个区间不重叠,直接添加当前区间if (merged.isEmpty() || merged.get(merged.size() - 1)[1] < L) {merged.add(new int[]{L, R});} else {// 否则更新上一个区间的右边界merged.get(merged.size() - 1)[1] = Math.max(merged.get(merged.size() - 1)[1], R);}}//List.toArray(T[] a) 方法将列表中的所有元素存储到指定类型的数组中return merged.toArray(new int[merged.size()][]);}

核心:
如果新区间的起始值大于 merged 列表中最后一个区间的结束值,则直接将新的区间添加到 merged 列表中;否则,更新 merged 列表中最后一个区间的结束值。

  • 排序区间: 确保区间按照起始值从小到大排列,方便后续合并操作。
  • 遍历和合并: 遍历排序后的区间数组,使用一个 merged 列表来存储合并后的区间。如果当前区间与前一个区间不重叠,直接添加到 merged 列表;如果重叠,更新 merged 列表中最后一个区间的结束值。

题目:轮转数组

原题链接:轮转数组
在这里插入图片描述

方法1-使用额外的数组

方法1是自己写出来的。方法2参考的别人的,方法2太👍了,不易发现这个规律

    public static void rotate(int[] nums, int k) {int[] temp = new int[nums.length];int j = 0;k = k % nums.length; // 数组长度大于k时,旋转次数取余---关键for (int i = nums.length - k; i < nums.length; i++) {temp[j++] = nums[i];}for (int i = 0; i < nums.length - k; i++) {temp[j++] = nums[i];}System.arraycopy(temp, 0, nums, 0, nums.length);}

方法2-三次反转数组

    private static void reverse(int[] nums, int start, int end) {while (start < end) {int temp = nums[start];nums[start] = nums[end];nums[end] = temp;start++;end--;}}public static void rotate1(int[] nums, int k) {k = k % nums.length;  reverse(nums, 0, nums.length - 1);reverse(nums, 0, k - 1);reverse(nums, k, nums.length - 1);}

题目:除自身以外数组的乘积

原题链接:除自身以外数组的乘积
在这里插入图片描述

方法1-用到了除法

当时没看题目中不让用除法,当时一下就想到这个思路了,哈哈哈

    public static int[] productExceptSelf(int[] nums) {int temp = 1;int zero = 0;// 先看数组中0的个数  大于1则结果数组全为0  等于1则结果数组中0的位置为其他元素乘积for (int num : nums) {if (num != 0) {temp *= num;} else {zero++;if (zero > 1) return new int[nums.length];}}List<Integer> res = new ArrayList<>();for (int num : nums) {if (zero == 1) {//num==0 则当前结果数组该位置的结果为其他元素乘积res.add(num == 0 ? temp : 0);} else {res.add(temp / num);}}return res.stream().mapToInt(Integer::intValue).toArray();}

方法2-前后缀乘积法

方法2使用两次遍历分别计算数组元素左边右边的乘积,从而构建出结果数组

    public static int[] productExceptSelf1(int[] nums) {int n = nums.length;int[] res = new int[n];// 第一次遍历,计算左边所有元素的乘积res[0] = 1;for (int i = 1; i < n; i++) {res[i] = res[i - 1] * nums[i - 1];}// 第二次遍历,计算右边所有元素的乘积,并更新结果数组int right = 1;for (int i = n - 1; i >= 0; i--) {res[i] *= right; //res[i]是当前i左边元素全部乘积right *= nums[i]; //用一个变量记录当前元素右边的所有元素乘积}return res;}

❤觉得有用的可以留个关注~~❤

相关文章:

力扣hot100-普通数组

文章目录 题目&#xff1a;最大子数组和方法1 动态规划方法2 题目&#xff1a;合并区间题解 题目&#xff1a;轮转数组方法1-使用额外的数组方法2-三次反转数组 题目&#xff1a;除自身以外数组的乘积方法1-用到了除法方法2-前后缀乘积法 题目&#xff1a;最大子数组和 原题链…...

深入浅出Transformer:大语言模型的核心技术

引言 随着自然语言处理&#xff08;NLP&#xff09;领域的不断发展&#xff0c;Transformer模型逐渐成为现代大语言模型的核心技术。无论是BERT、GPT系列&#xff0c;还是最近的T5和Transformer-XL&#xff0c;这些模型的背后都离不开Transformer架构。本文将详细介绍Transfor…...

MacOS隐藏文件打开指南

MacOS隐藏文件打开指南 方法一&#xff1a; 直接按下键盘上的【commandshift.】,这时候就可以在mac系统中就会自动显示隐藏的文件夹了 方法二&#xff1a; 在终端查看 ls -la...

grafana数据展示

目录 一、安装步骤 二、如何添加喜欢的界面 三、自动添加注册客户端主机 一、安装步骤 启动成功后 可以查看端口3000是否启动 如果启动了就在浏览器输入IP地址&#xff1a;3000 账号密码默认是admin 然后点击 log in 第一次会让你修改密码 根据自定义密码然后就能登录到界面…...

53-4 内网代理6 - frp搭建三层代理

前提:53-3 内网代理5 - frp搭建二级代理-CSDN博客 三级网络代理 在办公区入侵后,发现需要进一步渗透核心区网络(192.168.60.0/24),并登录域控制器的远程桌面。使用FRP在EDMZ区、办公区与核心区之间建立三级网络的SOCKS5代理,以便访问核心区的域控制器。 VPS上的FRP服…...

SQLite 命令行客户端 + HTA 实现简易UI

SQLite 命令行客户端 HTA 实现简易UI SQLite 客户端.hta目录结构参考资料 仅用于探索可行性&#xff0c;就只实现了 SELECT。 SQLite 客户端.hta <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"text/html; cha…...

TikTok小店推出“百万英镑俱乐部”,实力宠卖家!

TikTok Shop近期在英国市场重磅推出了“百万英镑俱乐部”激励计划&#xff0c;这一举措旨在通过一系列诱人福利&#xff0c;助力商家在TikTok平台上实现销售飞跃。该计划不仅彰显了TikTok Shop对于商家成长的深切关怀&#xff0c;更以实际行动诠释了“实力宠卖家”的承诺。 我…...

路径规划 | 基于蚁群算法的三维无人机航迹规划(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 基于蚁群算法的三维无人机航迹规划&#xff08;Matlab&#xff09;。 蚁群算法&#xff08;Ant Colony Optimization&#xff0c;ACO&#xff09;是一种模拟蚂蚁觅食行为的启发式算法。该算法通过模拟蚂蚁在寻找食物时…...

.Net C#执行JavaScript脚本

文章目录 前言一、安装二、执行 JavaScript 脚本三、与脚本交互四、JS 调用 C# 方法五、多线程使用总结 前言 ClearScript 是一个 .NET 平台下的开源库&#xff0c;用于在 C# 和其他 .NET 语言中执行脚本代码。它提供了一种方便和安全的方法来将脚本与应用程序集成&#xff0c;…...

企业应对策略:全面防御.DevicData-P-xxxxxx勒索病毒

引言 在数字化时代&#xff0c;网络安全已成为不可忽视的重要议题。随着互联网的普及&#xff0c;各种网络威胁层出不穷&#xff0c;其中勒索病毒以其独特的攻击方式和巨大的破坏性&#xff0c;给个人用户和企业带来了严重的经济损失和数据安全风险。在众多勒索病毒中&#xff…...

记一次mysql导出到达梦数据库

DM8管理工具 DM管理工具&#xff08;官方&#xff09;DBeaver - jdbc驱动 MySql迁移到DM8 使用官方DM数据迁移工具 新建迁移工程选择MySQL>DM填写mysql连接信息、添加dm连接信息执行 DM8数据脚本制作过程 使用DM管理工具 导出全部&#xff1a;进入对应模式>表>选…...

2024年高压电工证考试题库及高压电工试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年高压电工证考试题库及高压电工试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大纲随机出的高压…...

完美解决ImportError: cannot import name ‘idnadata‘的正确解决方法,亲测有效!!!

完美解决ImportError: cannot import name idnadata’的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 亲测有效 完美解决ImportError: cannot import name idnadata的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01;报错问题…...

完美解决windows开机时,系统提示此windows副本不是正版的正确解决方法,亲测有效!!!

完美解决windows开机时&#xff0c;系统提示此windows副本不是正版的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 亲测有效 完美解决windows开机时&#xff0c;系统提示此windows副本不是正版的正确解决方法&#xff0c;亲测有效&#xff01;&#…...

树莓派采集系统

树莓派&#xff08;Raspberry Pi&#xff09;是一款非常受欢迎的小型单板计算机&#xff0c;因其低成本、低功耗以及丰富的I/O接口&#xff0c;非常适合用来搭建数据采集系统。无论是环境监测、智能家居、工业自动化&#xff0c;还是科学实验&#xff0c;树莓派都能胜任。以下是…...

ListView

效果图 1、在activity_main.xml中创建ListView&#xff0c;再创建list_item.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match…...

gptoolbox matlab工具箱cmake 调试笔记

一、问题描述 起因&#xff1a;在matlab中运行Offset surface of triangle mesh in matlab的时候报错&#xff1a; 不支持将脚本 signed_distance 作为函数执行: E:\MATLAB_File\gptoolbox\mex\signed_distance.m> 出错 offset_bunny (第 22 行) D signed_distance(BC,V,F…...

Python面试题:请编写一个函数,计算一个字符串中每个字符的出现频率

当然&#xff0c;可以通过使用 Python 编写一个函数来计算字符串中每个字符的出现频率。下面是一个示例函数&#xff1a; def char_frequency(s):"""计算字符串中每个字符的出现频率参数:s (str): 输入字符串返回:dict: 一个字典&#xff0c;其中键是字符&…...

MacOS如何切换shell类型

切换 shell 类型 如果你想在不同的 shell 之间切换&#xff0c;以探索它们的不同之处&#xff0c;或者因为你知道自己需要其中的一个或另一个&#xff0c;可以使用如下命令&#xff1a; 切换到 bash chsh -s $(which bash)切换到 zsh chsh -s $(which zsh)$()语法的作用是运…...

Qt QSettings 使用详解:跨平台的配置管理

文章目录 Qt QSettings 使用详解:跨平台的配置管理一、QSettings 概述1. QSettings 的基本使用二、不同平台上的实现1. Windows 平台注册表存储INI 文件存储2. Linux 平台3. macOS 平台三、QSettings 高级用法1. 使用组管理设置2. 检查和移除设置3. 枚举键四、总结Qt QSetting…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...