首页 > 编程语言 >算法训练day36 1005.134.135.

算法训练day36 1005.134.135.

时间:2023-10-18 19:33:36浏览次数:47  
标签:1005.134 ratings nums day36 candyVec int result 135 size

算法训练day36 1005.134.135.

1005.K次取反后最大化的数组和

题目

1005. K 次取反后最大化的数组和 - 力扣(LeetCode)

题解

代码随想录 (programmercarl.com)

  • 将数字按绝对值大小排序

  • 优先将绝对值最大的负数取反

  • 剩余步骤将最小非负数取反

    • 注意数组大小顺序,以及处理剩余步骤的操作
  • class Solution
    {
        static bool cmp(int a, int b)
        {
            return abs(a) > abs(b);
        }
    
    public:
        int largestSumAfterKNegations(vector<int> &nums, int k)
        {
            sort(nums.begin(), nums.end(), cmp);
            for (int i = 0; i < nums.size(); i++)
            {
                if (nums[i] < 0 && k > 0)
                {
                    nums[i] = -nums[i];
                    k--;
                }
            }
            if (k % 2 == 1)
                nums[nums.size() - 1] *= -1;
            int result = 0;
            for (int a : nums)
                result += a;
            return result;
        }
    };
    

134.加油站

题目

134. 加油站 - 力扣(LeetCode)

题解

代码随想录 (programmercarl.com)

  • 对gas和cost做差可以得到每个站点净油量

  • 从头累加净油量,如果全部累加之后为负值,则任何站点都不符合要求;如果某站点出现负值,那么从此站点之前任何站点开始都不能完成环路

  • class Solution
    {
    public:
        int canCompleteCircuit(vector<int> &gas, vector<int> &cost)
        {
            int curSum = 0;
            int totalSum = 0;
            int start = 0;
            for (int i = 0; i < gas.size(); i++)
            {
                curSum += gas[i] - cost[i];
                totalSum += gas[i] - cost[i];
                {
                    if (curSum < 0)
                    {
                        start = i + 1;
                        curSum = 0;
                    }
                }
            }
            if (totalSum < 0)
                return -1;
            return start;
        }
    };
    

135.分发糖果

题目

135. 分发糖果 - 力扣(LeetCode)

题解

代码随想录 (programmercarl.com)

  • 先确定左边关系,再确定右边关系

  • class Solution
    {
    public:
        int candy(vector<int> &ratings)
        {
            vector<int> candyVec(ratings.size(), 1);
            // 从前向后
            for (int i = 1; i < ratings.size(); i++)
            {
                if (ratings[i] > ratings[i - 1])
                    candyVec[i] = candyVec[i - 1] + 1;
            }
            // 从后向前
            for (int i = ratings.size() - 2; i >= 0; i--)
            {
                if (ratings[i] > ratings[i + 1])
                {
                    candyVec[i] = max(candyVec[i], candyVec[i + 1] + 1);
                }
            }
    
            int result = 0;
            for (int i : candyVec)
                result += i;
            return result;
        }
    };
    

标签:1005.134,ratings,nums,day36,candyVec,int,result,135,size
From: https://www.cnblogs.com/High-source/p/17773158.html

相关文章

  • BitBake使用攻略--BitBake的语法知识二(转载自https://www.cnblogs.com/chegxy/archive
    目录写在前面1.BitBake中的任务2.任务配置2.1依赖2.1.1内部任务间的依赖2.1.2不同菜谱下的任务间依赖2.1.3运行时态下的依赖2.1.4递归依赖2.1.5任务间的依赖2.2事件2.3校验和3.ClassExtensionMechanism 写在前面这是《BitBake使用攻略》系......
  • 如何预防网络数据丢失203.135.128.x
    数据丢失对于任何规模的企业来说都可能是灾难性的事件,并且代价高昂,这就是预防数据丢失至关重要的原因。企业可以使用各种程序来增强其网络安全性并防止数据丢失。此外,他们可以使用多种策略来管理数据泄露。数据备份和加密。在各种策略中,定期数据备份是企业应该实施的关键策略之一。......
  • [LeetCode] 1354. Construct Target Array With Multiple Sums 多次求和构造目标数组
    Youaregivenanarray target ofnintegers.Fromastartingarray arr consistingof n 1's,youmayperformthefollowingprocedure:let x bethesumofallelementscurrentlyinyourarray.chooseindex i,suchthat 0<=i<n andsettheva......
  • [arc135f] Delete 1, 4, 7, ...
    F-Delete1,4,7,...设\(f(i)\)表示第一次操作后,第\(i\)个位置的数,那么\(f(i)=\lfloor\frac{3i+1}2\rfloor\)那么\(k\)次操作后,第\(i\)个位置上的数就是:\[f(f(...f(f(i))...))=f^k(i)\]设\(cnt_k\)表示\(k\)次操作后剩下的数的个数,那么显然有:\(cnt_i=\lfloor\frac{cnt_......
  • 「HRBUST1355」Leyni,罗莉和XianGe
    原题:http://222.180.160.110:1024/problem/30291考虑建图找最短路很容易想到以每个点作为结点,对同一行,同一列的点连边。但是这样建图边数最大能达到\(1e9\)很经典的操作就是对每一行,每一列,建一个虚点。每个点都连向其对应的行、列的虚点。这样的话,就比同一行(列)的点两两连边更......
  • P1352 没有上司的舞会
    考察算法:树形\(DP\)。题目概述给你一个树,每个结点有一个“上司”。每个节点都有一个快乐指数\(h_i\)。但是,如果有某个节点的上司(父亲),已经来到了舞会,那么它的儿子就不能去了。求:最大的快乐指数(所有人的快乐指数之和)。思路树形\(DP\)。设\(f_{i,0}\)表示以\(i\)作为......
  • Luogu P1352没有上司的舞会
    分析树形dp。定义状态\(dp_{~i,~0}\)为在以\(i\)为根节点的子树中,不选第\(i\)个人的最大快乐值,\(dp_{~i,~1}\)为在以\(i\)为根节点的子树中,选第\(i\)个人的最大快乐值。寻找根节点,然后从根节点开始dfs,当前节点\(u\)的\(dp\)初始状态为\(dp_{~i,~0}=0,~dp_{~i......
  • Luogu P1350车的放置
    分析排列组合题目,但是dp做法。存储当前列的高度\(h_i\),这里反着存,更好转移。定义状态\(f_{i,k}\)为在前\(i\)列放置\(k\)个车的方法数。初始状态\(f_{i,0}=1\)。分析状态转移方程:当前列不放置车时:方法数为\(f_{i-1,j}\)当前列放置车时:方法数为\(f_{i,j-1}*......
  • Go每日一库之135:Ent(Facebook 开源 Golang 实体框架)
    对于后端开发者来说,一款好用的框架能够大大提升应用的开发效率。为了降低开发者使用TiDB的门槛,方便开发者快速连接到TiDB,我们也在和合作伙伴一起,逐步完善面向主流开发语言和框架的连接支持。近日,Facebook开源的Golang实体框架Ent完成了对TiDB数据库的支持。Ent是......
  • [LeetCode] 1353. Maximum Number of Events That Can Be Attended 最多可以参加的会
    Youaregivenanarrayof events where events[i]=[startDayi,endDayi].Everyevent i startsat startDayi andendsat endDayi.Youcanattendanevent i atanyday d where startTimei<=d<=endTimei.Youcanonlyattendoneeventatanytime ......