【贪心算法】(第二篇)

devtools/2024/10/22 16:34:54/

目录

最⼤数(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/devtools/127887.html

相关文章

leetcode动态规划(八)-不同的二叉搜索树

题目 96.不同的二叉搜索树 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;5示例 2&#xff1a; 输入&#xff…

Redis --- 第四讲 --- 常用数据结构 --- Hash、List

一、Hash哈希类型的基本介绍。 哈希表&#xff1a;之前学过的所有数据结构中&#xff0c;最最重要的。 1、日常开发中&#xff0c;出场频率非常高。 2、面试中&#xff0c;非常重要的考点。 Redis自身已经是键值对结构了。Redis自身的键值对就是通过哈希的方式来组织的。把…

探索 SVG 创作新维度:svgwrite 库揭秘

文章目录 **探索 SVG 创作新维度&#xff1a;svgwrite 库揭秘**背景介绍库简介安装指南基础函数使用实战场景常见问题与解决方案总结 探索 SVG 创作新维度&#xff1a;svgwrite 库揭秘 背景介绍 在数字艺术和网页设计领域&#xff0c;SVG&#xff08;Scalable Vector Graphic…

智能听诊器:宠物健康数据的守护者

智能听诊器的出现&#xff0c;为宠物健康数据的管理提供了新的解决方案。它能够收集宠物的生理数据&#xff0c;并将其安全地存储在云端&#xff0c;这样即使宠物主人更换设备或遗失数据&#xff0c;也能轻松恢复宠物的健康记录。这种数据的长期保存和备份&#xff0c;对于宠物…

超级会员卡积分小程序 可以收银的小程序源码系统 带完整的安装代码包以及搭建部署教程

系统概述 超级会员卡积分可以收银源码系统是一款专为各类商业场景设计的综合性系统。它融合了收银管理、会员管理、积分管理等核心功能&#xff0c;为企业打造了一个全面而灵活的运营平台。 该系统采用先进的技术架构&#xff0c;确保系统的稳定性和可靠性。无论是小型零售店…

【网络安全】护网蓝队之应急响应

蓝队技术栈 Linux入侵排查 系统排查 一、查看历史命令 在Linux系统中&#xff0c;检查历史命令记录是安全审计的重要步骤之一&#xff0c;它可以帮助您了解系统上用户&#xff08;包括潜在的黑客&#xff09;的活动。以下是对您描述的重新表述和补充&#xff1a; 检查历史命…

WebGL编程指南 - WebGL入门

初识绘图流程、缓冲区、着色器、attribute和uniform变量 先画一个蓝色的正方形 html代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content&…

开源呼叫中心系统 FreeIPCC:大模型、知识库、企业官网与企业论坛社区的联动策略

大模型、知识库、企业官网与企业论坛社区的联动策略 作者&#xff1a;开源呼叫中心系统 FreeIPCC 在当今数字化时代&#xff0c;企业为了提升竞争力&#xff0c;不仅需要拥有强大的技术实力&#xff0c;还需要构建一套高效的信息管理和交互系统。大模型、知识库、企业官网以及…