【贪心算法】(第二篇)

ops/2024/10/22 14:00:20/

目录

最⼤数(medium)

题目解析

讲解算法原理

编写代码

摆动序列(medium)

题目解析

讲解算法原理

编写代码


最⼤数(medium)

题目解析

1.题目链接:. - 力扣(LeetCode)

2.题目描述

给定⼀组⾮负整数 nums ,重新排列每个数的顺序(每个数不可拆分)使之组成⼀个最⼤的整数。注意:输出结果可能⾮常⼤,所以你需要返回⼀个字符串⽽不是整数。

⽰例1:
输⼊:nums=[10,2]输出:"210"⽰例2:
输⼊:nums=[3,30,34,5,9]输出:"9534330"
提⽰:
◦ 1 <= nums.length <= 100
◦ 0 <= nums[i] <= 10(9)

讲解算法原理

解法(贪⼼):
可以先优化:

将所有的数字当成字符串处理,那么两个数字之间的拼接操作以及⽐较操作就会很⽅便。贪⼼策略:
按照题⽬的要求,重新定义⼀个新的排序规则,然后排序即可。排序规则:
a. 「A拼接B」⼤于「B拼接A」,那么A在前,B在后;b. 「A拼接B」等于「B拼接A」,那么AB的顺序⽆所谓;c. 「A拼接B」⼩于「B拼接A」,那么B在前,A在后;

编写代码

c++算法代码:

class Solution
{
public:string largestNumber(vector<int>& nums) {// 优化:把所有的数转化成字符串vector<string> strs;for(int x : nums) strs.push_back(to_string(x));// 排序sort(strs.begin(), strs.end(), [](const string& s1, const string& s2){return s1 + s2 > s2 + s1;});// 提取结果string ret;for(auto& s : strs) ret += s;if(ret[0] == '0') return "0";return ret;}
};

java算法代码:

java">class Solution
{public String largestNumber(int[] nums) {// 优化:把所有的数转化成字符串int n = nums.length;String[] strs = new String[n];for(int i = 0; i < n; i++) strs[i] = "" + nums[i];// 排序Arrays.sort(strs, (a, b) -> {return (b + a).compareTo(a + b);});// 提取结果StringBuffer ret = new StringBuffer();for(String s : strs) ret.append(s);if(ret.charAt(0) == '0') return "0";return ret.toString();}
}

摆动序列(medium)

题目解析

1.题目链接:. - 力扣(LeetCode)

2.题目描述

如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第⼀个差(如果存在的话)可能是正数或负数。仅有⼀个元素或者含两个不等元素的序列也视作摆动序列。
• 例如, [1, 7, 4, 9, 2, 5] 是⼀个摆动序列,因为差值 (6, -3, 5, -7, 3) 是正
负交替出现的。
• 相反, [1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第⼀个序列是因为它的
前两个差值都是正数,第⼆个序列是因为它的最后⼀个差值为零。
⼦序列可以通过从原始序列中删除⼀些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。
给你⼀个整数数组 nums ,返回 nums 中作为摆动序列的最⻓⼦序列的⻓度。

⽰例1:
输⼊:nums=[1,7,4,9,2,5]
输出:6
解释:整个序列均为摆动序列,各元素之间的差值为(6,-3,5,-7,3)。⽰例2:
输⼊:nums=[1,17,5,10,13,15,10,5,16,8]
输出:7
解释:这个序列包含⼏个⻓度为7摆动序列。
其中⼀个是[1,17,10,13,10,16,8],各元素之间的差值为(16,-7,3,-3,6,-8)。⽰例3:
输⼊:nums=[1,2,3,4,5,6,7,8,9]
输出:2

提⽰:
• 1 <= nums.length <= 1000
• 0 <= nums[i] <= 1000

讲解算法原理

解法(贪⼼):
贪⼼策略:

对于某⼀个位置来说:
◦ 如果接下来呈现上升趋势的话,我们让其上升到波峰的位置;◦ 如果接下来呈现下降趋势的话,我们让其下降到波⾕的位置。因此,如果把整个数组放在「折线图」中,我们统计出所有的波峰以及波⾕的个数即可。

编写代码

c++算法代码:

class Solution
{
public:int wiggleMaxLength(vector<int>& nums) {int n = nums.size();if(n < 2) return n;int ret = 0, left = 0;for(int i = 0; i < n - 1; i++){int right = nums[i + 1] - nums[i]; // 计算接下来的趋势 if(right == 0) continue; // 如果⽔平,直接跳过if(right * left <= 0) ret++; // 累加波峰或者波⾕ left = right; }return ret + 1;}
};

java算法代码:

java">class Solution
{public int wiggleMaxLength(int[] nums) {int n = nums.length;if(n < 2) return n;int ret = 0, left = 0;for(int i = 0; i < n - 1; i++){int right = nums[i + 1] - nums[i]; // 计算接下来的趋势 if(right == 0) continue; // 如果⽔平,直接跳过if(left * right <= 0) ret++; // 累加波峰或者波⾕ left = right;}return ret + 1;}
}


http://www.ppmy.cn/ops/127585.html

相关文章

淘宝客服自动回复机器人-千牛工作台自动回复机器人-集成RPA+知识库+大模型AI工具

淘宝客服自动回复-千牛工作台接待中心自动回复机器人 影刀通过集成RPA知识库大模型AI工具&#xff0c;帮助商家打造24小时在线响应的AI客服 现在已经实现 llike620

electron-vite_9win软件名称和安装包名称设置?

软件名称、安装包名称、卸载软件名称都在electron-builder.yml中设置&#xff1b; 文章分开为什么&#xff0c;因为是新手上路系列; electron-builder.yml artifactName: 安装文件名称; 【 n a m e 和 {name}和 name和{version}是package.json中的name和version】 shortcutNa…

torch.nn.TransformerEncoderLayer层介绍

nn.TransformerEncoderLayer 是 PyTorch 中 Transformer 模型的基本组成部分之一,它用于处理序列数据,通常是用来编码输入的序列特征。在 Transformer 中,编码器由多个这样的层堆叠而成。 每个 TransformerEncoderLayer 由两部分组成: 多头自注意力机制(Multi-head Self-…

postgresql执行计划解读案例

简介 SQL优化中读懂执行计划尤其重要&#xff0c;以下举例说明在执行计划中常见的参数其所代表的含义。 创建测试数据 登录后复制 -- 创建测试表 drop table if exists customers ; drop table if exists orders ; drop table if exists order_items ; drop table if exists pr…

【Eclipse系列】The word is not correctly spelled问题解决

问题描述&#xff1a;在eclipse编写代码时&#xff0c;偶尔会出现了The word is not correctly spelled的错误&#xff0c;但代码执行没有问题&#xff0c;查阅相关资料才发现是eclipse的拼写检查问题。 处理方法&#xff1a;在eclipse下的Window--Preference输入spelling&am…

无迹粒子滤波(Unscented Particle Filter)的matlab例程

文章目录 运行结果位置曲线和速度曲线位置误差曲线和速度误差曲线源代码代码结构源代码目的作者信息代码结构与功能详细说明修改建议总结运行结果 位置曲线和速度曲线 位置误差曲线和速度误差曲线 源代码 代码结构

SpringMVC之 文件上传和下载

1. 文件上传 1.1 前端注意事项 文件上传操作&#xff0c;前端的表单项需要如下三项设置&#xff1a; &#xff08;1&#xff09;input标签的type属性应设置为file&#xff0c;并且注意不要在input标签中设置value属性&#xff0c;因为这可能导致文件上传不成功&#xff1b; …

【Flutter】基础入门:代码基本结构

通过这个简单的 Flutter 示例程序&#xff0c;我们可以快速了解 Flutter 的代码结构&#xff0c;理解每个部分的作用。 import package:flutter/material.dart; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}…