0
点赞
收藏
分享

微信扫一扫

【Linux系统编程】Linux 软件包管理器——yum

清冷的蓝天天 2023-07-13 阅读 66
算法

1.把数组排成最小的数  力扣

//希尔排序解决的
class Solution {
public:
    string minNumber(vector<int>& nums)
    {
        vector<string> ans;
        for (auto sh : nums)
        {
            ans.push_back(to_string(sh));
        }
        int gap = nums.size();
        while (gap > 1)
        {
            gap = gap / 2;
            for (int i = 0; i < nums.size() - gap; i++)
            {
                int end = i;
                //string tmp = ans[i+gap];
                while (end >= 0)
                {
                    if (ans[end] + ans[end + gap] > ans[end + gap] + ans[end])
                    {
                        string tmp = ans[end + gap];
                        ans[end+gap] = ans[end];
                        ans[end] = tmp;
                    }
                    end -= gap;
                   
                }
            }
        }
        string ch;
        for (auto sh : ans)
            ch += sh;
        return ch;
    }
};

2.普扑克牌中的顺子  力扣

class Solution {
public:
    bool isStraight(vector<int>& nums) 
    {
        sort(nums.begin(),nums.end());
        int sum=0;
        int zenonum=0;
        for(int i=0;i<nums.size()-1;i++)
        {
            //判断零的个数
            if(nums[i]==0)
                zenonum++;
            //判断两个不为零的数字是否相等
            if(nums[i]!=0&&nums[i+1]-nums[i]==0)
                return false;
            //判断差值是否相同
            if(nums[i]!=0&&
                nums[i+1]-nums[i]>1)
            {
                sum+=(nums[i+1]-nums[i]-1);
            }
        }
        if(sum>zenonum)
        {
            return false;
        }
        else return true;
        //简单版本
        //return sum<=zenonum;
    }
};

3.最小的k的个数  力扣

class Solution 
{
public:
    vector<int> getLeastNumbers(vector<int>& arr, int k) 
    {
        sort(arr.begin(),arr.end());
        vector<int> rearr;
        for(int i=0;i<k;i++)
        {
            //rearr[i]=arr[i];
            rearr.push_back(arr[i]);

        }
        return rearr;
    }
};

4.数据流中的中位数  力扣

使用优先级队列来做这道题具体看代码

class MedianFinder 
{
    priority_queue<int> enter;                              // 大顶堆
    priority_queue<int, vector<int>, greater<int>> go;   // 小顶堆

public:
   //添加数字到数据结构中
    void addNum(int num)
    {
        enter.push(num);                                    // 加到大顶堆

        go.push(enter.top());                               // 平衡
        enter.pop();

        if (enter.size() < go.size()) 
        {                                               // 维护两个堆元素个数
            enter.push(go.top());
            go.pop();
        }
    }

    //返回数据结构中的中位数
    double findMedian()
    {
        return enter.size() > go.size() ? (double) enter.top() : 
                (enter.top() + go.top()) * 0.5;
    }
};

举报

相关推荐

0 条评论