Leetcode 1387. 将整数按权重排序

1387. 将整数按权重排序

我们将整数 x 的 权重 定义为按照下述规则将 x 变成 1 所需要的步数:

如果 x 是偶数,那么 x = x / 2 如果 x 是奇数,那么 x = 3 * x + 1 比方说,x=3 的权重为 7 。因为 3
需要 7 步变成 1 (3 --> 10 --> 5 --> 16 --> 8 --> 4 --> 2 --> 1)。

给你三个整数 lo, hi 和 k 。你的任务是将区间 [lo, hi] 之间的整数按照它们的权重 升序排序 ,如果大于等于 2 个整数有
相同 的权重,那么按照数字自身的数值 升序排序 。

请你返回区间 [lo, hi] 之间的整数按权重排序后的第 k 个数。

注意,题目保证对于任意整数 x (lo <= x <= hi) ,它变成 1 所需要的步数是一个 32 位有符号整数。

思路

建立 vector<pair<int,int> >ans;进行映射;
重写sort函数,
建立 函数func() 返回每个数的权重

代码

class Solution {
    
    
   
    int func(int m){
    
    
        if(m==1) return 0;
        if(m%2==0) return func(m/2)+1;
        else return func(3*m+1)+1;

    }  
    static bool cmp(pair<int,int> a,pair<int,int> b){
    
      //重写sort
        if(a.second<b.second) return true;
        else if(a.second==b.second) {
    
    
            if(a.first<b.first) return true;
            else return false;
        }
        else return false;
    }
public:
    int getKth(int lo, int hi, int k) {
    
    
        vector<pair<int,int> > ans;
        for(int i=lo;i<=hi;i++){
    
    
            ans.push_back(pair(i,func(i)));
        }
        sort(ans.begin(),ans.end(),cmp);
        return ans[k-1].first;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_45602618/article/details/114048644