Leetcode: 1005 K次取反后最大化的数组和
基本思路
这道题的思路比较简单,如果有负数,就先把最大的负数转化成正数,如果全部转换完之后还有k剩余,就将最小的正数反复正负变化。但是需要注意一点代码的写法。
代码注意点
- 定义绝对值从大到小的排序写法
- 判断k--条件的时候需要加上k>0
- k剩余的时候最小的正数反复变化的代码,不需要用循环,直接求余数判断就可以。不然会超出时间限制。
时间复杂度: O(nlogn)
空间复杂度: O(1)
class Solution { static bool cmp(int a, int b) { return abs(a) > abs(b); } public: int largestSumAfterKNegations(vector
& nums, int k) { sort(nums.begin(), nums.end(), cmp); for(int i = 0; i < nums.size(); i++){ if(nums[i] <= 0 && k > 0){ k--; nums[i] = -nums[i]; } } if (k % 2 == 1) nums[nums.size() - 1] *= -1; int result = 0; for(int i = 0; i < nums.size(); i++){ result += nums[i]; } return result; } }; Leetcode: 134 加油站
首先能想到的时候,如果消耗的油量比汽油量大,那肯定是没办法开到的。如果小于的话,肯定有办法开到,但是对于起点就需要讲究了。
因此思路是每个加油站的剩余量rest[i]为gas[i] - cost[i]。i从0开始累加rest[i],和记为curSum,一旦curSum小于零,说明[0, i]区间都不能作为起始位置,因为这个区间选择任何一个位置作为起点,到i这里都会断油,那么起始位置从i+1算起,再从0计算curSum。
时间复杂度:O(n)
空间复杂度:O(1)
class Solution { public: int canCompleteCircuit(vector
& gas, vector & cost) { int totalgas = 0; int totalcost = 0; for(int i = 0; i < gas.size();i++) totalgas += gas[i]; for(int i = 0; i < cost.size();i++) totalcost += cost[i]; if(totalcost > totalgas) return -1; int currest = 0; int start = 0; for(int i = 0; i < gas.size(); i++){ currest += gas[i] - cost[i]; if(currest < 0) { start = i + 1;//更新起始位置 currest = 0;//更新剩余油量 } } return start; } }; Leetcode: 135 分发糖果
这题乍一看题目都没有理解是啥意思,只能学习一下题解
代码随想录
采用了两次贪心的策略:
- 一次是从左到右遍历,只比较右边孩子评分比左边大的情况。
- 一次是从右到左遍历,只比较左边孩子评分比右边大的情况。
在先确定右边评分比左边评分大的情况下,从前向后遍历的过程中candy[i] = candy[i-1]+1是一种代码的写法
在确定左边评分比右边评分大的情况下,从后向前的过程中,cand[i] = max(candy[i], cand[i+1] +1);
时间复杂度O(N)
空间复杂度O(N)
class Solution { public: int candy(vector
& ratings) { vector candy(ratings.size(), 1); for(int i = 1; i < candy.size() ; i++){ if(ratings[i] > ratings[i - 1]) candy[i] = candy[i - 1] + 1; } for(int i = candy.size() - 2; i >= 0; i--){ if(ratings[i] > ratings[i + 1]) candy[i] = max(candy[i], candy[i + 1] + 1); } int result = 0; for(int i = 0; i < candy.size(); i++){ result += candy[i]; } return result; } };
猜你喜欢
- 16天前(希尔顿2021活动)希尔顿集团618盛夏大促开启
- 16天前(fender japan hybrid)Fender东京旗舰店盛大开幕在即,开售商品和店内服务提前揭晓
- 16天前(万达酒店及度假村连续五年荣获“中国饭店集团60强”)万达酒店及度假村连续五年荣获“中国饭店集团60强”
- 16天前(罗马尼亚的匈牙利族自治)江苏赴匈牙利、罗马尼亚开展文旅交流推广活动
- 16天前(曼谷丽思卡尔顿公寓价格)在曼谷丽思卡尔顿酒店CALEŌ 邂逅鸡尾酒的浪漫艺术
- 16天前(中国旅游集团旗下酒店)中国旅游集团酒店控股有限公司战略投资雅阁酒店集团
- 16天前(星级饭店的发展困境)星级饭店转型之路:从市场逻辑到行业实践的深度探索
- 16天前(上海迪士尼 夏天)酷爽夏日,奇妙相伴!来上海迪士尼度假区清凉入夏
- 16天前(世茂海峡大厦多高)巴西地产高管齐聚厦门世茂海峡大厦 共探超高层建筑锻造经验
- 16天前(海南航空现况怎样)用一场直播找到市场扩张新渠道,海南航空做对了什么?
网友评论
- 搜索
- 最新文章
- (2020广州车展哈弗)你的猛龙 独一无二 哈弗猛龙广州车展闪耀登场
- (哈弗新能源suv2019款)智能科技颠覆出行体验 哈弗重塑新能源越野SUV价值认知
- (2021款全新哈弗h5自动四驱报价)新哈弗H5再赴保障之旅,无惧冰雪护航哈弗全民电四驱挑战赛
- (海南航空现况怎样)用一场直播找到市场扩张新渠道,海南航空做对了什么?
- (visa jcb 日本)优惠面面俱到 JCB信用卡邀您畅玩日本冰雪季
- (第三届“堡里有年味·回村过大年”民俗花灯会活动)第三届“堡里有年味·回村过大年”民俗花灯会活动
- (展示非遗魅力 长安启源助力铜梁龙舞出征)展示非遗魅力 长安启源助力铜梁龙舞出征
- (阿斯塔纳航空公司)阿斯塔纳航空机队飞机数量增至50架
- (北京香港航班动态查询)香港快运航空北京大兴新航线今日首航
- (我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉)我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉
- 热门文章