每日力扣刷题day02(从零开始版)

news/2024/7/25 20:09:43/文章来源:https://blog.csdn.net/weixin_58808338/article/details/139160551

文章目录

    • 2024.5.23(5题)
      • 1929. 数组串联
        • 题解一
        • 题解二
      • 1281. 整数的各位积和之差
        • 题解一
        • 题解二
      • 1137. 第 N 个泰波那契数
        • 题解一
        • 题解二
      • 2413. 最小偶倍速
        • 题解一
        • 题解二
      • 2778. 特殊元素平方和
        • 题解一
        • 题解二

2024.5.23(5题)

1929. 数组串联

此题与昨天的1470.重新排练数组很像,一个是双指针从左边和中间交替赋值给新的,这个是赋值给新数组的左边和中间索引的位置

题目链接

给你一个长度为 n 的整数数组 nums 。请你构建一个长度为 2n 的答案数组 ans ,数组下标 从 0 开始计数 ,对于所有 0 <= i < ni ,满足下述所有要求:

  • ans[i] == nums[i]
  • ans[i + n] == nums[i]

具体而言,ans 由两个 nums 数组 串联 形成。

返回数组 ans

示例 1:

输入:nums = [1,2,1]
输出:[1,2,1,1,2,1]
解释:数组 ans 按下述方式形成:
- ans = [nums[0],nums[1],nums[2],nums[0],nums[1],nums[2]]
- ans = [1,2,1,1,2,1]

示例 2:

输入:nums = [1,3,2,1]
输出:[1,3,2,1,1,3,2,1]
解释:数组 ans 按下述方式形成:
- ans = [nums[0],nums[1],nums[2],nums[3],nums[0],nums[1],nums[2],nums[3]]
- ans = [1,3,2,1,1,3,2,1]

提示:

  • n == nums.length
  • 1 <= n <= 1000
  • 1 <= nums[i] <= 1000
题解一
class Solution {public int[] getConcatenation(int[] nums) {int n = nums.length;int[] ans = new int[2 * n];for (int i = 0; i < n; i++) {ans[i + n] = ans[i] = nums[i];}return ans;}
}
  • 要返回的数组中,前后两部分是一样的,同时赋值就行了
题解二
class Solution {public int[] getConcatenation(int[] nums) {int n = nums.length;int[] ans = Arrays.copyOf(nums, n*2);System.arraycopy(nums, 0, ans, n, n);return ans;}
}
  • 使用Arrays.copyOf方法创建了一个新数组ansArrays.copyOf方法的第一个参数是源数组nums,第二个参数是新数组的长度(这里是n * 2)。这个方法会复制源数组的元素到新数组中

  • 使用System.arraycopy方法将nums数组的一部分复制到ans数组的指定位置。

    System.arraycopy方法的参数依次为:

    • nums:源数组。

    • 0:源数组的起始位置(从索引0开始)。

    • ans:目标数组。

    • n:目标数组的起始位置(从索引n开始)。

    • n:要复制的元素数量。

1281. 整数的各位积和之差

题目关键在于如何取得整数的每一位上的数

题目链接

给你一个整数 n,请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。

示例 1:

输入:n = 234
输出:15 
解释:
各位数之积 = 2 * 3 * 4 = 24 
各位数之和 = 2 + 3 + 4 = 9 
结果 = 24 - 9 = 15

示例 2:

输入:n = 4421
输出:21
解释: 
各位数之积 = 4 * 4 * 2 * 1 = 32 
各位数之和 = 4 + 4 + 2 + 1 = 11 
结果 = 32 - 11 = 21

提示:

  • 1 <= n <= 10^5
题解一
class Solution {public int subtractProductAndSum(int n) {int sum = 0;int product = 1;int index = 0;while (n != 0) {index = n % 10;sum += index;product *= index;n /= 10;}return product - sum;}
}
  • 传过来的是一个整数,我们只要取得这个整数的每一位上的数就行了
  • 使用取余运算符(%)来计算整数n的最后一位数字。取余运算符返回除法运算的余数。n % 10 是获取整数n的个位数。
  • 使用除法赋值运算符(/=)将整数n除以10,并将结果赋值回n。整数除法会丢弃小数部分,只保留商的整数部分。作用是去掉整数n的最后一位数字。
题解二
class Solution {public int subtractProductAndSum(int n) {String[] digits = Integer.toString(n).split("");int product = 1;int sum = 0;for (String digit : digits) {int num = Integer.parseInt(digit);product *= num;sum += num;}return product - sum;}
}
  • 将整数n转换为字符串,然后使用split方法将字符串拆分为字符数组。每个字符表示一个数字。
  • 不推荐使用这个方法,更慢,并且毫无技巧。

1137. 第 N 个泰波那契数

此题是一个简单的动态规划题,题目给出了动态规划中最重要的转移方程,是动态规划的入门题

题目链接

泰波那契序列 Tn 定义如下:

T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2

给你整数 n,请返回第 n 个泰波那契数 Tn 的值。

示例 1:

输入:n = 4
输出:4
解释:
T_3 = 0 + 1 + 1 = 2
T_4 = 1 + 1 + 2 = 4

示例 2:

输入:n = 25
输出:1389537

提示:

  • 0 <= n <= 37
  • 答案保证是一个 32 位整数,即 answer <= 2^31 - 1
题解一
class Solution {int[] cache = new int[40];public int tribonacci(int n) {if (n == 0) return 0;if (n == 1 || n == 2) return 1;if (cache[n] != 0) return cache[n];cache[n] = tribonacci(n - 1) + tribonacci(n - 2) + tribonacci(n - 3); return cache[n];}
}
  • 跟经典的斐波那契数列一样,递归很好理解
  • 递归实现可以直接使用定义的递推关系,为了避免重复计算,需要用一个数组来存储已经计算过的结果(记忆化)。题目的数据范围是 [0,37],我们直接创建40的长度就够了。
题解二
class Solution {public int tribonacci(int n) {if (n == 0)return 0;if (n == 1 || n == 2)return 1;int prev3 = 0, prev2 = 1, prev1 = 1;int current = 0;for (int i = 3; i <= n; i++) {current = prev1 + prev2 + prev3;prev3 = prev2;prev2 = prev1;prev1 = current;}return current;}
}
  1. 初始条件
    • T0 = 0
    • T1 = 1
    • T2 = 1
  2. 转移方程
    • 对于 n >= 3,有 Tn = Tn-1 + Tn-2 + Tn-3
  3. 迭代过程
    • 从 T3 开始,依次计算每一个 Tn,直到计算到第 n 个泰波那契数。
    • 需要三个变量来存储前面三个数的值,逐步更新它们。

2413. 最小偶倍速

给出两个数的最小公倍数的通解

题目链接

给你一个正整数 n ,返回 2n 的最小公倍数(正整数)。

示例 1:

输入:n = 5
输出:10
解释:5 和 2 的最小公倍数是 10 。

示例 2:

输入:n = 6
输出:6
解释:6 和 2 的最小公倍数是 6 。注意数字会是它自身的倍数。

提示:

  • 1 <= n <= 150
题解一
class Solution {public int smallestEvenMultiple(int n) {return n % 2 == 0 ? n : n * 2;}
}
  • 如果 n 为偶数,那么 2 和 n 的最小公倍数就是 n 本身。否则,2 和 n 的最小公倍数就是 n×2。
题解二
public static int lcm(int a, int b) {return (a * b) / gcd(a, b);}public static int gcd(int a, int b) {while (b != 0) {int temp = b;b = a % b;a = temp;}return a;
}

要计算两个数的最小公倍数 (LCM),我们可以利用最大公约数 (GCD)。最小公倍数可以通过以下公式计算:
[ a , b ] = a b gcd ⁡ ( a , b ) [a, b] = \frac{ab}{\gcd(a, b)} [a,b]=gcd(a,b)ab
最大公约数 (GCD)求法:

  • gcd 方法使用欧几里得算法来计算两个数的最大公约数。
  • 通过不断取余数更新 a 和 b 的值,直到 b 为 0,此时 a 就是 GCD。

2778. 特殊元素平方和

两种解法,优化小技巧

题目链接

给你一个下标从 1 开始、长度为 n 的整数数组 nums

nums 中的元素 nums[i] 而言,如果 n 能够被 i 整除,即 n % i == 0 ,则认为 num[i] 是一个 特殊元素

返回 nums 中所有 特殊元素平方和

示例 1:

输入:nums = [1,2,3,4]
输出:21
解释:nums 中共有 3 个特殊元素:nums[1],因为 4 被 1 整除;nums[2],因为 4 被 2 整除;以及 nums[4],因为 4 被 4 整除。 
因此,nums 中所有特殊元素的平方和等于 nums[1] * nums[1] + nums[2] * nums[2] + nums[4] * nums[4] = 1 * 1 + 2 * 2 + 4 * 4 = 21 。  

示例 2:

输入:nums = [2,7,1,19,18,3]
输出:63
解释:nums 中共有 4 个特殊元素:nums[1],因为 6 被 1 整除;nums[2] ,因为 6 被 2 整除;nums[3],因为 6 被 3 整除;以及 nums[6],因为 6 被 6 整除。 
因此,nums 中所有特殊元素的平方和等于 nums[1] * nums[1] + nums[2] * nums[2] + nums[3] * nums[3] + nums[6] * nums[6] = 2 * 2 + 7 * 7 + 1 * 1 + 3 * 3 = 63 。 

提示:

  • 1 <= nums.length == n <= 50
  • 1 <= nums[i] <= 50
题解一
class Solution {public int sumOfSquares(int[] nums) {int n = nums.length;int ans = 0;for (int i = 0; i < n; i++) {if (n % (i + 1) == 0) {ans += nums[i] * nums[i];}}return ans;}
}
  • 遍历一遍,根据题目要求加一个 if 就行了
  • 注意的是,数组的下标从 1 开始,取余的时候给 i + 1 就好了
题解二
class Solution {
public int sumOfSquares(int[] nums) {int n = nums.length;int ans = 0;for (int i = 1; i * i <= n; i++) {if (n % i == 0) {ans += nums[i - 1] * nums[i - 1];if (i != n / i) {ans += nums[(n / i) - 1] * nums[(n / i) - 1];}}}return ans;}
}
  • 当 i 是 n 的因子,那么 n / i 也是 n 的因子,只需要遍历 √n 之内的就可以了

    对于一个正整数 𝑛,其因子成对出现。如果 𝑖 是 𝑛 的因子,那么 𝑛 / 𝑖 也是 𝑛 的因子。

    例如,对于 𝑛=36:

    • 因子对包括 (1, 36)、(2, 18)、(3, 12)、(4, 9)、(6, 6)。

    这些因子对的特征是:每对因子中的一个数小于或等于 𝑛,另一个数大于或等于 𝑛。当 𝑖 增加到超过 𝑛 时,相应的因子对中的较大数已经被包含在前面的较小数中,因此没有必要再检查大于 𝑛 的数。

  • 相比题解一,这个时间复杂度为O(√n)

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

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

相关文章

17- PHP 开发-个人博客项目TP 框架路由访问安全写法历史漏 洞

常见的php框架&#xff1a;laravel和thinkphp和yii 这里以thinkphp为例 thinkphp目录访问设置 这里只找到了这个3.多的源代码&#xff0c;没找点5.的&#xff0c;凑合一下 链接&#xff1a;GitHub - top-think/thinkphp: ThinkPHP3.2 ——基于PHP5的简单快速的面向对象的PHP…

RPC 框架

RPC 全称 Remote Procedure Call——远程过程调用。 RPC技术简单说就是为了解决远程调用服务的一种技术&#xff0c;使得调用者像调用本地服务一样方便透明。RPC是一种通过网络从远程计算机程序上请求服务&#xff0c;不需要了解底层网络技术的协议。 集群和分布式 集群&…

GIGE 协议摘录

系列文章目录 GIGE 学习笔记 GIGE 协议摘录 文章目录 系列文章目录引言第 1 章 设备发现1.1 链路选择1.1.1 单链路配置1.1.2 多链路配置1.1.3 链路聚合组配置 LAG 1.2 IP配置1.2.1 协议选择1.2.2 静态IP1.2.3 DHCP1.2.4 链接本地地址 LLA 1.3 设备枚举1.3.1 GVCP设备发现 引言 …

832. 翻转图像 - 力扣

1. 题目 给定一个 n x n 的二进制矩阵 image &#xff0c;先 水平 翻转图像&#xff0c;然后 反转 图像并返回 结果 。 水平翻转图片就是将图片的每一行都进行翻转&#xff0c;即逆序。 例如&#xff0c;水平翻转 [1,1,0] 的结果是 [0,1,1]。 反转图片的意思是图片中的 0 全部被…

【前端】XML和HTML的区别详解

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

【设计模式深度剖析】【1】【结构型】【代理模式】| 玩游戏打怪、升级为例加深理解

&#x1f448;️上一篇:创建型设计模式对比 | 下一篇:装饰器模式&#x1f449;️ 目 录 代理模式定义英文原话直译如何理解&#xff1f; 3个角色UML类图1. 抽象主题&#xff08;Subject&#xff09;角色2. 代理类&#xff1a;代理主题&#xff08;Proxy Subject&#xff0…

【图神经网络——GATv2】

图神经网络——GATV2 GATV2GATV2代码实现&#xff1a;GATV2在MUTAG数据集上的应用&#xff1a;任务&#xff1a;推断分子是否抑制HIV病毒复制 GATV2 GATV2 &#xff1f; 什么是GATV2呢&#xff1f; 相比较于GAT 有什么区别呢&#xff1f; GAT&#xff1a;使用的是固定的注意力机…

将本地项目上传到 gitee 仓库

1、创建 gitee 仓库 到 gitee 官网&#xff0c;新建仓库 配置新建仓库 完成仓库的创建 项目上传到仓库 上传项目需要安装git git官方下载地址&#xff1a;git下载地址 安装完成&#xff0c;前往本地项目所在文件夹&#xff0c;右击选择 Git Bash Here 刚下载完成需要配置G…

java面试(多线程)

线程和进程的区别 程序由指令和数据组成&#xff0c;但这些指令要运行&#xff0c;数据要读写&#xff0c;就必须将指令加载至CPU&#xff0c;数据加载至内存。在指令运行过程中还需要用到磁盘&#xff0c;网络等设备。进程就是用来加载指令&#xff0c;管理内存&#xff0c;管…

vue3主题切换按钮与功能实现

代码: <template><div class"slideThree"><label class"theme-switch"><inputtype"checkbox"class"checkbox"v-model"isChecked"change"setTheme"id"slideThree"name"check…

埃文科技携数据要素产品亮相第七届数字中国建设峰会

第七届数字中国建设峰会&#xff08;以下简称“峰会”&#xff09;于2024年5月24日至25日在福建省福州市举办。此次峰会是国家数据工作体系优化调整后举办的首次数字中国建设峰会。本届峰会由国家发展改革委、国家数据局、国家网信办、科技部、国务院国资委、福建省人民政府共同…

【MATLAB】基于VMD-SSA-GRU的回归预测模型

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 1 基本定义 基于VMD-SSA-GRU的回归预测模型是一种集成了变分模态分解&#xff08;VMD&#xff09;、同步滑动平均&#xff08;SSA&#xff09;和门控循环单元&#xff08;GRU&#xff09;的复杂时间序列预测方法。下面将…

leetcode 530.二叉搜索树的最小绝对差 、501.二叉搜索树中的众数 、236. 二叉树的最近公共祖先

leetcode 530.二叉搜索树的最小绝对差 、501.二叉搜索树中的众数 、236. 二叉树的最近公共祖先 leetcode 530.二叉搜索树的最小绝对差 题目链接&#xff1a;https://leetcode.cn/problems/maximum-binary-tree/description/ 题目&#xff1a; 给你一个二叉搜索树的根节点 r…

BUUCTF-misc刷题

被嗅探的流量1 用wireshark打开附件&#xff0c;Ctrlf&#xff0c;然后搜索flag&#xff0c;我们在这么多数据包中搜索带有flag字符的 然后第一个包中上传了一个名叫flag的.jpg文件 然后直接ctrlf&#xff0c;搜索flag{ 得到flag&#xff1a;flag{da73d88936010da1eeeb36e945e…

php 连接sqlserver步骤

1.首先要确定使用的是sqlserver的哪个版本&#xff0c;比如sqlserver2012 2.确定服务器是64位还是32位的 3.确认一下使用php的哪个版本&#xff0c;比如php7.1 SQL Server 的 Microsoft PHP 驱动程序 Microsoft Drivers for PHP 支持矩阵 - PHP drivers for SQL Server | Mi…

香橙派Kunpeng Pro深度测评:开发者的新选择

文章目录 前言&#xff1a;一、开发板外观与介绍1.接口介绍2.按键以及LED的介绍 二、开发板上电以及系统启动三、更新安装相关命令四、查看相关配置五、vim个性化配置六、开发板网络测试1.网口测试&#xff1a;2.WiFi模块测试&#xff1a; 七、扩展引脚功能测试1.TFTP传输文件2…

C++---运算符重载

运算符重载介绍 在类中重新定义运算符&#xff0c;赋予运算符新的功能以适应类的运算&#xff0c;就称为运算符重载。 运算符重载是一种形式的C多态,它使得对象操作更直观,本质上也是属于函数重载。 实际上&#xff0c;我们已经在不知不觉之中使用了运算符重载。例如&#xff…

spark的简单学习一

一 RDD 1.1 RDD的概述 1.RDD&#xff08;Resilient Distributed Dataset&#xff0c;弹性分布式数据集&#xff09;是Apache Spark中的一个核心概念。它是Spark中用于表示不可变、可分区、里面的元素可并行计算的集合。RDD提供了一种高度受限的共享内存模型&#xff0c;即RD…

如何基于springboot构建cas最新版源码?

环境准备 下载JDK21 https://download.oracle.com/java/21/archive/jdk-21.0.2_windows-x64_bin.zip下载gradle 8.5并配置环境变量 https://gradle.org/next-steps/?version8.5&formatbin下载项目git clone http://gitlab.ruishan.cc/meta/anka-authentication.git 开始…

【CSP CCF记录】201909-1 小明种苹果

题目 过程 #include<bits/stdc.h> using namespace std; int N,M; long long tree[1010]; int main() {cin>>N>>M;long long result0,max0;//result剩余苹果&#xff0c;max最大疏果个数 int id0;//id最大疏果的果树编号 for(int i1;i<N;i){long long b0…