【华为OD题库-088】数字最低位排序-Java

题目

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

思路

简单排序题,因为要求相对位置不变,所以需要稳定的排序算法,
常见的稳定排序有:冒泡排序,插入排序,归并排序
不稳定的排序有:选择排序,快速排序
本文作为对排序的回顾,写了上述所有的排序算法代码

题解

package hwod;import java.util.Arrays;
import java.util.Scanner;public class NumSortLowest {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int[] nums = Arrays.stream(sc.nextLine().split(",")).mapToInt(Integer::parseInt).toArray();int[] res = mergeSort(nums);for (int i = 0; i < res.length; i++) {if (i != 0) System.out.print(",");System.out.print(res[i]);}}// 冒泡排序,稳定,可取private static int[] bubblingSort(int[] nums) {for (int i = 0; i < nums.length - 1; i++) {int flag = 0;for (int j = 0; j < nums.length - 1 - i; j++) {if (Math.abs(nums[j]) % 10 > Math.abs(nums[j + 1]) % 10) {swap(nums, j, j + 1);flag = 1;}}if (flag == 0) break;}return nums;}// 插入排序,稳定可取private static int[] insertSort(int[] nums) {for (int i = 1; i < nums.length; i++) {int key = nums[i];int j = i - 1;while (j >= 0 && Math.abs(nums[j]) % 10 > Math.abs(key) % 10) {nums[j + 1] = nums[j];j--;}nums[j + 1] = key;}return nums;}//归并排序,稳定可取private static int[] mergeSort(int[] nums) {recur2(nums, 0, nums.length - 1);return nums;}private static void recur2(int[] nums, int start, int end) {if (start >= end) return;int mid = start + end >> 1;recur2(nums, start, mid);recur2(nums, mid + 1, end);int i = start, j = mid + 1, k = 0;int[] tmp = new int[end - start + 1];while (i <= mid || j <= end) {if (j > end || (i <= mid && Math.abs(nums[i]) % 10 <= Math.abs(nums[j]) % 10)) {tmp[k++] = nums[i++];} else {tmp[k++] = nums[j++];}}for (int m = 0; m < tmp.length; m++) {nums[start + m] = tmp[m];}}//选择排序,不稳定,本题不可取private static int[] selectSort(int[] nums) {for (int i = 0; i < nums.length - 1; i++) {int minIdx = i;for (int j = i + 1; j < nums.length; j++) {if (Math.abs(nums[minIdx]) % 10 > Math.abs(nums[j]) % 10) {minIdx = j;}}if (minIdx != i) {swap(nums, i, minIdx);}}return nums;}// 快速排序,不稳定,本题不可取private static int[] quickSort(int[] nums) {recur(nums, 0, nums.length - 1);return nums;}private static void recur(int[] nums, int start, int end) {if (start >= end) return;int i = start, j = end, pivot = nums[i];while (i < j) {while (Math.abs(nums[j]) % 10 > Math.abs(pivot) % 10 && i < j) j--;while (Math.abs(nums[i]) % 10 <= Math.abs(pivot) % 10 && i < j) i++;if (i < j) {swap(nums, i, j);}}swap(nums, i, start);recur(nums, start, i - 1);recur(nums, i + 1, end);}private static void swap(int[] nums, int i, int j) {int t = nums[i];nums[i] = nums[j];nums[j] = t;}}

推荐

如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。

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

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

相关文章

Redis与MySQL双写一致性如何保证?

前言 四月份的时候&#xff0c;有位好朋友去美团面试。他说&#xff0c;被问到Redis与MySQL双写一致性如何保证&#xff1f;这道题其实就是在问缓存和数据库在双写场景下&#xff0c;一致性是如何保证的&#xff1f;本文将跟大家一起来探讨如何回答这个问题。 谈谈一致性 一致…

什么是UUID

UUID是通用唯一标识符&#xff08;Universally Unique Identifier&#xff09;的缩写&#xff0c;也叫GUID (Globally Unique Identifier)。它是一个由一串数字和字母组成的标识符&#xff0c;用于在计算机系统中唯一地标识实体&#xff08;如文件、对象、数据库记录等&#xf…

如何使用内网穿透实现iStoreOS软路由R4S公网远程访问局域网电脑桌面

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 简介一、配置远程桌面公网地址二、家中使用永久固定地址…

JeecgBoot jmreport/queryFieldBySql RCE漏洞复现

0x01 产品简介 Jeecg Boot(或者称为 Jeecg-Boot)是一款基于代码生成器的开源企业级快速开发平台,专注于开发后台管理系统、企业信息管理系统(MIS)等应用。它提供了一系列工具和模板,帮助开发者快速构建和部署现代化的 Web 应用程序。 0x02 漏洞概述 Jeecg Boot jmrepo…

Linux0.11内核源码解析-string待更新

sting.h头文件包含了所有的字符串操作函数 strcpy字符串拷贝函数 cld 指令用于设置方向标志位&#xff0c;确保字符串复制是从前向后进行。 lodsb 指令用于将 src 指针指向的字符加载到 AL 寄存器中&#xff0c;并将 src 指针递增。 stosb 指令用于将 AL 寄存器中的字符存储到 …

【DL-TensorFlow遇错】TensorFlow中遇错合集

TensorFlow中遇错合集 一、AttributeError: module tensorflow has no attribute placeholder二、RuntimeError: tf.placeholder() is not compatible with eager execution. 一、AttributeError: module tensorflow has no attribute placeholder 错误原因 tensorflow版本问…

vue.js纯前端处理如何将后台返回来的csv数据导出成csv文件

需要实现一个下载csv文件的功能&#xff0c;但后台没有对这个下载文件进行处理&#xff0c;而是将csv数据传给前台而已&#xff0c;需要前台做一下处理。 这是按钮的代码&#xff1a; <a> <el-button size"mini" class"custom-confirm" click&quo…

安科瑞出席宁波市建筑电气2023年年会-安科瑞 蒋静

12月1日&#xff0c;宁波市建筑电气2023年年会在宁波市海曙天港禧悦酒店成功举办。作为推动宁波市建筑电气行业技术发展的专业交流会&#xff0c;吸引了建筑电气行业领导、专家、设计师、厂家等300多名代表参会。期间&#xff0c;安科瑞电气股份有限公司携智能楼宇、智慧校园、…

vue3父组件调用子组件el-dialog对话框

vue3父组件调用子组件el-dialog对话框 在写项目的时候&#xff0c;经常要使用父子组件通讯&#xff0c;我已经写了很多篇博客来介绍父子组件通讯了&#xff0c;vue中的父子组件通讯方式有差不多10来种&#xff0c;最常用的就那么一两种&#xff0c;这里我介绍其中我认为最基础…

19、命令模式(Command Pattern,不常用)

命令模式&#xff0c;将一个请求封装为一个对象&#xff08;命令&#xff09;&#xff0c;使发出请求的责任和执行请求的责任分割开&#xff0c;有效降低系统的耦合度。这样两者之间通过命令对象进行沟通&#xff0c;这样方便将命令对象进行储存、传递、调用、增加与管理。命令…

【flutter对抗】blutter使用+ACTF习题

最新的能很好反编译flutter程序的项目 1、安装 git clone https://github.com/worawit/blutter --depth1​ 然后我直接将对应的两个压缩包下载下来&#xff08;通过浏览器手动下载&#xff09; 不再通过python的代码来下载&#xff0c;之前一直卡在这个地方。 如果读者可以…

等保2.0的一些问题

测评机构的主要问题 目前国内的测评机构有199家&#xff0c;测评机构主要分为以下几类: 1)北京地区国字头的测评机构&#xff1a;全国199家测评机构中北京就占了30多家&#xff0c;几乎都是国字头的背景&#xff0c;很多挂着都是行业或者部委的名头&#xff0c;这些测评机构基本…

Layui深入

1、代码&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>注册页面</title> <style> .container { max-width: 600px; margin: 0 auto; padding: 20px; …

vue的小练习-翻转单词

先将字符串转成数组&#xff0c;用reverse&#xff08;&#xff09;翻转数组&#xff0c;再转成字符串 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevic…

四六级高频词组5

词组 151. be content with&#xff08;be satisfied with&#xff09; 满足于 be content to do sth. 愿意做某事 152. contrary to &#xff08;in opposition to&#xff09; 与…相反 153. on the contrary 相反 154. contrast…with 把…与…相对&#xff08;对照&am…

elasticsearch 基础语法

elasticsearch 常见语法 有index test_user_index 根据id 获取doc GET test_user_index/_doc/{id}根据doc_id 查询指定数据并根据 字段 amount 金额sum&#xff0c;id 统计 count&#xff0c;corp_id 去除 GET /test_order_index/_search {"size": 0, // 控制返回…

命令行参数(C语言)

目录 什么是命令行参数 main函数的可执行参数 不传参打印 传参打印 IDE传参 cmd传参 命令行参数的应用&#xff08;文件拷贝&#xff09; 什么是命令行参数 概念&#xff1a;命令行参数指的是在运行可执行文件时提供给程序的额外输入信息。它们通常以字符串形式出现&am…

Leetcode—2697.字典序最小回文串【简单】

2023每日刷题&#xff08;五十八&#xff09; Leetcode—2697.字典序最小回文串 实现代码 char * makeSmallestPalindrome(char * s){int len strlen(s);int left 0, right len - 1;while(left < len / 2) {if(s[left] > s[right]) {s[left] s[right];} else {s[ri…

beanutils.populate用法详解

beanutils.populate用法详解 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; BeanUtils.populate用法详解&#xff1a;轻松实现JavaBean属性的自动填充 在Java开发…

第三十四周:文献阅读+LSTM学习

目录 摘要 Abstract 文献阅读&#xff1a;综合EMD-LSTM模型在城市排水管网水质预测中的应用 现有问题 提出方法 EMD-LSTM综合模型 研究框架 结论 Long Short-term Memory(长短期记忆) 1. LSTM的结构 2. Multiple-layer LSTM 3.3 LSTM Example 3. GRU LSTM实现PM2…