第 479 场周赛Q1——3769. 二进制反射排序

题目链接:3769. 二进制反射排序(简单)

算法原理:

解法:排序

击败40.79%

时间复杂度O(Nlogn)

①计算反射值:将数字转为二进制并反转,转回十进制(0 直接返回 0)

②绑定键值:构建二维数组,存储每个数字的(原数 - 反射值)配对

③自定义排序:按反射值升序排序,反射值相同则按原数升序

④提取结果:遍历配对数组,提取原数生成最终排序数组

Java代码:

java 复制代码
class Solution {
    public int[] sortByReflection(int[] nums) {
        int n=nums.length;
        int[][] pair=new int[n][2];
        for(int i=0;i<n;i++){
            pair[i][0]=nums[i];
            pair[i][1]=conversion(nums[i]);
        }
        Arrays.sort(pair,(a,b)->{
            if(a[1]!=b[1]) return a[1]-b[1];
            return a[0]-b[0];
        });
        int[] ret=new int[n];
        for(int i=0;i<n;i++) ret[i]=pair[i][0];
        return ret;
    }
    public int conversion(int x){
        if(x==0) return 0;
        StringBuffer sb=new StringBuffer();
        while(x!=0){
            int tmp=x%2;
            sb.append(tmp);
            x/=2;
        }
        //2告诉程序前面的字符串是什么进制表示的数字,进而转换成十进制
        return Integer.parseInt(sb.toString(),2);
    }
}
相关推荐
weixin_440730506 小时前
java数组整理笔记
java·开发语言·笔记
weixin_425023006 小时前
Spring Boot 实用核心技巧汇总:日期格式化、线程管控、MCP服务、AOP进阶等
java·spring boot·后端
一线大码6 小时前
Java 8-25 各个版本新特性总结
java·后端
Xの哲學6 小时前
Linux SMP 实现机制深度剖析
linux·服务器·网络·算法·边缘计算
2501_906150566 小时前
私有部署问卷系统操作实战记录-DWSurvey
java·运维·服务器·spring·开源
wuk9986 小时前
使用PCA算法进行故障诊断的MATLAB仿真
算法·matlab
额呃呃7 小时前
二分查找细节理解
数据结构·算法
better_liang7 小时前
每日Java面试场景题知识点之-TCP/IP协议栈与Socket编程
java·tcp/ip·计算机网络·网络编程·socket·面试题
无尽的罚坐人生7 小时前
hot 100 283. 移动零
数据结构·算法·双指针
niucloud-admin7 小时前
java服务端——controller控制器
java·开发语言