首页 > 其他分享 >acwing113. 特殊排序

acwing113. 特殊排序

时间:2023-03-18 21:45:10浏览次数:52  
标签:compare 特殊 acwing113 int vector bool ans 排序

题目来源

acwing

题目难度

2星

算法标签

二分

参考程序

// Forward declaration of compare API.
// bool compare(int a, int b);
// return bool means whether a is less than b.

class Solution {
public:
    vector<int> specialSort(int N) {
        vector<int> ans(1, 1); //(a, b)初始化a个b
        for(int i = 2; i <= N; i ++)
        {
            int n = ans.size();
            int l = 0, r = n-1;
            while(l < r)
            {
                //找到可以插入位置的前一个数
                int mid = (l+r+1)/2;
                if(compare(i, ans[mid])) // i < ans[mid]
                {
                    //左半边一定有解,右半边不一定
                    r = mid-1;
                }
                else
                {
                    //右半边一定有解, 左半边不一定
                    l = mid;
                }
            }
            //对于l==r==0还需要重新判断一下是不
            //是指针无奈才留在这里,实际要再往左
            if(l == 0 && compare(i, ans[0])) //i < ans[i]
            {
                l --;
            }
            ans.push_back(i);
            //这里n-1是倒数第二个数
            for(int k = n-1; k > l; k --) 
            {
                swap(ans[k+1], ans[k]);
            }
        }
        return ans;
    }
};

标签:compare,特殊,acwing113,int,vector,bool,ans,排序
From: https://www.cnblogs.com/chaosliang/p/17231889.html

相关文章

  • 【基础算法】简单排序-冒泡排序
    【基础算法】简单排序-冒泡排序BubbleSortisthesimplestsortingalgorithmthatworksbyrepeatlyswappingtheadjacentelementsiftheyareinthewrongorde......
  • 常用排序算法
    1.冒泡排序冒泡排序:相邻的数两两比较,小的放前面,大的放后面。冒泡排序(BubbleSort)也是一种简单直观的排序算法。它重复的遍历过要排序的数列,一次比较相邻的两个元素,如果......
  • 希尔排序、快速排序、KMP算法
    希尔排序背景对N个样本进行排序,顺序为从小至大步骤第一步:对样本不断确定分组的间隔gap,确定分组次数X-》对应第一个循环第一次gap=N/2;第二次gap=gap/2;......
  • 排序组件的使用--OrderingFilter模块的使用
    1.排序组件(OrderingFilter)的用法:  2.响应结果的传参格式:ordering=字段名(不带‘-’是正序,带‘-’是倒序):  3.路由:  ......
  • 一个乱七八糟的冒泡排序
    Input:任意多组数据(保证最多只有5组)对于每组数据,有两行数第一行数n,代表接下来将有n个数第二行数有n个乱序数注意:冒泡排序的越界#include<iostream>usingnamespac......
  • 对n个整数冒泡排序
    对n个整数数进行冒泡排序步骤:首先需要一个整形数组来存放整数,然后输入n个数到数组中去然后对数组中的值两两比较,把最大(小)的放到最后去#include<stdio.h>#defineMAX......
  • c代码实现冒泡排序
    #define_CRT_SECURE_NO_WARNINGS#include<stdio.h>voidbubble_sort(intarr[],intsz){inti=0;for(i=0;i<sz-1;i++){intj=0;for(j=0;......
  • 漫画:什么是选择排序算法?
    选择排序是一种简单直观的算法,今天我们聊聊选择排序的思想,代码以及复杂度排序思想一天,小一尘和师傅下山去了,在集市中路经一个水果摊,只见水果摊上摆着色泽基本相同但大......
  • 漫画:什么是冒泡排序算法?
    面试官:写一个冒泡排序吧冒泡排序是一个比较经典和简单的排序算法,今天我们从从算法本身,时间复杂度以及稳定性方面来看看冒泡排序,这些方面也是研究其他排序算法的一般思......
  • 漫画:什么是插入排序算法?
    面试官:聊聊插入排序插入排序是一种比较简单直观的排序算法,适用处理数据量比较少或者部分有序的数据,今天我们来聊聊插入排序一、排序思想只见慧能拿出了一副牌,洗......