交换长数字中数字的顺序使得长数字为最大值

给定一个非负整数,你可以最多交换两个数字一次来获得最大值数字。 返回您可以获得的最大值 本题源自leetcode ------------------------------------------------------------------- 思路: 1  将整数转换为字符串,然后用一个dp数组记录这个位置应该存放的下标 2  从后往前遍历字符串。填充dp数组 3 从前往后遍历字符串看当前的字符是否应该在这个位置。如果不一样就交换。 代码: int 阅读详情

交换长数字中数字的顺序使得长数字为最大值


一、题目描述

给定一个数字,仅交换一次使得数字最大
——————————
输入:3297
输出:9237
——————————
输入:9090
输出:9900
——————————
输入:3000
输出:3000

二、实现思路

  1. 将输入的长数字转变为数字数组
  2. 将数组按照降序排列
  3. 从头到尾开始遍历原数组和排序后的数组
  4. 当发现遍历到不同的数字a(小的那个)和b(大的那个)
  5. 从前到后记下a的下标,从后往前找到b的下标
  6. 将两个位置的数字交换得到最大的数字数组
  7. 将数组转换为长数字

二、代码示例

代码如下(示例):

		var a = -1, b;  //声明a和b,用于记录找到不同数字的下标
        function searchMaxNum(num) {
            var numList = [];  //定义一个数组numList,用来存储原数组
            var downList = [];  //定义一个降序排列的数组
            numList = Array.from(num + "");  //将传入的长数字转变为数组,存储在numList
            downList = [].concat(numList);  //用数组中的拼接方法concat,使得downList为一个空数组和numList的拼接(得到downList = 原数组numList)
            downList.sort(function(a, b) {
                return b - a;
            });  //将downList降序排列,此处b-a大于0的话,证明b>a,那么交换位置
            for (var k = 0; k < downList.length; k++) {  //遍历数组
                if (numList[k] != downList[k]) {  //当找到数组中不相同的元素,因为downList是降序排列,因此downList[k]是可以交换的最大数字
                    a = k;  //将下标k的值赋给a
                    b = numList.lastIndexOf(downList[k]);  //在原数组中从后向前遍历,如果找到downList[k],记下下标为b
                    break;  //跳出循环
                }
            }
            if (a != -1) {  //如果a不是-1,证明a被更改过,证明找到了可以交换的数字,以下进行三元交换
                var temp = numList[a];
                console.log("temp:", temp);
                numList[a] = numList[b];
                numList[b] = temp;
            }
            return numList.join('');  //将数字数组转换为长数字
        }
        console.log(searchMaxNum(9090));

总结

这里其实是利用大的数字在前面,就能得到最终数值最大
两个数组,一个降序排列的数组与原数组从前开始遍历(因为前面的位数高),如果相同,证明数组中大的数字就在前面,如果发现有不同的,证明还有大的数字可以往前挪动
只要逻辑上理解好了,这道题目主要考察了数组的几个方法:
1、将字符串转为数组
2、将数组拼接
3、数组的下标遍历
4、数组转换为字符串

7-2 交换最小值和最大值 (15分) 7-2 交换最小值和最大值 (15分) 本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。 注意:题目保证最大和最小值都是唯一的。 输入格式: 输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。 输出格式: 在一行中顺序输出交换后的序列,每个整数后跟一个空格。 输入样例: 5 8 2 5 1 4 输出样例: 1 2 5 4 8 一开始以为只是单纯的排序,用了冒泡排序,结果错了。。。注意审题呀!输出:1 2 【5 阅读详情

相关推荐

C++ PTA 7-3 交换最小值和最大值

C++PTA 交换最小值和最大值 本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。 注意:题目保证最大和最小值都是唯一的。 输入格式: 输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。 输出格式: 在一行中顺序输出交换后的序列,每个整数后跟一个空格。 输入样例: 5 8 2 5 1 4 输出样例: 1 2 5 4 8 原创答案: #include <iostream> int main()

Moriafly的博客 3671

拼接最大数

通过栈顶指针的移动来表示某个数字是选择还是舍弃,当前遍历数字与栈顶元素比较,如果当前遍历数字更大那么就舍弃栈顶元素,那么remain就要减1,当remain为0时说明我们已经舍弃了remain个数字,即表明供我们选择的只剩下k个了不能再舍弃只能全部选择了。问题描述:有两个整数数组nums1和nums2,它们的度分别是m和n,现在给一个整数k,需要在这两个数组中按顺序取出k个数字,最后组成一个度为k的数组,要求最后度为k的数组最大。对于该函数,输入一个数组和k,得到一个k个元素的按顺序最大的数组子串。

weixin_54143563的博客 765

STM32F407 FSMC并口读取AD7606

先贴一下最终效果图.这个是AD7606并口读取数据一个周期后的数据结果. 原始波形用示波器看是很平滑的. AD7606不知为何就会出现干扰, 我猜测可能是数字信号干扰导致的. 因为干扰的波形很有规律. 这种现象基本上可以排除是程序问题. 应该是干扰或者数字信号干扰,或者是数字和模拟共地导致的.是一个宏,实际上是指向的一个内存地址, 这个内存地址是FSMC指定的地址. 使用FSMC接口, 可免于控制引脚, 直接读取某个地址即可, FSMC会自动产生操作时序. 具体请见FSMC相关知识.

走错路的程序员 5431

在德问上面看到的一道面试题:交换数字位置得到相对最大值

从德问上面看到别人提问的一道面试题,做了一下: 面试题:交换数字位置得到相对最大值 前段时间遇到的一个面试题: 给你一个数,允许你选择两个数字交换位置,每个数只能交换一次位置,请交换得到尽可能的最大值,写出算法(请注意考虑有重复数字的情况)。 例如: 13792 -> 97312 (每个数字只能交换一次,所以无法得到 97321,尽量就ok了)

劉俊的专栏 2067

Leetcode - 670交换一个数字最大值 AC100%

给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。 示例 1 : 输入: 2736 输出: 7236 解释: 交换数字2和数字7。 示例 2 : 输入: 9973 输出: 9973 解释: 不需要交换。 注意: 给定数字的范围是[0, 108] 思路比较简单,将数字转成int数组,对数组进行遍历,第一次条件满足r[i] < r[j]时候,...

weixin_40247742的博客 673

交换数位后的最大值

交换数位后的最大值 题意: 输入一个非负整数num,0<=num<=10^8,可以交换num任意两个数位上的数字,但是最多只能发生一次交换,求通过交换可以得到的最大值。 示例: 输入: 2736 输出: 7236 解释:将2736中的数字2和7交换,得到7236 C++实现: #include <iostream> #include <vector> #incl...

路漫漫其修远兮,吾将上下而求索。 1087

【PTA】交换最小值和最大值

本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。 注意:题目保证最大和最小值都是唯一的。 输入格式: 输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。 输出格式: 在一行中顺序输出交换后的序列,每个整数后跟一个空格。 输入样例: 5 8 2 5 1 4 输出样例: 1 2 5 4 8 ...

lzx's blog 2万+

7-4 交换最小值和最大值

从这道题目中,我们可以学到以下几点:1. **问题分析**:在解决问题之前,需要仔细阅读和理解题目要求,以确保你考虑到了所有可能的情况。2. **边界条件的重要性**:在计算机科学中,边界条件常常是出现错误的地方。这道题目强调了如果最小值或最大值位于序列的开始或结束位置,交换顺序会产生影响。这就是一个边界条件的例子。3. **数组操作**:这道题目强调了对数组元素的访问和修改。你需要熟悉如何在数组中找到最大值和最小值,以及如何交换数组中的两个元素。

tang7mj的博客 3628

PTA 交换最小值和最大值 (15 分)

7-26 交换最小值和最大值 作者 C课程组 单位 浙江大学 本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。 注意:题目保证最大和最小值都是唯一的。 输入格式: 输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。 输出格式: 在一行中顺序输出交换后的序列,每个整数后跟一个空格。 输入样例: 5 8 2 5 1 4 输出样例: 1 2 5 4 8

Sonderlh的博客 7755

pta交换最小值和最大值

pta交换最小值和最大值 本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。 注意:题目保证最大和最小值都是唯一的。 输入格式: 输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。 输出格式: 在一行中顺序输出交换后的序列,每个整数后跟一个空格。 输入样例: 5 8 2 5 1 4 结尾无空行 输出样例: 1 2 5 4 8 结尾无空行 #include<stdio.h> int main(

小缪的博客 1万+

PTA 7-2 交换最小值和最大值

输入格式: 输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。 输出格式: 在一行中顺序输出交换后的序列,每个整数后跟一个空格。 输入样例: 5 8 2 5 1 4 输出样例: 1 2 5 4 8 标题代码: #include <stdio.h> int main() { int count,arr[12],brr[10],temp,max ...

weixin_45678643的博客 2712

c 语言 交换最小值和最大值

本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。 注意:题目保证最大和最小值都是唯一的。 输入格式: 输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。 输出格式: 在一行中顺序输出交换后的序列,每个整数后跟一个空格。 我的答案: #include<stdio.h> void swap(i...

inooll的博客 8551

交换最小值和最大值

7-72 交换最小值和最大值 (15分) 本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。 注意:题目保证最大和最小值都是唯一的。 输入格式: 输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。 输出格式: 在一行中顺序输出交换后的序列,每个整数后跟一个空格。 输入样例: 5 8 2 5 1 4 输出样例: 1 2 5 4 8 在这里插入代码片 ...

yqdid的博客 3924

pta 7-4 交换最小值和最大值 (15 分)

pta7-4 交换最小值和最大值 (15 分) 本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。 注意:题目保证最大和最小值都是唯一的。 输入格式: 输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。 输出格式: 在一行中顺序输出交换后的序列,每个整数后跟一个空格。 输入样例: 5 1 2 5 4 8...

cilicilico的博客 2万+

9:交换最小值和最大值

9:交换最小值和最大值 本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。 注意:题目保证最大和最小值都是唯一的。 输入格式: 输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。 输出格式: 在一行中顺序输出交换后的序列,每个整数后跟一个空格。 输入样例: 5 8 2 5 1 4 输出样例: 1 2 5...

weixin_46640830的博客 3137

7-3 交换最小值和最大值 (15分)

7-3 交换最小值和最大值 (15分) 本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。 注意:题目保证最大和最小值都是唯一的。 输入格式: 输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。 输出格式: 在一行中顺序输出交换后的序列,每个整数后跟一个空格。 输入样例: 5 8 2 5 1 4 输出样例: 1 2 5 4 8 #include <stdio.h> int main() {

云雨澄枫的博客 1万+

7-3 交换最小值和最大值

7-3 交换最小值和最大值 本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。 注意:题目保证最大和最小值都是唯一的。 输入格式: 输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。 输出格式: 在一行中顺序输出交换后的序列,每个整数后跟一个空格。 输入样例: 5 8 2 5 1 4 输出样例: 1 2 5 4 8 #include <stdio.h> int main() { int n,

weixin_50934744的博客 1万+

PTA:7-24 交换最小值和最大值

7-24 交换最小值和最大值 本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。 注意:题目保证最大和最小值都是唯一的。 输入格式: 输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。 输出格式: 在一行中顺序输出交换后的序列,每个整数后跟一个空格。 输入样例: 5 8 2 5 1 4 输出样例: ...

Sy_Faker的博客 2071

基于ESP32与PCM5102的WiFi无损音频传输系统设计与实现

本文详细介绍基于ESP32与PCM5102的WiFi无损音频传输系统设计与实现。通过I2S接口直接传输PCM数据,避免SRC重采样,实现真正的HIFI级音质。涵盖硬件连接、软件架构、网络传输优化及实际音质对比,为音频爱好者提供高性价比的无损无线音频解决方案。

rnn9storyteller的博客 923

新能源充电站用电量预测数据集及其影响因素分析

新能源电动汽车充电设施用电量分析资料 随着全球电动车辆市场持续扩大,对充电设施的需求不断上升,充电站点作为支撑电动车运行的重要环节,其运作效率与服务品质直接影响用户的使用体验及电动车的普及进程。为提升充电站点的管理效能与能源利用效率,精准预测其用电负荷变得尤为关键。 该分析资料专门针对电动车充电站点的用电量预测问题而设计,旨在协助研究人员和工程技术人员深入理解站点的用电特征,并据此建立预测模型。资料中可能涵盖多种影响变量,如日均充电次数、用电高峰时段、用户充电行为、节假日效应、气候条件、区域用电特征等。借助这些数据,可以开发出更精准的用电量预测模型。 一套完整的充电设施用电量分析资料通常包括以下内容: 1. 时间序列记录:涵盖不同时段(如小时、日、周)的用电数据。 2. 充电记录:涉及各充电桩或站点的用电详情,包括功率、充电时间、完成时刻等。 3. 用户行为数据:如用户类别、充电频率、偏好习惯等。 4. 外部环境数据:如气温、湿度、风速等气象信息,以及地区性节假日安排。 5. 站点基本信息:包括地理位置、充电桩种类及数量、服务承载能力等,有助于评估站点布局与运行效率。 数据的准确性和全面性对模型效果具有决定性作用。优质的数据资源有助于研究者识别影响用电负荷的核心因素,从而在实际操作中实现更高效的资源调配与负荷管理。例如,通过预判特定时段的用电需求,运营方可调整定价策略,引导用户在低负荷时段充电,以实现电网负载的均衡。同时,预测模型也有助于电力企业优化电网建设,保障在电动车数量持续增背景下的供电稳定性。 随着智能算法与数据分析技术的不断进步,将这些技术引入充电负荷预测领域,不仅提升了预测精度,也为充电站点的智能管理提供了数据支撑,推动电动车产业的持续发展。 总体而言,该用电量分析资料为研究者提供了重要的数据支撑,使其能够深入挖掘充电站点的用电规律,从而在数据分析、负荷预测及站点运营优化等方面发挥积极作用,最终实现能源利用效率的提升与新能源汽车产业的可持续发展。资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!

上一篇: 相对定位
下一篇: 从一个数组中找出两个元素相加等于目标数字,时间复杂度为O(n)
bubbleSweet
博客等级 码龄6年 14粉丝 70原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值