每日一练 2025.5.16

题目;

给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。

示例 1 :

输入: 2736
输出: 7236
解释: 交换数字2和数字7。

示例 2 :

输入: 9973
输出: 9973
解释: 不需要交换。

注意:

  1. 给定数字的范围是 [0, 108]
解题:
  1. 转换表示
    将输入的非负整数num转换为字符数组digits,便于我们检查每一位数字并在之后进行交换。

  2. 建立索引表
    创建一个数组last来记录每个数字0-9在字符数组digits中出现的最后位置。这样我们就可以快速定位到在进行交换时可用的最大数字的位置。

  3. 查找交换位置
    从字符数组digits的最左端(最高位)开始遍历,对每个当前位置i, 我们从数字9递减至当前数字,检查是否有比当前数字大的数字出现在其之后的位置上。这是通过检查索引表last与当前位置i来确定的。

  4. 确定交换策略
    一旦我们找到一个比当前数字digits[i]大且在其后面的数字,则将当前数字与这个找到的最大数字进行交换。因为我们要获取可能的最大值,所以我们总是优先选择最大的可交换数字。

  5. 执行交换并返回结果
    进行交换后,我们将字符数组转回整数并返回结果。如果遍历整个数组都没有找到可交换的位置,则表示原数字已经是最大值,直接返回原始整数。

代码:
class Solution {
    public int maximumSwap(int num) {
        char[] digits = Integer.toString(num).toCharArray();

        // 储存每个数字最后一次出现的位置
        int[] last = new int[10];
        for (int i = 0; i < digits.length; i++) {
            last[digits[i] - '0'] = i;
        }

        // 从左向右遍历所有的数字
        for (int i = 0; i < digits.length; i++) {
            // 从9开始向下查找,找到第一个在当前数字之后出现的最大数字
            for (int d = 9; d > digits[i] - '0'; d--) {
                if (last[d] > i) {
                    // 发现可以交换的两个数字,进行交换
                    char temp = digits[i];
                    digits[i] = digits[last[d]];
                    digits[last[d]] = temp;
                    // 返回交换后的新数字
                    return Integer.parseInt(new String(digits));
                }
            }
        }

        // 如果没有交换发生,直接返回原数字
        return num;
    }
}
知识点解析:

这段代码使用了以下Java编程知识点:

  1. 类和方法定义:定义了一个名为 Solution 的类和一个名为 maximumSwap 的方法,它接收一个 int 类型的参数并返回一个 int 类型的结果,遵循了基本的面向对象编程原则。

  2. 字符数组:使用 Integer.toString(num).toCharArray() 将整数 num 转换成对应的字符数组,每个字符表示一个数字位。

  3. 数组:定义了一个名为 last 的整数数组来存储每个数字字符最后出现的索引位置。

  4. 循环控制结构:代码中使用了 for 循环遍历字符数组和查找数字位。

  5. 条件控制结构:使用 if 条件语句来判断是否存在一个较大位在当前位数字后面的情况,以此决定是否执行交换。

  6. ASCII码:利用字符 '0' 的ASCII值作为参考,对字符数组中的数值字符进行ASCII计算,将字符转换为相应的整数值。

  7. 字符串拼接与转换:基于字符数组创建了一个新的字符串,并把交换完的字符数组转换回整数。

  8. 返回语句:在找到可以交换的两个数字并交换后,返回新构造的整数,或者在无需交换的情况下返回原始整数。

知识点详细描述
类和方法定义在 Solution 类中定义了 maximumSwap 方法,此方法执行主要的操作。
字符数组使用 toCharArray() 方法将数字转换为它们的字符表示形式,方便操作每个单独的数字。
数组定义了一个名为 last 的数组,用于存储每个数字最后一次出现的索引位置。
循环控制结构使用 for 循环来迭代字符数组以及从9遍历到0寻找可以交换的数字。
条件控制结构使用 if 语句来检查特定条件是否满足,并在条件为真时执行代码块。
ASCII码操作操作字符与数字之间的转换,利用 '0' 字符的ASCII值计算。
字符串拼接与转换通过 new String(digits) 将字符数组转换回字符串,然后用 Integer.parseInt() 将字符串转换为整数。
返回语句在方法的末尾返回要么是经过交换的新数值,要么是原始的输入数值。

2024.5.16

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

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

相关文章

平价蓝牙耳机怎么选?四大最新宝藏平价蓝牙耳机推荐

面对市场上众多品牌和型号的蓝牙耳机&#xff0c;如何在有限的预算内选择一款性价比高、性能出色的平价蓝牙耳机&#xff0c;一直以来都是一个值得探讨的问题&#xff0c;作为蓝牙耳机大户的我&#xff0c;今天我就为大家推荐四大最新宝藏平价蓝牙耳机&#xff0c;帮助你在海量…

如何修改照片的dpi值?在线图片更改dpi快捷方法

不少小伙不知道如何去改变图片分辨率&#xff0c;因为能用的到分辨率dpi的地方也不多&#xff0c;但是当我们在求职、考公或者是打印照片的时候&#xff0c;就经常看到会要求图片分辨率为300dpi以上了&#xff0c;本文将分享一款图片处理工具&#xff0c;它能快速完成修改图片分…

第三十二天 | 46.全排列 47.全排列||

终于进入排列&#xff01;&#xff08;之前都是组合&#xff09; 排列和组合的区别&#xff1a;在数学上的区别都懂&#xff0c;主要是看在代码实现上有什么区别 题目&#xff1a;46.全排列 树型结构比较简单 用used标记某一元素是否使用过。在组合问题中&#xff0c;其实是…

在pycharm中运行jupyter报错run_error解决办法-极速上手

注&#xff1a;此方法不是永久性的修复&#xff0c;只是临时性修复&#xff1b;永久性的修复方法没有找到&#xff01; 报错 解决办法 1.打开任务管理器 2. 找到python.exe进程 结束任务之后重新在pycharm中重启jupyter&#xff0c;直接启动成功 3.检验 运行成功没有报错!

图片中的表格转成word用什么工具好?

2024年5月16日&#xff0c;周四上午 我推荐用免费的腾讯OCR表格识别v3体验网站 用手机文档模式拍下并转成黑白后&#xff0c;成功识别的概率还是非常大的 OCR Demo (tencent.com)https://ocrdemo.cloud.tencent.com/识别成功后&#xff0c;复制识别结果并粘贴到word文档里面就…

k8s对接nfs共享存储

1. 规划 节点功能节点IP数据目录服务端192.168.99.210/data客户端192.168.99.211 2. 搭建NFS服务 2.1 安装服务端 若NFS已搭建完成&#xff0c;可跳过此节。 在服务端节点上执行如下操作&#xff1a; 安装NFS、RPC服务 yum install -y nfs-utils rpcbind创建共享目录 # 此…

儿童护眼台灯哪个牌子好,适合儿童使用的护眼台灯推荐

护眼台灯在近几年成为家长和经常与电子设备打交道的人士中备受瞩目的家用电器。对于有孩子的家庭而言&#xff0c;它几乎成为了必备品&#xff0c;许多消费者已经对其有了一定的了解并进行了购买。然而&#xff0c;仍有部分家长对护眼台灯的效果和重要性缺乏充分认识&#xff0…

从光伏监测到智慧农业,漫途LoRa产品多领域应用

随着物联网&#xff08;IoT&#xff09;技术的飞速发展&#xff0c;对数据传输的稳定性和低功耗特性的需求日益增加。在这一背景下&#xff0c;LoRa凭借更远的传输距离以及出色的抗干扰能力&#xff0c;展现出了显著的优势。这种特性使得LoRa在复杂多变的环境中表现尤为突出&am…

摸鱼大数据——大数据导论

大数据导论 1、概念 大数据时代: 万物皆数据 ​ 数据概念: 人类的行为及产生的事件的一种记录称之为数据 ​ 数据价值: 对数据的内容进行深入分析&#xff0c;可以更好的帮助了解事和物在现实世界的运行规律 2、大数据诞生 大数据的诞生: 跟随着互联网的发展的,当全球互联…

20232831 袁思承 2023-2024-2 《网络攻防实践》第10次作业

目录 20232831 袁思承 2023-2024-2 《网络攻防实践》第10次作业1.实验内容2.实验过程&#xff08;1&#xff09;SEED SQL注入攻击与防御实验①熟悉SQL语句②对SELECT语句的SQL注入攻击③对UPDATE语句的SQL注入攻击④SQL对抗 &#xff08;2&#xff09;SEED XSS跨站脚本攻击实验…

5年增100倍6秒卖1瓶酒,酣客的“FFC模式”是什么

酣客酱酒销售模式&#xff0c;白酒FFC模式&#xff0c;白酒新零售模式设计 坐标&#xff1a;厦门&#xff0c;我是易创客肖琳 深耕社交新零售行业10年&#xff0c;主要提供新零售系统工具及顶层商业模式设计、全案策划运营陪跑等。 不知从何时起&#xff0c;营销圈开始有这么一…

docker容器与centos宿主机时间一致设置

1、查看宿主机的系统时间 date -R 2、进入到容器中查看容器系统时间 docker exec -it storage /bin/bash date -R 3、查看容器系统时区 cat /etc/timezone 4、查看宿主机所在时区 timedatectl 5、创建容器时间&#xff0c;并退出进入的容器 6、将宿主日期复制到容器内部&…

Git—常用命令

官方 Git - Book (git-scm.com) 常用命令 命令作用git config --global user.name 用户名设置用户作者git config --global user.email 邮箱设置用户邮箱 git init初始化本地仓库git status查看本地仓库状态 git add 文件名 添加到暂存区git commit -m "提交日志…

基于PHP+MySQL组合开发的多用户自定义商城系统源码 附带源代码包以及搭建教程

系统概述 互联网技术的飞速发展&#xff0c;电子商务已成为人们日常生活中不可或缺的一部分。商城系统作为电子商务的核心&#xff0c;其开发技术和用户体验直接影响着电商平台的竞争力和用户满意度。本文旨在介绍一个基于PHPMySQL组合开发的多用户自定义商城系统&#xff0c;…

深入理解 House of Cat

Index 序言利用 FSOP 调用 House of Cat利用条件伪造IO流条件完整调用链分析 模板System (one_gadget) 模板ORW模板 Demo & Exp利用 __malloc_assert 调用 House of Cat例题&#xff1a;题目思路Exp 序言 原文章&#xff1a;深入理解 House of Cat 随着 GNU 持续不断的更…

GeoServer /geoserver/wms RCE漏洞复现(CVE-2022-24816)

0x01 产品简介 GeoServer是一款开源的地理数据服务器软件,主要用于发布、共享和处理各种地理空间数据。它支持众多的地图和空间数据标准,能够使各种设备通过网络来浏览和使用这些地理信息数据。 0x02 漏洞概述 GeoServer /geoserver/wms 接口处存在远程代码执行漏洞,未经…

好看的html网站维护源码

源码介绍 好看的html网站维护源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c; 源码截图 源码下载 好看的html网站维护源码

Blender学习入门:让图片动起来

Blender简介 Blender 是一款开源的三维计算机图形软件&#xff0c;它提供了广泛的功能&#xff0c;包括建模、动画、渲染、视频编辑等。Blender还支持Python编程接口&#xff0c;允许用户通过编写脚本来控制和定制软件的各个方面。 Blender的功能非常强大&#xff0c;它被广泛…

为何Linux成为你不可或缺的技能

在数字化飞速发展的今天&#xff0c;无论你是IT行业的精英&#xff0c;还是其他领域的专业人士&#xff0c;掌握Linux都已经成为一项至关重要的技能。那么&#xff0c;为什么一定要学会Linux呢&#xff1f;以下文章仅供参考 1. 开源的力量&#xff1a;无限的可能性 Linux是一…

02 VUE学习:模板语法

模板语法 Vue 使用一种基于 HTML 的模板语法&#xff0c;使我们能够声明式地将其组件实例的数据绑定到呈现的 DOM 上。所有的 Vue 模板都是语法层面合法的 HTML&#xff0c;可以被符合规范的浏览器和 HTML 解析器解析。 在底层机制中&#xff0c;Vue 会将模板编译成高度优化的…