C++笔记——20231226——深搜

sort仿函数解法

class Solution {
 public:
     static bool cmp(int a,int b){
         string A="";
         string B="";
         A+=to_string(a);
         A+=to_string(b);
         B+=to_string(b);
         B+=to_string(a);
         return A<B;
     }
     string PrintMinNumber(vector<int> numbers) {
         string  answer="";
         sort(numbers.begin(),numbers.end(),cmp);
         for(int i=0;i<numbers.size();i++){
             answer+=to_string(numbers[i]);
         }
         return answer;
     }
};
 

全排列深搜解法

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

class Solution
{
private:
    vector<string> res;
    int len;
    bool jianzhi(string str1, string str2) {
        for (int i = 0; i < str1.size(); ++i) {
            if (str1[i] > str2[i]) {
                return true;
            }
        }
        return false;
    }
    void dfs(const vector<int>& rawData, vector<bool>& flag, int index, int& cnt, string ret)
    {
        cout << "index = " << index << " " << rawData[index] << " " << flag[index] << endl;
        if (flag[index]) {
            return;
        }
        //sort(res.begin(), res.end()); // 剪枝
        //if (res.size() > 0 && jianzhi(ret, res[0])) {
        //    return;
        //}
        cnt++;
        flag[index] = true;
        ret += to_string(rawData[index]);
        if (cnt == len) {
            res.push_back(ret);
            //cnt--; // 加上这三行,可以在最后少调一次dfs, 三个元素的时候,少调18次。
            //flag[index] = false;
            //return;
        }
        for (int j = 0; j < len; ++j) {
            dfs(rawData, flag, j, cnt, ret);
        }
        cnt--;
        flag[index] = false;
    }
public:
    string getMinString(const vector<int>& rawData)
    {
        len = rawData.size();
        int cnt = 0; 
        vector<bool> flag(len);
        string ret;
        for (int i = 0; i < len; ++i) {
            cout << " --------------" << endl;
            dfs(rawData, flag, i, cnt, ret);
            
            
        }

        sort(res.begin(), res.end());
        for (int i = 0; i < res.size(); ++i)
        {
            cout << "res[" << i << "] = " << res[i] << endl;
        }
        return res[0];
    }
};

int main()
{
    vector<int> test = { 3, 45, 678 };
    Solution s;
    cout << "结果为:" << s.getMinString(test);
    system("pause");
}

  • 28
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C++中,priority_queue是一个容器适配器,用于实现优先级队列。默认情况下,priority_queue是一个大顶堆,也就是说,优先级最高的元素会被放在队列的前面。但是,我们也可以通过自定义排序规则来创建小顶堆。 在C++中,可以通过指定第三个模板参数Compare来自定义排序规则。比如,可以使用std::greater<T>来创建小顶堆,其中T是存储在priority_queue中的元素类型。例如,可以这样定义一个小顶堆的priority_queue: ```cpp std::priority_queue<int, std::vector<int>, std::greater<int>> pq; ``` 这样定义的priority_queue会根据元素的值从小到大进行排序,优先级最高的元素会被放在队列的前面。 另外,priority_queue还提供了一些成员函数来操作队列,比如empty()、size()、top()、push()、pop()等。你可以使用这些成员函数来判断队列是否为空、获取队列的大小、访问队列的第一个元素、向队列中插入元素以及移除队列中的元素。 总结起来,如果你想创建一个小顶堆的priority_queue,可以通过指定std::greater<T>作为第三个模板参数来实现。然后,你可以使用priority_queue提供的成员函数来操作队列。 #### 引用[.reference_title] - *1* [C++ STL——Queue容器、priority_queue](https://blog.csdn.net/LiuXF93/article/details/121119026)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [c++priority_queue详解](https://blog.csdn.net/qq_43679351/article/details/124825229)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值