【滑动窗口】BISHI47 交换到最大


思路

求解代码

java 复制代码
public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));

        int t = Integer.parseInt(br.readLine());

        while (t-- > 0) {

            String str = br.readLine();
            char[] s = str.toCharArray();
            int n = s.length;

            for (int i = 0; i < n; i++) {
                int max_val = s[i] - '0';
                int max_index = i;
                // 在窗口内寻找能产生最大价值的来源
                for (int j = i; j < Math.min(i + 10, n); j++) {
                    int cur_val = (s[j] - '0') - (j - i);
                    if (cur_val > max_val) {
                        max_val = cur_val;
                        max_index = j;
                    }
                }
                // 物理移动来源字符到当前位置i
                int tmp_index = max_index;
                while (tmp_index > i) {
                    char tmp_val = s[tmp_index];
                    s[tmp_index] = s[tmp_index - 1];
                    s[tmp_index - 1] = tmp_val;
                    tmp_index--;
                }
                // 将当前位置i的字符值更新为计算出的最优值
                s[i] = (char) (max_val + '0');
            }

            out.println(new String(s));
        }
        out.flush();
        out.close();
        br.close();
    }
相关推荐
TU不秃头3 小时前
JS逆向实战五:某海关公示平台分析(瑞数加密)
javascript·爬虫
南境十里·墨染春水5 小时前
C++传记(面向对象)虚析构函数 纯虚函数 抽象类 final、override关键字
开发语言·c++·笔记·算法
无巧不成书02185 小时前
30分钟入门Java:从历史到Hello World的小白指南
java·开发语言
2301_797172755 小时前
基于C++的游戏引擎开发
开发语言·c++·算法
比昨天多敲两行6 小时前
C++ 二叉搜索树
开发语言·c++·算法
Можно7 小时前
深入理解 ES6 Proxy:与 Object.defineProperty 的全面对比
前端·javascript·vue.js
zs宝来了7 小时前
Playwright 自动发布 CSDN 的完整实践
java
Birdy_x7 小时前
接口自动化项目实战(1):requests请求封装
开发语言·前端·python
海海不瞌睡(捏捏王子)7 小时前
C++ 知识点概要
开发语言·c++
桌面运维家8 小时前
VLAN配置进阶:抑制广播风暴,提升网络效率
开发语言·网络·php