代码随想录算法训练营第36期DAY36

贪心好难,希望能坚持到柳暗花明那天。

DAY36

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

自己的方法,注意越界条件放在最前面就好:

  1. class Solution {
  2. public:
  3.     int largestSumAfterKNegations(vector<int>& nums, int k) {
  4.         //自己的方法:
  5.         sort(nums.begin(),nums.end());
  6.         for(int i=0;i<nums.size()&&nums[i]<0&&k>0;i++){
  7.             nums[i]*=-1;
  8.             k--;
  9.         }
  10.         sort(nums.begin(),nums.end());
  11.         if(k%2!=0) nums[0]*=-1;
  12.         int res=0;
  13.         for(int n:nums) res+=n;
  14.         return res;
  15.         //报错越界,为什么?注意限制条件的先后顺序,把nums.size()放在最前面,因为越界是不能的,所以首先判断。
  16.     }
  17. };

代码随想录的方法,正好复习一下重载比较符的写法。

记得把自己的重载比较符写进sort里面去。

  1. class Solution {
  2. public:
  3.     static bool mycmp(int a,int b){
  4.         return abs(a)>abs(b);
  5.     }
  6.     int largestSumAfterKNegations(vector<int>& nums, int k) {
  7.         sort(nums.begin(),nums.end(),mycmp);
  8.         for(int i=0;i<nums.size();i++){
  9.             if(nums[i]<0&&k>0) {
  10.                 nums[i]*=-1;
  11.                 k--;
  12.             }
  13.         }
  14.         if(k%2!=0) nums[nums.size()-1]*=-1;
  15.         int res=0;
  16.         for(int n:nums)res+=n;
  17.         return res;
  18.     }
  19. };

134加油站

for循环适合模拟从头到尾的遍历,而while循环适合模拟环形遍历,要善于使用while

  1. 试试暴力法,既考验思维,又考验语法能力:

还是做不到,加油练习:

修改之后:

代码逻辑:先算油量,根据油量再移动index;(看当下能不能走得动,能不能出发)

  1. class Solution {
  2. public:
  3.     int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
  4.         for(int i=0;i<gas.size();i++){
  5.             //先算油量,根据油量再移动index;(看当下能不能走得动,能不能出发)
  6.             int store=0,index=i;
  7.             store+=gas[i]-cost[i];
  8.             if(store<0continue;
  9.             index=(index+1)%gas.size();
  10.             while(store>=0&&index!=i){
  11.                 store+=gas[index]-cost[index];
  12.                 index=(index+1)%gas.size();
  13.             }
  14.             if(store>=0&&index==i) return i;
  15.         }
  16.         return -1;
  17.     }
  18. };

没问题了,只是会超时。有提升就好。

  1. 后退法_全局贪心

知道思想,代码还是写不出来。思想也没对。

  1. 全局油量不够
  2. 累加过程没有出现负值,可行
  3. 出现负值,起点后退。
  1. class Solution {
  2. public:
  3.     int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
  4.         int mi=INT_MAX;
  5.         int cursum=0;
  6.         for(int i=0;i<gas.size();i++){
  7.             cursum+=gas[i]-cost[i];
  8.             if(cursum<mi) mi=cursum;
  9.         }
  10.         if(cursum<0return -1;
  11.         if(mi<0){
  12.             for(int i=gas.size()-1;i>=0;i--){
  13.                 mi+=gas[i]-cost[i];
  14.                 if(mi>=0return i;
  15.             }
  16.         }
  17.         else return 0;
  18.         return -1;
  19.     }
  20. };

  1. 前进法_局部贪心

[0,i]一旦负数了,就从[i+1开始选起点。(家产败光了的意思——用光了留下当时的剩余,表明自己的都不够用,所以要换到下一个起点)。之后呢?不会了:for遍历的就是起点,找起点就好了。

前进法待二刷:

  1. class Solution {
  2. public:
  3.     int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
  4.         int cursum=0,totalsum=0,start=0;//标记起点,total判定一圈油量
  5.         for(int i=0;i<gas.size();i++){
  6.             totalsum+=gas[i]-cost[i];
  7.             cursum+=gas[i]-cost[i];
  8.             if(cursum<0){
  9.                 start=i+1;
  10.                 cursum=0;
  11.             }
  12.         }
  13.         if(totalsum<0return -1;
  14.         return start;
  15.     }
  16. };

135分发糖果,困难

待二刷:

  1. class Solution {
  2. public:
  3.     int candy(vector<int>& ratings) {
  4.         vector<intcandy(ratings.size(),1);
  5.         if(ratings.size()==1return 1;
  6.         for(int i=1;i<ratings.size();i++){
  7.             if(ratings[i]>ratings[i-1]){
  8.             candy[i]=candy[i-1]+1;
  9.             }
  10.         }
  11.         for(int i=candy.size()-2;i>=0;i--){
  12.             if(ratings[i]>ratings[i+1])
  13.             candy[i]=max(candy[i+1]+1,candy[i]);
  14.         }
  15.         int res=0;
  16.         for(int r:candy) res+=r;
  17.         return res;
  18.     }
  19. };

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/14019.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue中数据已经改变了,但是table里面内容没更新渲染!

解决方案&#xff1a; 给table或者el-table标签上添加一个动态key值&#xff0c;只要数据发生改变&#xff0c;key值变动一下即可 标签上&#xff1a; :key“timeStamp” 初始data&#xff1a;timeStamp:0, 更新数据&#xff1a;this.timeStamp 这样每次更新数据&#xff…

ChannelHandler和ChannelPipeline之一

目录 ChannelHandler Channel的生命周期 ChannelHandler的生命周期 ChannelInboundHandler接口 ChannelOutboundHandler接口 ChannelHandler适配器 资源管理 ChannelPipeline接口 修改ChannelPipeline 触发事件 ChannelHandler Channel的生命周期 Channel定义了一组和…

整理前期PS问题

前面问题汇总 一、字体显示 字体不显示主要有三个原因&#xff0c;其实在这里面我已经打了“国风”两字&#xff0c; 字体太大&#xff0c;输入框小 只需要把输入框拉大/改变字体 经过字体修改还没有&#xff0c;那就是字体颜色和背景一致 二、字体横竖排变换 将文字打好…

java中的Map集合

一、Map集合概述 1、Map集合以键值对的形式存储元素&#xff0c;是将键映射到值的对象 2、要求&#xff1a; &#xff08;1&#xff09;一个键最多映射一个值 &#xff08;2&#xff09;键不能重复&#xff0c;值可以重复 二、HashMap类 1、是Map接口的实现类 2、特点&a…

Webpack源码泄露到Vue快速入门

前言 1.webpack 源码泄露 1.1漏洞简介 1.2存在泄露的站点 1.3 如何判断是否存在漏洞 方法1: 方法2: 1.4.如何将js.map文件还原为项目文件 1. 4.1查看npm版本 1.4.2 安装reverse-sourcemap 1. 4.3.检查是否安装 ​1. 4.4 使用reverse-sourcemap进行js.map文件还原操作…

代码随想录-Day16

104. 二叉树的最大深度 方法一&#xff1a;深度优先搜索 class Solution {public int maxDepth(TreeNode root) {if (root null) {return 0;} else {int leftHeight maxDepth(root.left);int rightHeight maxDepth(root.right);return Math.max(leftHeight, rightHeight) …

深入解读HTTP状态码:分类、含义、应用场景与故障排查指南

HTTP状态码作为超文本传输协议(HTTP)响应的重要组成部分,为客户端与服务器之间的交互提供了清晰的状态反馈。本文将全面展开对HTTP状态码的深入解读,涵盖其分类、具体含义、典型应用场景以及在故障排查中的实用价值,旨在帮助开发者与运维人员更好地理解和应对各类HTTP响应…

Postman使用技巧

Postman是一款广泛使用的API开发和测试工具&#xff0c;专为简化Web服务API的开发、测试、文档编制和协作过程而设计。它支持各种HTTP请求方法&#xff0c;包括GET、POST、PUT、DELETE等&#xff0c;允许用户轻松地构建和发送请求&#xff0c;以及检查响应。 本文介绍几个提升效…

vscode 的 AI 协助插件 Tabnine / Codeium

4.1、Tabnine 描述&#xff1a;Tabnine 是一款基于深度学习技术的代码自动补全工具。该插件支持多种编程语言&#xff0c;包括 Python、JavaScript、TypeScript、Java 和 Go 等。它可以根据您输入的代码段和上下文信息&#xff0c;预测并推荐可能的代码补全选项&#xff0c;从而…

GitHub的原理及应用详解(三)

本系列文章简介&#xff1a; GitHub是一个基于Git版本控制系统的代码托管平台&#xff0c;为开发者提供了一个方便的协作和版本管理的工具。它广泛应用于软件开发项目中&#xff0c;包括但不限于代码托管、协作开发、版本控制、错误追踪、持续集成等方面。 GitHub的原理可以简单…

每周一算法:Prim算法求最小生成树

题目链接 [最短网络] 题目描述 Farmer John 被选为他们镇的镇长&#xff01;他其中一个竞选承诺就是在镇上建立起互联网&#xff0c;并连接到所有的农场。当然&#xff0c;他需要你的帮助。 FJ 已经给他的农场安排了一条高速的网络线路&#xff0c;他想把这条线路共享给其他…

第4章 网络层

4.1网络层的功能 1.异网互联:使用路由器连接数据链路层和物理层均不同的网络。【路由器连接的设备物理层&#xff0c;数据链路层和网络层可以不同】 2.转发:从一个端口输入保存后选择另一个端口转发【微观】 3.路由选择:选择合适的路由线路【宏观】 4.SDN的基本概念: 数据平…

【shell】脚本案例2

shell案例&#xff1a; 选择mysql版本 在上面的示例中&#xff0c;没有办法在选择了水果后退出&#xff0c;它会一直让我们选择。如果我们希望选择后就退出&#xff0c;则需要在脚本添加 break 打印九九乘法表 打印三角形&#xff08;10行10列&#xff09; 循环输出0~10之…

目前流行的前端框架有哪些?

目前流行的前端框架有很多&#xff0c;它们可以帮助开发者快速构建高质量的前端应用程序。本文将介绍一些目前比较受欢迎的前端框架&#xff0c;并分析它们的优缺点。 React React 是一个由 Facebook 开发的开源前端JavaScript库&#xff0c;用于构建用户界面&#xff0c;尤其…

Ollama本地运行 Mistral-7B-Instruct-v0.3

Ollama本地运行 Mistral-7B-Instruct-v0.3 0. 引言1. 运行 mistral:7b-instruct-v0.3-q8_02. 简单问个问题 0. 引言 Mixtral 5月23日发布了 Mistral-7B-Instruct-v0.3&#xff0c;支持 function calling&#xff0c;今天简单运行一下。 1. 运行 mistral:7b-instruct-v0.3-q8_…

头歌03-最长公共子序列

给定两个无序的序列 X{x_1,x_2,⋯,x_m } 和 Y{Y_1,Y_2,⋯,Y_n } ,求 X 和 Y 长度最长的公共子序列。 序列的子序列是指&#xff1a;从给定序列中随意地&#xff08;不一定连续&#xff09;去掉若干个字符&#xff08;可能一个也不去掉&#xff09;后所形成的字符序列。如果序列…

【AI如何帮你编写测试用例并输出表格格式】

1、工具&#xff1a;顺便使用一款生成式AI即可&#xff0c;此处用的是ChatGPT&#xff0c;Kimi这两个工具试验。 2、首先要拿到需求文档&#xff0c;根据需求文档向AI发出如下指令&#xff08;Prompt&#xff09; “请根据下面这段需求&#xff0c;编写测试用例&#xff1a; …

在CentOS上手动配置静态IP地址及多网卡路由策略

在管理服务器时&#xff0c;手动配置静态IP地址是一项基本而关键的任务&#xff0c;尤其是在涉及多网卡的复杂网络环境中。静态IP配置确保了服务器的稳定访问&#xff0c;有助于避免由于IP地址动态变化引起的潜在问题。本文将探讨如何在CentOS系统中手动设置静态IP地址&#xf…

python从0开始学习(十二)

目录 前言 1、字符串的常用操作 2、字符串的格式化 2.1 格式化字符串的详细格式&#xff08;针对format形式&#xff09; ​编辑 总结 前言 上一篇文章我们讲解了两道关于组合数据类型的题目&#xff0c;本篇文章我们将学习新的章节&#xff0c;学习字符串及正则表达式。 …

字节跳动(校招)算法原题

大模型"价格战"越演越烈 昨天的 文章 提到&#xff0c;自从 5 月 15 号&#xff0c;字节跳动发布了击穿行业底价的豆包大模型后&#xff0c;各大厂家纷纷跟进降价&#xff0c;而且都不是普通降价&#xff0c;要么降价 90% 以上&#xff0c;要么直接免费。 今天是豆包…