第 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);
    }
}
相关推荐
To_OC2 小时前
LC 1 两数之和:面试第一道必考题,暴力解法直接被面试官 pass
javascript·算法·leetcode
用户128526116027 小时前
我把祖传Java项目重构后,接口响应从3s砍到了200ms,只改了这几行代码
java
鱼鱼不愚与7 小时前
《原来如此 | 第01期:为什么导航软件能预测红绿灯倒计时?》
算法
Linsk7 小时前
组件 = 模板 + 业务逻辑
java·前端·vue.js
星沉远浦8 小时前
用Gemini高效解决Java代码报错难以定位的问题
java
用户2986985301411 小时前
Word 文档字符级格式化:Java 实现方案详解
java·后端
复杂网络11 小时前
论最小 Agent 计算机的形态
算法
笨鸟飞不快12 小时前
从单个服务到集群:一次完整的性能排查复盘
java·前端
荣码12 小时前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
SamDeepThinking12 小时前
Java微服务练习方式
java·后端·微服务