LeetCode 2562. 找出数组的串联值【数组,相向双指针】1259

news2024/11/19 6:20:47

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章中,我不仅会讲解多种解题思路及其优化,还会用多种编程语言实现题解,涉及到通用解法时更将归纳总结出相应的算法模板。

为了方便在PC上运行调试、分享代码文件,我还建立了相关的仓库:https://github.com/memcpy0/LeetCode-Conquest。在这一仓库中,你不仅可以看到LeetCode原题链接、题解代码、题解文章链接、同类题目归纳、通用解法总结等,还可以看到原题出现频率和相关企业等重要信息。如果有其他优选题解,还可以一同分享给他人。

由于本系列文章的内容随时可能发生更新变动,欢迎关注和收藏征服LeetCode系列文章目录一文以作备忘。


给你一个下标从 0 开始的整数数组 nums 。

现定义两个数字的 串联 是由这两个数值串联起来形成的新数字。

  • 例如,15 和 49 的串联是 1549 。

nums 的 串联值 最初等于 0 。执行下述操作直到 nums 变为空:

  • 如果 nums 中存在不止一个数字,分别选中 nums 中的第一个元素和最后一个元素,将二者串联得到的值加到 nums 的 串联值 上,然后从 nums 中删除第一个和最后一个元素。
  • 如果仅存在一个元素,则将该元素的值加到 nums 的串联值上,然后删除这个元素。

返回执行完所有操作后 nums 的串联值。

示例 1:

输入:nums = [7,52,2,4]
输出:596
解释:在执行任一步操作前,nums 为 [7,52,2,4] ,串联值为 0- 在第一步操作中:
我们选中第一个元素 7 和最后一个元素 4 。
二者的串联是 74 ,将其加到串联值上,所以串联值等于 74 。
接着我们从 nums 中移除这两个元素,所以 nums 变为 [52,2]- 在第二步操作中: 
我们选中第一个元素 52 和最后一个元素 2 。 
二者的串联是 522 ,将其加到串联值上,所以串联值等于 596 。
接着我们从 nums 中移除这两个元素,所以 nums 变为空。
由于串联值等于 596 ,所以答案就是 596

示例 2:

输入:nums = [5,14,13,8,12]
输出:673
解释:在执行任一步操作前,nums 为 [5,14,13,8,12] ,串联值为 0- 在第一步操作中: 
我们选中第一个元素 5 和最后一个元素 12 。 
二者的串联是 512 ,将其加到串联值上,所以串联值等于 512 。 
接着我们从 nums 中移除这两个元素,所以 nums 变为 [14,13,8]- 在第二步操作中:
我们选中第一个元素 14 和最后一个元素 8 。
二者的串联是 148 ,将其加到串联值上,所以串联值等于 660 。
接着我们从 nums 中移除这两个元素,所以 nums 变为 [13]- 在第三步操作中:
nums 只有一个元素,所以我们选中 13 并将其加到串联值上,所以串联值等于 673 。
接着我们从 nums 中移除这个元素,所以 nums 变为空。 
由于串联值等于 673 ,所以答案就是 673

提示:

  • 1 <= nums.length <= 1000
  • 1 <= nums[i] <= 10^4

解法 相向双指针

使用了库函数 to_string 的情况如下,注意最后只剩一个元素的情况。

class Solution {
public:
    long long findTheArrayConcVal(vector<int>& nums) {
        int n = nums.size();
        long long ans = 0;
        for (int i = 0, j = n - 1; i < j; ++i, --j) {
            ans += (long long) stoll(to_string(nums[i]) + to_string(nums[j]));
        }
        if (n & 1) ans += (long long) nums[n / 2];
        return ans;
    }
};

如果不使用库函数,我们可以得到一个 O ( 1 ) O(1) O(1) 空间的写法。由于每次操作都是取出 n u m s nums nums 的第一个元素和最后一个元素串联,所以相向双指针模拟即可。例如 x = 15 , y = 49 x=15,y = 49 x=15,y=49 串联,结果等于 x ⋅ 1 0 2 + y = 1549 x\cdot {10^2} + y=1549 x102+y=1549 。我们可以把 y y y 不断除 10 10 10 ,来知道 x x x 要乘上 10 10 10 的多少次方。

class Solution {
public:
    long long findTheArrayConcVal(vector<int>& nums) {
        int n = nums.size();
        long long ans = 0;
        for (int i = 0, j = n - 1; i < j; ++i, --j) {
            int x = nums[i], y = nums[j];
            while (y) {
                x *= 10; 
                y /= 10;
            }
            ans += x + nums[j];
        }
        if (n & 1) ans += (long long) nums[n / 2];
        return ans;
    }
};

复杂度分析:

  • 时间复杂度: O ( n log ⁡ U ) O(n\log U) O(nlogU) U U U 为最大的数字的位数。
  • 空间复杂度: O ( 1 ) O(1) O(1)

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

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

相关文章

电子笔记真的好用吗?手机上适合记录学习笔记的工具

提及笔记&#xff0c;不少人都会和学习挂钩&#xff0c;的确学习过程中我们经常会遇到很多难题&#xff0c;而经常记录笔记可以有效地帮助大家记住很多知识&#xff0c;而且时常拿出笔记查看一下&#xff0c;可方便巩固过去学习的知识。 手机作为大家日常随身携带的工具&#…

golang 拉取 bitbucket.org 私有库

以 bitbucket.org 平台和mac电脑为例 前置条件私库需要给你账号权限&#xff0c;可拉取的权限&#xff0c;否则无法进行正常拉取 我们采用ssh方式&#xff0c;需要在本地生成对应的 rsa 的公钥和私钥&#xff0c;将公钥配置如下图&#xff1a; 在 .ssh/config 写入你的配置 H…

工业环网交换机运行原理

在智能制造领域&#xff0c;工业环网交换机是一种必不可少的网络设备。该技术通过将各种工业设备、传感器和机器人连接到同一网络中&#xff0c;实现了高效的数据传输和快速的信息交流。在本文中&#xff0c;我们将讨论工业环网交换机的运行原理&#xff0c;以帮助您更好地了解…

文心一言 VS 讯飞星火 VS chatgpt (112)-- 算法导论10.2 3题

三、用go语言&#xff0c;用一个单链表L实现一个队列。要求操作 ENQUEUE 和 DEQUEUE 的运行时间仍为O(1)。 文心一言&#xff1a; 在 Go 语言中&#xff0c;使用单链表实现队列的操作&#xff0c;包括入队&#xff08;ENQUEUE&#xff09;和出队&#xff08;DEQUEUE&#xff…

练习之C++[2]

文章目录 1.栈和堆2.new和delete3.内存区域 1.栈和堆 对于栈来讲&#xff0c;生长方向是向下的&#xff0c;也就是向着内存地址减小的方向&#xff1b;对于堆来讲&#xff0c;它的生长方向是向上的&#xff0c;是向着内存地址增加的方向增长.栈区先定义的变量放到栈底&#xf…

官宣!联诚发与康冠科技达成战略合作,全面布局文旅演艺领域!

2023年10月11日&#xff0c;康冠科技&#xff08;股票代码&#xff1a;001308&#xff09;与联诚发LCF签约仪式在联诚发LCF深圳总部顺利举行&#xff0c;双方正式建立战略合作伙伴关系&#xff0c;并将基于自身优势&#xff0c;围绕文旅演艺、XR虚拟拍摄、5G8K、舞台租赁等领域…

基于Springboot实现校园疫情登记防控系统项目【项目源码+论文说明】

基于Springboot实现校园疫情登记平台系统演示 摘要 2019年12月19号中国武汉发生第一例新冠病毒的到来&#xff0c;大家都在听从政府的号召在居家隔离&#xff0c;不管是在城市还是在乡镇、农村&#xff0c;这引起我的注目&#xff0c;设计一套校园疫情防控系统&#xff0c;疫情…

LiveGBS流媒体平台GB/T28181功能-国标流媒体服务同时兼容内网收流外网收流多网段设备收流

LiveGBS流媒体平台GB/T28181功能-国标流媒体服务同时兼容内网收流外网收流多网段设备收流 1、背景2、设备接入播放2.1、查看通道2.2、直播播放 3、默认收流地址配置4、其它网络设备收流配置5、搭建GB28181视频直播平台 1、背景 服务器部署的时候&#xff0c;可能有多个网卡多个…

小程序使用uni.createAnimation只执行一次的问题

思路&#xff1a; 在页面创建的时候&#xff0c;创建一个临时动画对象调用 step() 来表示一组动画完成通过动画实例的export方法导出动画数据传递给组件的animation属性还原动画页面卸载的时候&#xff0c;清除动画数据 <template><view class"content"&g…

JavaScript-前端环境搭建-nodejs-打包分发-Webstorm-vue安装创建

文章目录 1.Node环境安装2.Node环境配置3.新建项目4.安装常用包4.1.vue安装4.2.安装webpack 5.总结 Web大前端技术&#xff0c;是一项使用范围非常广泛的技术&#xff0c;以JavaScript脚本语言为主使用&#xff0c;由于其本身开源的特点&#xff0c;可以使用的轮子非常的多&…

“数字支付龙头”汇付天下:以CRM为起点建设业务全流程数字化

数字化时代商业瞬息万变&#xff0c;技术日新月异&#xff0c;如何能快速打通场景支付和数据&#xff0c;构筑私域流量&#xff0c;强化营销能力&#xff0c;降低运营成本&#xff0c;实现全链路数字化增长&#xff0c;CRM系统的应用是不可或缺的关键环节。 成立于2006年6月&a…

proteus仿真大赛-----pyqt5制作上位机安防页面

本项目是基于pyqt5进行上位机的开发&#xff0c;主要是向下位机发送控制指令以及向服务器发送信息 主页面如图所示&#xff1a; 1.主页面是继承QMainWindow&#xff0c;使用QPushButton设置四个按钮&#xff0c;分别使用信号与槽机制连接不同的方法&#xff0c;然后使用setStyl…

安装Mycat-web

Mycat-web是一个用于管理Mycat数据库中间件的Web控制台。Mycat是一个开源的、高性能的分布式数据库中间件&#xff0c;可用于将多个MySQL数据库组织成一个逻辑上的集群&#xff0c;并提供负载均衡、故障切换、分片等功能。 下载 wget http://dl.mycat.org.cn/mycat-web-1.0/M…

西门子精智触摸屏下载程序后与PLC通信失败,提示输入传输密码的解决方法

西门子精智触摸屏下载程序后与PLC通信失败,提示输入传输密码的解决方法 如下图所示,这里使用的是TP900 Comfort精智系列触摸屏,下载程序之后,弹出窗口要求输入传输密码,但是我却不知道这里的传输密码指的是什么????怎么输都不对!! 浪费了大半天的时间,终于查出了原…

联合火力分配方案数学建模

2023年数学建模竞赛 联合火力分配方案数学建模 不仅在人们的生产实践中&#xff0c;在多目标规划中经常会遇到如何利用现有资源来安排&#xff0c;以取得最大经济效益的问题。此类问题构成了运筹学的一个重要分支—数学规划&#xff0c;而线性规划则是数学规划的一个重要分支。…

浅析森林烟火AI检测算法的应用及场景使用说明

一、方案背景 现有的森林防火监测系统落后&#xff0c;以人工地面巡护、瞭望塔高点巡查为主&#xff0c;存在巡护范围有限、巡护效率低等问题&#xff0c;建立健全的森林防火风险预警体系&#xff0c;实现对森林、林场等场景的全天候智能自动监测、火情预警&#xff0c;及时发…

【算法|双指针系列No.7】leetcodeLCR 007. 三数之和

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

轻松掌握Python正则表达式:高效处理文本数据的秘诀!

更多资料获取 &#x1f4da; 个人网站&#xff1a;涛哥聊Python 当谈到文本处理和搜索时&#xff0c;正则表达式是Python中一个强大且不可或缺的工具。 正则表达式是一种用于搜索、匹配和处理文本的模式描述语言&#xff0c;可以在大量文本数据中快速而灵活地查找、识别和提取…

【ROS】ros-noetic和anaconda联合使用【实操】

【ROS】ros-noetic和anaconda联合使用【实操】 文章目录 【ROS】ros-noetic和anaconda联合使用【实操】1. requirement2. 新建ros包中的python脚本3. SAC算法Reference 在介绍完基本的联合使用方式后&#xff08;参考 这篇博客&#xff09;&#xff0c;笔者希望使用ros能完成 …

【spring data jpa】ID生成策略(GeneratedValue)

一、添加依赖 在pom文件中添加spring data jpa依赖 <dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-jpa</artifactId><version>3.1.4</version> </dependency> <dependency><gr…