排序问题

给出一序列的正整数,数据之间用逗号分隔,将其按从小到排列,如果序列中存在连续的数,只取最小和最大值。例如,序列为
1,3,4,2,70,100,输出结果为1,4,70,100
思路:直接排序,然后判断有连续的数时,只取连续序列的首尾两个数
代码如下:
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.StreamTokenizer;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main{

    private Scanner cin;
    private PrintWriter cout;
    private static final boolean DEBUG = true;
    private String line;

    private void init()
    {
        try
        {
            if (DEBUG)
            {
                cin = new Scanner(new BufferedReader(new InputStreamReader(new FileInputStream("d:\\program\\intelj\\spoj\\src\\spoj.txt"))));
            }
            else
            {
                cin = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
            }

            cout = new PrintWriter(System.out);
        }
        catch (IOException e)
        {
            e.printStackTrace();;
        }

    }

    private boolean input()
    {
        if (!cin.hasNextLine()) return false;

        line = cin.nextLine();

        return true;
    }

    private void solve()
    {
        String[] str = line.split(",");
        List<Integer> nums = new ArrayList<>();
        for (int i = 0; i < str.length; i++)
        {
            if ("".compareTo(str[i].trim()) == 0) continue;
            nums.add(Integer.parseInt(str[i]));
        }

        List<Integer> ans = new ArrayList<>();
        Collections.sort(nums);
        for (int i = 0; i < nums.size(); i++)
        {
            int j = i;
            while (j + 1 < nums.size() && nums.get(j + 1) - nums.get(j) == 1) j++;
            if (j != i)
            {
                ans.add(nums.get(i)); ans.add(nums.get(j));
            }
            else
            {
                ans.add(nums.get(i));
            }

            i = j;
        }

        for (int i = 0; i < ans.size(); i++)
        {
            if (i != 0) cout.print(" ");
            cout.print(ans.get(i));
        }
        cout.println();

        cout.flush();
    }

    public void run()
    {
        init();
        while (input())
        {
            solve();
        }
    }

    public static void main(String[] args)
    {
        new Main().run();
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在Elasticsearch中,排序问题可能出现在聚合操作中。根据引用的描述,Elasticsearch在排序操作时,会先对每个分片进行排序,然后将每个分片的前17名结果进行再次聚合和排序,最终返回排序后的前5条记录作为结果。这个排序策略来源于官方给出的算式,根据算式,如果请求只发往一个分片,就返回前5条记录;如果请求发送给多个分片,每个分片返回的记录数是5 * 1.5 = 17。这个策略可能导致在返回的数据中,实际的排序结果与期望的排序结果不一致。 因此,如果你在Elasticsearch中遇到排序问题,可以检查是否涉及到了多个分片,并且了解Elasticsearch的排序策略。你可以参考引用提供的链接来了解更多关于Elasticsearch排序操作的详细信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Elasticsearch聚合学习之五:排序结果不准的问题分析](https://blog.csdn.net/boling_cavalry/article/details/90319399)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [3. elasticsearch 汇总排序问题剖析](https://blog.csdn.net/wangzhiqiang123456/article/details/123073114)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kgduu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值