48.哀家要长脑子了!

news2024/12/23 6:45:49
1.376. 摆动序列 - 力扣(LeetCode) 

 看问题抓本质 本质!!识别和追踪数组中元素值的变化趋势。摆动序列是什么,什么是摆动序列,就是差值正负正负的来,最后要求摆动序列的子序列的长度的话,统计这个来回有多少次就好,没必要硬是把摆动序列数组求出来,想什么呢你!

C++版

class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
        /* 
           初始化为1,因为仅有一个元素的序列也视为摆动序列
           所以任何单个元素本身可以被视为一个长度为1的摆动序列
           up表示以一个上升的趋势结束的最长摆动子序列的长度
        */
        int up = 1, down = 1;

        for(int i = 1; i < nums.size(); i++){
            // 说明当前元素形成了一个上升的趋势
            // 此时最长摆动子序列应该是在前一个下降趋势的基础上加1
            if(nums[i] > nums[i-1])
                up = down + 1;
            else if(nums[i] < nums[i-1])
                down = up + 1;
        }
        // 因为最终的最长摆动子序列可能以一个上升或下降的趋势结束
        // 所以需要返回up或down中的最大值作为结果
        return max(up, down);
    }
};

Java版

class Solution {
    public int wiggleMaxLength(int[] nums) {
        int up = 1, down = 1;
        for(int i = 1; i < nums.length; i++) {
            if(nums[i] > nums[i-1])
                up = down + 1;
            else if(nums[i] < nums[i-1])
                down = up + 1;
        }
        return Math.max(up, down);
    }
}
2.135. 分发糖果 - 力扣(LeetCode)

 我感觉我的阅读理解能力不好。。。每次抓不到问题的本质有很大一部分是这个原因。

要满足的条件:

        Ra Rb:a的成绩高于b a分的糖果多于b --从左往右看

                      b的成绩高于a b分的糖果多于a --从右往左看

所以来两次左右遍历数组,分别构造满足这两个条件的糖果数组,最后在二者之间去较小的就好。

我觉得这个贪心就贪在眼前,对于一个学生的成绩,我只要看他相邻的学生就好,让他与相邻的学生满足条件,因为要最少的糖果,分糖果的时候也是1个1个加。

C++版

class Solution {
public:
    int candy(vector<int>& ratings) {
        vector<int> left(ratings.size(), 1);
        vector<int> right(ratings.size(), 1);

        for(int i = 1; i < ratings.size(); i++)
            if(ratings[i] > ratings[i-1])
                right[i] = right[i-1] + 1;
        
        for(int i = ratings.size()-2; i >= 0; i--)
            if(ratings[i] >ratings[i+1])
                left[i] = left[i+1] + 1;

        int res = 0;
        for(int i = 0; i < ratings.size(); i++)
            res += left[i] > right[i] ? left[i] : right[i];

        return res;
    }
};

Java版

class Solution {
    public int candy(int[] ratings) {
        int[] left = new int[ratings.length];
        int[] right = new int[ratings.length];

        Arrays.fill(left, 1);
        Arrays.fill(right, 1);
        for(int i = 1; i < ratings.length; i++)
            if(ratings[i] > ratings[i-1])
                right[i] = right[i-1] + 1;
        
        for(int i = ratings.length - 2; i >= 0; i--) 
            if(ratings[i] > ratings[i+1])
                left[i] = left[i+1] + 1;

        int res = 0;
        for(int i = 0; i < ratings.length; i++) 
            res += left[i] > right[i] ? left[i] : right[i];

        return res;
    }
}
3.322. 零钱兑换 - 力扣(LeetCode)

哎呀,其实我感觉准备蓝桥杯的时候好像做过这道题。。。然而还是不会。。我讨厌你这么蠢。

dp[i]:凑齐金额 i 所需要最少的硬币,初始化为一个比较大的数,用来判断最后是否有硬币可以来凑齐这个金额,补药用INT_MAX,他参与计算的时候很可能会溢出

外循环遍历金额,内循环遍历每一种硬币

dp[i -coins[j]] + 1

意味着金额 i-coins[j] 所需的最小硬币数,加上当前硬币coins[j] 后,总硬币数为dp[i -coins[j]] + 1

C++版

class Solution {
public:
    int coinChange(vector<int>& coins, int amount) {

        vector<int> dp(amount+1, amount+1);、
        // 金额为0 需要0个硬币
        dp[0] = 0;
        for(int i = 1; i <= amount; i++) {
            for(int j = 0; j < coins.size(); j++) {
                // 此时选择的硬币小于金额 可以考虑使用这枚硬币去凑
                if(i >= coins[j]) {
                    // 有更小的选择吗。。。
                    dp[i] = min(dp[i], dp[i-coins[j]]+1);
                }
            }
        }
        return dp[amount] > amount ? -1 : dp[amount];
    }
};

Java版

 

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

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

相关文章

如何在KEIL的Debug模式下导出数据

我们知道&#xff0c;利用Keil编写程序时&#xff0c;可以实时显示数据的值&#xff0c;如上图所示&#xff0c;实时显示Voltage和fre的值&#xff0c;那如何导出该数据呢&#xff0c;下边进行详细说明。 首先&#xff0c;进入Debug模式&#xff0c;点击调试里边的函数编辑器。…

计算机毕业设计 基于Python的摄影平台交流系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

GPU、AI、CUDA

文章目录 1.千层面层多层 2. CPU与GPU架构差异3.大规模矩阵操作4.专为并行计算设计的库 1.千层面 神经网络的本质是千层面&#xff0c;由一层一层的线性代数方程组成&#xff0c;每个方程都表示一段数据与另一段数据相关的可能性 层 神经网络的每一次层可以看作是一次线性代…

泰勒图 ——基于相关性与标准差的多模型评价指标可视化比较-XGBoost、sklearn

1、基于相关性与标准差的多模型评价指标可视化比较 # 数据读取并分割 import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split plt.rcParams[font.family] = Times New Roman plt.rcParams[axes.unic…

工单管理系统功能解析,企业运营效率提升利器

工单管理系统如ZohoDesk提供工单生成分配、跟踪、数据分析、客户服务管理及移动兼容等功能&#xff0c;提升效率、增强服务、便于监管和降低成本&#xff0c;是现代企业信息化建设的重要部分。 一. 工单管理系统一般有哪些功能 1. 工单生成与分配 工单管理系统的基础功能是创…

Webstorm 中对 Node.js 后端项目进行断点调试

首先&#xff0c;肯定需要有一个启动服务器的命令脚本。 然后&#xff0c;写一个 debug 的配置&#xff1a; 然后&#xff0c;debug 模式 启动项目和 启动调试服务&#xff1a; 最后&#xff0c;发送请求&#xff0c;即可调试&#xff1a; 这几个关键按钮含义&#xff1a; 重启…

8.数据结构与算法-双向链表

双向链表的结构定义 从第二个指针找到下一个元素 从第一个指针找到上一个元素 双向循环列表 从第二个指针找到下一个元素&#xff0c;第二个指针可以往前循环找到链表开头 从第一个指针找到上一个元素&#xff0c;第一个指针可以往前循环昭侯链表结尾 双向链表的插入 双向链…

NLP:BERT的介绍并使用该模型计算文本相似度

1. BERT 1.1 Transformer Transformer架构是一种基于自注意力机制(self-attention)的神经网络架构&#xff0c;它代替了以前流行的循环神经网络和长短期记忆网络&#xff0c;已经应用到多个自然语言处理方向。   Transformer架构由两个主要部分组成&#xff1a;编码器(Encod…

uniapp中实现评分组件,多用于购买商品后,对商品进行评价等场景

前言 uni-rate是uniapp框架中提供的一个评分组件。它可以用于用户评价、打分等场景。uni-rate组件可以根据设定的星星总数&#xff0c;展示用户评分的效果&#xff0c;用户可以通过点击星星或滑动星星的方式进行评分。同时&#xff0c;uni-rate组件也支持自定义星星图标、星星…

关于CSS Grid布局

关于CSS Grid布局 实际效果参考 参考代码 <template><view class"baseInfo"><up-image class"cover" height"160rpx" width"120rpx" :src"bookInfo.cover"><template #error><view style"…

疾风大模型气象,基于气象数据打造可视化平台

引言 随着气象数据的广泛应用&#xff0c;越来越多的行业依赖天气预报与气候分析来做出决策。从农业、航空、能源到物流&#xff0c;气象信息无时不刻影响着各行各业的运作。然而&#xff0c;气象数据本身复杂且多样&#xff0c;如何将这些数据转化为直观、易于理解的图形和信…

MetaJUI v0.4 遇到的一些问题及解决办法记录

1、Unity3d 版本 2022.3.29f1。 2、MetaJUI v0.4 的下载&#xff0c;https://download.csdn.net/download/xingchengaiwei/89334848 3、将MetaJUI v0.4解压&#xff0c;用Unity3d 打开项目&#xff0c;会出现如下问题&#xff0c;按照图中提示操作即可。 4、打开工程后会出现…

第三人称射击游戏人物瞄准仰角的控制方案

这个功能有多种方案实现&#xff0c;总体可以分为两类&#xff1a; 1.改变腰的旋转&#xff1b; 2.改变手臂和头的旋转&#xff1b; 其中方案1&#xff1a; 只要转动腰一个骨骼&#xff0c;比较简单&#xff1b; 但是因为腰以上的部分都不动&#xff0c;第三人称比较僵硬&…

tk.mapper框架使用

说明&#xff1a;tk.mapper是一款DAO框架&#xff0c;也是基于Mybatis的&#xff0c;个人感觉&#xff0c;他是基于MyBatis和MyBatis-plus、MyBatis-Flex之间的过渡框架——能调用DAO的API&#xff0c;不手写SQL&#xff0c;但功能没有后面这两款框架多。本文介绍tk.mapper框架…

PyInstaller打包并设置图标

PyInstaller 是一个用于将 Python 代码打包成独立可执行文件的工具。如果你的 Python 代码中使用了一些资源文件&#xff08;如图片、音频、配置文件等&#xff09;&#xff0c;那么你需要将这些资源文件一起打包到可执行文件中&#xff0c;以便在运行时能够访问这些资源。 以…

STM32新建工程-基于库函数

一、创建一个新工程 我这里选择STM32F103C8的型号&#xff0c;然后点击OK。 keil5里面的小助手&#xff0c;暂时不用&#xff0c;叉掉 二、为工程添加文件和路径 在工程模板中还需要添加启动文件、系统头文件、系统时钟文件&#xff0c;创建一个文件夹start&#xff0c;将下面…

【韩顺平Java笔记】第5章:程序控制结构

文章目录 102. 回顾上一章节103. 顺序控制103.1 顺序控制 104. 单分支使用104.1 分支控制 if-else 介绍104.2 单分支 105. 单分支流程图106. 双分支使用107. 双分支流程图108. 双分支练习题109. 多分支使用109.1 多分支的流程图 110. 多分支练习1111. 多分支练习2112. 嵌套分支…

Fibonacci数列最小步数

1.题目&#xff1a; 2.解析&#xff1a; 让a,b,c回滚构造斐波那契数列 &#xff1a;ab, bc, cab; 输入的数 n小于c,在b,c之间&#xff0c;只要 n1 或者 n-1&#xff08;贪心思想&#xff1a;n只加一或者只减一&#xff09; 最后再求n-b,c-n的最小值&#xff0c;获得最小步数 …

《Linux从小白到高手》理论篇(八):Linux的进程管理详解

本篇将介绍Linux的进程管理相关知识&#xff0c;并将深入介绍Linux的进程间相互通信。 进程就是运行中的程序&#xff0c;一个运行着的程序&#xff0c;可能有多个进程。 比如Oracle DB&#xff0c;启动Oracle实例服务后&#xff0c;就会有多个进程。 Linux进程分类 在 Linux…

csp-j模拟一补题报告

前言 又要开始写补题报告了&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; &#xff08;“关于二进制中1的个数的研究”这篇文章可能会延期&#xff09; 第一题 题目 交替出场 (alter.cpp/c) 问题描述 给定一个字符串&#xff0c…