zoukankan      html  css  js  c++  java
  • leetcode-每日打卡-day 3

    leetcode 每日打卡

    附上kuangbin大佬话激励自己:
    人一我百,人十我万,追逐青春的梦想,怀着自信的心,永不放弃!
    2020.2.10


    记录下来自己做题时得思路,并不一定是最优解

    #406. 根据身高重建队列

    class Solution {
    public:
        vector<vector<int>> ans;
        // 对于二维容器的排序使用lambda表达式会更快且节省内存
        static bool cmp(vector<int> a, vector<int> b)
        {
            return a[0]>b[0] || (a[0]==b[0] && a[1]<b[1]);
        }
        vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
            sort(people.begin(),people.end(),cmp);
            /* lambda表达式排序
            sort(people.begin(),people.end(),[](const auto& a,const auto& b){
                return a[0]>b[0] || (a[0]==b[0] && a[1]<b[1]);
            });
            */
            for(auto it : people)
            {
                cout << it[0] << " " << it[1] << endl;
                ans.insert(ans.begin() + it[1],it);
            }
            return ans;
        }
    };
    

    思路分析: 由于是贪心问题 ,我们可以将队列按照身高非递增排列,如果身高相同按照其前面所排人数个数降序排列
    根据leetcode官方题解的提示我们可以知道,我们先安排身高较高的人,将它放置在与 k 值相等的索引上;再安排身高比之前矮的人,同样的将它放置在与 k 值相等的索引上。

    Tips:
    
    C++ 中vector容器的insert函数可以将元素插入在该容器中
    vector.insert(插入位置,待插入元素)
    
    例如:
    ans : vector<vector<int>> 
    ans.insert(ans.begin() + it[1],it);
    
    res : vector<int>
    res.insert(5,2);
    

    #122. 买卖股票的最佳时机 II

    class Solution {
    public:
        int maxProfit(vector<int>& prices) {
            int ans = 0;
            for(int i = 1;i < prices.size();i ++)
                if(prices[i] > prices[i - 1])
                    ans += (prices[i] - prices[i-1]);
            return ans;
        }
    };
    

    #1029. 两地调度

    思路:没有用dp来做 ,自己想了个贪心策略,先按照去A市和B市差值最大的进行降序排序
    然后从头开始选择城市满足选择该城市的最优条件且人数不超过限制的时候尽可能先满足去该城市面试。

    class Solution {
    public:
        int twoCitySchedCost(vector<vector<int>>& costs) {
            sort(costs.begin(),costs.end(),[](const auto &a,const auto &b){
            return (abs(a[0] - a[1]) > abs(b[0] - b[1]));});
            int n = costs.size() / 2,A = 0, B = 0 , ans = 0;
            for(int i = 0;i < costs.size();i ++)
            {
               if((costs[i][0] >= costs[i][1] && B < n)|| (A >= n && B < n)){
                    B++;ans += costs[i][1];
                }else{
                    A++;ans += costs[i][0];
                }
            }
            return ans;
        }
    };
    
  • 相关阅读:
    Android Studio快速查看apk的MD5、SHA1、SHA256
    aapt remove 命令报 error during crunch archive is toast
    如何快速将MySQL数据库转换为PostgreSQL数据库
    Exception in thread “main“ org.apache.xmlbeans.impl.values.XmlValueDisconnectedException
    idea2021奇葩问题:找不到程序包和符号
    Unable to find method ‘org.gradle.api.tasks.TaskInputs.property
    laravel response返回值精度问题
    中缀、前缀、后缀表达式的运算
    选择排序
    中缀表达式转后缀表达式
  • 原文地址:https://www.cnblogs.com/wlw-x/p/12293428.html
Copyright © 2011-2022 走看看