整型数组按个位值排序 - 华为OD统一考试(C卷)

OD统一考试(C卷)

分值: 100分

题解: Java / Python / C++

alt

题目描述

  • 给定一个非空数组(列表),其元素数据类型为整型,请按照数组元素十进制最低位从小到大进行排序,十进制最低位相同的元素,相对位置保持不变
  • 当数组元素为负值时,十进制最低位等同于去除符号位后对应十进制值最低位。

输入描述

给定一个非空数组,其元素数据类型为32位有符号整数,数组长度[1,1000]

输出描述

输出排序后的数组

示例1

输入:
1,2,5,-21,22,11,55,-101,42,8,7,32

输出:
1,-21,11,-101,2,22,42,32,5,55,7,8

题解

这道题目是关于排序算法的问题,具体来说是按照数组元素的十进制最低位及元素索引位置进行排序。、

解题思路

  1. 首先,读入非空数组,将数组中的每个元素按照题目要求计算其十进制最低位,并记录下来该元素的索引位置和原始值。
  2. 创建一个辅助数组或列表,将每个元素的十进制最低位、索引位置和原始值组成一个元组,放入辅助数组中。
  3. 使用排序算法对辅助数组进行排序,排序规则是按照十进制最低位从小到大排序,如果最低位相同,则按照索引位置从小到大排序。
  4. 排序完成后,从辅助数组中提取原始值,即为排序后的结果。

Java

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
/**
 * @author code5bug
 */
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] nums = Arrays.stream(scanner.nextLine().split(","))
                .mapToInt(Integer::parseInt).toArray();

        ArrayList<int[]> arr = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) {
            int t = nums[i];
            int d = (t < 0) ? (-t) % 10 : t % 10;
            arr.add(new int[]{d, i, t});
        }

        // 按照数组元素十进制最低位从小到大进行排序,十进制最低位相同的元素,相对位置保持不变(坐标升序)
        Collections.sort(arr, (a, b) -> {
            if (a[0] == b[0]) {
                return Integer.compare(a[1], b[1]);
            } else {
                return Integer.compare(a[0], b[0]);
            }
        });

        for (int i = 0; i < arr.size(); i++) {
            System.out.print(arr.get(i)[2]);
            if (i + 1 == arr.size())
                System.out.println();
            else
                System.out.print(',');
        }
    }
}

Python

def main():
    nums = list(map(int, input().split(",")))

    arr = []
    for idx, t in enumerate(nums):
        d = (-t) % 10 if t < 0 else t % 10  # 最低位元素值
        arr.append((d, idx, t))

    arr.sort()
    rs = list(map(lambda x: x[2], arr))
    print(*rs, sep=',')


if __name__ == "__main__":
    main()

C++

#include <bits/stdc++.h>
using namespace std;

int main()
{
    // 元素值 vector<int> {最低位元素值, 元素在原数组中的索引位置, 数组中元素值}
    vector<vector<int>> arr;

    int t, idx = 0;
    while (cin >> t) {
        int d = (t < 0) ? (-t) % 10 : t % 10;   // 最低位元素值
        arr.push_back({d, idx, t});

        if (cin.peek() == ',') cin.ignore();
        idx++;
    }

    sort(arr.begin(), arr.end());
    for (size_t i = 0; i < arr.size(); i++) {
        cout << arr[i][2];
        if (i + 1 == arr.size())
            cout << endl;
        else
            cout << ',';
    }
    return 0;
}    

有考友通过专栏已经快速通过机考✍,都是原题哦, 🎁🎁🎁 立即订阅

希望这个专栏不仅能帮您成功通过华为机试,还能让您熟练掌握算法。

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

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

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

相关文章

机器学习——编程实现从零构造训练集的决策树

自己搭建一棵决策树【长文预警】 忙了一个周末就写到了“构建决策树”这一步&#xff0c;还没有考虑划分测试集、验证集、“缺失值、连续值”&#xff0c;预剪枝、后剪枝的部分&#xff0c;后面再补吧&#xff08;挖坑&#xff09; 第二节内容&#xff1a;验证集划分\k折交叉…

线性代数基础概念和在AI中的应用

基本概念 线性代数是数学的一个分支&#xff0c;专注于向量、向量空间&#xff08;也称为线性空间&#xff09;、线性变换和矩阵的研究。这些概念在数据科学、人工智能、工程学和物理学等多个领域都有广泛应用。以下是这些基本概念的详细解释和它们在数据处理和AI中的应用。 …

Jackson 2.x 系列【2】生成器 JsonGenerator

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Jackson 版本 2.17.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-seata-demo 文章目录 1. 前言2. 案例演示2.1 创建 JsonFactory2.2 创建 JsonGenerator2.3 写入操作2.4 查…

期权波动率是什么?怎么计算?

期权波动率 历史波动率&#xff1a;基于历史行情计算出来的历史波动率 我们现在站在现实时点B回顾过去&#xff0c;从A到B这段时间的历史行情我们是知道的&#xff0c;但是基于过去一段时间&#xff0c;标的价格的历史数据计算出来的波动率&#xff0c;就是历史波动率&#x…

分布式搜索引擎elasticsearch专栏二

上一篇的传送门&#xff1a; 分布式搜索引擎elasticsearch专栏一-CSDN博客 这一篇博文主要讲解elasticsearch的数据搜索功能。下面会分别使用DSL和RestClient实现搜索。 1.DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsea…

Mac nvm install failed python: not found

报错 $>./configure --prefix/Users/xxx/.nvm/versions/node/v12.22.12 < ./configure: line 3: exec: python: not found nvm: install v12.22.12 failed!解决方法 到 App 文件夹&#xff0c;并且打开 cd /System/Applications/Utilities/ open .记得改完 Rosetta 之…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之三 简单卡通漫画风格效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之三 简单卡通漫画风格效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之三 简单卡通漫画风格效果 一、简单介绍 二、简单卡通漫画风格效果实现原理 A、边缘蒙版的处理说明&#xff1…

FPGA控制AD7606_AD7606解读

目录 一、AD7606解读二、引脚说明三、时序图 一、AD7606解读 AD7606特点&#xff1a; 8通道同步采样模拟通道数为8分辨率&#xff1a;16bit&#xff0c;即最小采样的电压为5V/(2^16) 0,00007V&#xff0c;即数字量的1就代表模拟量的0,00007V&#xff0c;2代表0,00014V有效位数…

鸿蒙开发实战:【系统服务管理部件】

简介 samgr组件是OpenHarmony的核心组件&#xff0c;提供OpenHarmony系统服务启动、注册、查询等功能。 系统架构 图 1 系统服务管理系统架构图 目录 /foundation/systemabilitymgr ├── samgr │ ├── bundle.json # 部件描述及编译文件 │ ├── frameworks …

linux之centos7vmware虚拟机的安装

目录 一、下载合适的vmware和操作系统镜像安装文件 来自引用文章的软件下载本片文章使用的软件下载 二、根据教程进行安装 三、网络配置解说 四、配置网络 编辑虚拟机网络 对VMWARE虚拟机网络进行配置 设置虚拟机网络为NAT模式 设置自定义网络为 VMnet8(NAT模式) 编辑li…

[ C++ ] STL---list的使用指南

目录 list简介 list的常用接口 构造函数 赋值运算符重载 迭代器 容量相关接口 元素访问接口 修改相关接口 头插push_front() 头删pop_front() 尾插push_back() 尾删pop_back() insert() erase() list的迭代器失效 list简介 1. list是可以以O(1)的时间复杂度在任意…

机器人现有力控技术检索

文章目录 力控技术1 基本柔顺力控1.1 直接力控1.2 间接力控1.2.1 被动和主动柔顺控制1.2.2 混合力位控制1.2.3 阻抗&导纳力控1.2.3.1 原理1.2.3.2 区别和联系1.2.3.3 工程应用 1.2.4 阻抗力控1.2.5 导纳力控 2 先进力控2.1 自适应力控2.2 鲁棒力控2.3 学习力控 3 智能力控3…

【LabVIEW FPGA入门】使用FPGA实现串行同步接口(SSI)

SSI&#xff08;串行同步接口&#xff09;是连接绝对位置传感器和控制器的广泛应用的串行接口。SSI利用控制器发出一个时钟脉冲序列&#xff0c;初始化传感器的门限输出。 传感器不断更新位置数据&#xff0c;并传送到移位寄存器中。在每一个时钟脉冲序列之间&#xff…

HTML_CSS学习:超链接、列表、表格、表格常用属性

一、超链接_唤起指定应用 1.相关代码 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>超链接_唤起指定应用</title> </head> <body><a href"tel:10010">电话联…

JavaScript初学心得

JavaScript JavaScript原名是livescript&#xff0c;是由美国网景开发的一种用于对网页操作的脚本语言 网页操作&#xff08;图片切换&#xff09; 脚本语言&#xff08;不需要编译 sql,html,css,javascript,由某种解释器直接可以运行&#xff09; livescript也是面向对象的…

基于Go的开源全栈测试工具RunnerGo使用详解

前言 测试人员目前广泛使用的测试工具如Postman、JMeter等&#xff0c;如Postman缺少对API的性能测试部分、JMeter则缺少测试报告和测试脚本的统一管理系统及UI测试功能&#xff0c;而RunnerGo的出现填补了传统测试工具的空缺&#xff0c;为测试人员提供了一个可以满足测试全流…

计算机毕业设计-基于Python的“哔哩哔哩视频网”视频热度分析

概要 在21世纪的今天&#xff0c;网络发展越来越快&#xff0c;网上的娱乐方式也越来越多样化&#xff0c;而如今在网上观看视频消遣时间越来越受到大众的青睐。Bilibili视频网站是现当下年轻人最受欢迎的一个视频网站。有调查显示&#xff0c;直到2019年的10月份&#xff0c;B…

基于python车辆故障管理系统的设计与实现flask-django-nodejs-php

网络发展前景无限&#xff0c;及早与网络结合&#xff0c;与信息时代同步&#xff0c;与高科技汇合&#xff0c;定会给社会各行各业的发展注入新鲜的活力。站在网络时代的前夜&#xff0c;我们清晰地听到了网络时代的宣言&#xff1a;谁掌握了网络&#xff0c;谁就掌握了未来。…

视觉信息处理和FPGA实现第5次作业-Matlab实现图像逆时针旋转90度

一、Matlab2022a安装 链接&#xff1a;https://pan.quark.cn/s/6e177bc7c11d 提取码&#xff1a;dKNN 二、Matlab使用 2.1 新建一个脚本文件&#xff08;.m文件&#xff09; 2.2 另存为到便于归档的地方 考虑到.m文件如果不是全英文路径&#xff0c;也有可能会出问题&#…

51单片机学习笔记7 串转并操作方法

51单片机学习笔记7 串转并操作方法 一、串转并操作简介二、74HC595介绍1. **功能**&#xff1a;2. **引脚**&#xff1a;3. **工作原理**&#xff1a;4. 开发板原理图&#xff08;1&#xff09;8*8 LED点阵&#xff1a;&#xff08;2&#xff09;74HC595 串转并&#xff1a; 三…
最新文章