【贪心算法】(第二篇)

news2024/10/22 14:00:02

目录

最⼤数(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算法代码:

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算法代码:

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.coloradmin.cn/o/2220844.html

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

相关文章

Java网络编程的基础:计算机网络

在学习 Java 网络编程之前&#xff0c;我们先来了解什么是计算机网络。 计算机网络是指两台或更多的计算机组成的网络&#xff0c;在同一个网络中&#xff0c;任意两台计算机都可以直接通信&#xff0c;因为所有计算机都需要遵循同一种网络协议。 下面是一张简化的网络拓扑图…

工业以太网之战:EtherCAT是如何杀出重围的?

前言 EtherCAT 是一种开放的实时工业以太网协议&#xff0c;由德国倍福公司开发并在 2003 年 4 月的汉诺威工业博览会上首次亮相&#xff0c;目前由 EtherCAT 技术协会&#xff08;ETG&#xff09;进行维护和推广。经过 21 年的不断发展&#xff0c;EtherCAT 显示出极强的生命…

2.1_Linux发展与基础

Linux基础知识 Shell 命令执行环境&#xff1a; 命令提示符的组成&#xff1a;(用户名主机名)-[当前路径]权限提示符,例&#xff1a;&#xff08;kali㉿kali)-[~]$ ~ 表示所在目录为家目录:其中root用户的家目录是/root&#xff0c;普通用户的家目录在/home下 # 表示用户的权…

Python酷库之旅-第三方库Pandas(148)

目录 一、用法精讲 671、pandas.Timestamp.day_name方法 671-1、语法 671-2、参数 671-3、功能 671-4、返回值 671-5、说明 671-6、用法 671-6-1、数据准备 671-6-2、代码示例 671-6-3、结果输出 672、pandas.Timestamp.dst方法 672-1、语法 672-2、参数 672-3、…

JAVA二手交易发布闲置好物回收系统小程序源码

&#x1f389;二手交易新风尚&#xff01;发布闲置好物&#xff0c;回收系统助你环保又赚钱✨ &#x1f3e0;闲置物品大变身&#xff0c;开启绿色生活新篇章&#x1f33f; 嘿宝贝们&#xff01;是不是家里总有一些东西&#xff0c;明明还很新却因为种种原因被束之高阁&#x…

PROFINET开发或EtherNet/IP开发嵌入式板有用于工业称重秤

这是一个真实案例&#xff0c;不过客户选择不透露其品牌名称。稳联技术的嵌入式解决方案助力工业称重设备制造商连接至任意工业网络。多网络连接使得称重设备能够轻松接入不同的控制系统&#xff0c;进而加快产品的上市时间。 我们找到了稳联技术的解决方案。他们成熟的技术与专…

使用Shell脚本对Java应用等服务进行启停控制(支持批量)

通过shell脚本对Java服务启停进行控制。支持单个服务和多个服务的 start、stop、status、restart。支持自定义启动命令。&#xff08;不限于Java服务&#xff0c;适用于各类通过命令行启动的服务&#xff09; 脚本名称为 runjar.sh , 底部提供源码。通过三部分进行说明&#xf…

【Dv2Admin】Django配置线上ws反向代理

在 Web 应用程序的部署过程中,安全性、稳定性和实时通信是开发者们普遍关注的重点。Django 是一个非常流行的 Web 框架,常与 Nginx 配合使用,以便实现反向代理、负载均衡以及 SSL 加密等功能。除此之外,实时功能(如 WebSocket)也是现代应用中经常使用的技术。 在项目中实…

用户一键注册登录(一)- 对接短信平台

1. 流程图 2. 详细设计 2.1 用户表结构设计 CREATE TABLE users (id varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,mobile varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 手机号,nickname varchar(16) CHARACT…

回忆Web编程的岁月变迁

目录 引子 记忆的片断 CGI / ISAPI 何为 CGI / ISAPI ? 一个小插曲 ASP与我的ASP Builder ASP编程技术 何为 Windows DNA &#xff1f; 什么是 COM ? ASP.NET 什么是 ActiveX ? IntraBuilder与我的InterBuilder 结尾 引子 凌晨三点醒了&#xff0c;大多的时候是…

数据结构(JAVA)JDK17语法新增特性

目录 yield关键字var关键字空指针异常密封类接口中的私有方法instanceof其他 yield关键字 yield关键字用于case的代码块中返回值。 正常switch语句 public static void main(String[] args) {int result 0;String str "a";switch (str) {case "a" :resu…

根据发生异常的汇编指令以及函数调用堆栈,从内存的角度出发,估计出问题的可能原因,确定排查方向,快速定位C++软件问题

目录 1、前言 2、初步分析dump文件 3、加载更多模块的pdb文件&#xff0c;可能能看到更多行的函数调用堆栈 4、从内存的角度去看&#xff0c;估计是访问了野指针导致的&#xff0c;沿着这个怀疑的方向快速地定位了问题 5、最后 C软件异常排查从入门到精通系列教程&#xf…

【安当产品应用案例100集】024-BYOE及BYOK在IaaS场景中的应用

在云计算环境中&#xff0c;尤其是涉及到敏感数据时&#xff0c;企业用户可能会选择自带加密工具或密钥&#xff08;即BYOE或BYOK&#xff09;&#xff0c;以确保数据在传输和存储过程中的安全性。这种方式可以防止云服务提供商访问或泄露加密数据&#xff0c;增强数据保护。 …

离散数学 第二讲 特殊集合和集合间关系 笔记 [电子科大]王丽杰

1.2 特殊集合与集合间关系 空集 不含任何元素的集合叫做空集(empty set)&#xff0c;记作∅. 空集可以符号化为 ∅ { x ∣ x ≠ x } ∅ \{ x|x ≠ x\} ∅{x∣xx} . 空集是绝对唯一的。 全集 针对一个具体范围&#xff0c;我们考虑的所有对象的集合叫做全集(universal se…

基于springboot招聘信息管理系统设计与实现(源码+定制+开发)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

视频美颜平台是如何搭建的?基于直播美颜SDK源码的开发技术详解

今天&#xff0c;笔者将详细讲解如何基于直播美颜SDK源码搭建视频美颜平台的技术路径。 一、理解视频美颜技术 视频美颜技术主要通过图像处理算法对视频流进行实时处理&#xff0c;包括肤色优化、瑕疵修复、面部特征增强等。实现这一目标需要高效的图像处理算法和稳定的实时渲…

5个最流行的图像嵌入模型对比

最近需要研究图像相似性搜索。我想知道基于架构训练方法的嵌入之间是否存在差异。但是&#xff0c;很少有博客比较几种模型之间的嵌入。因此&#xff0c;在这篇博客中&#xff0c;我将使用 Flickr 数据集 [6] 比较 EfficientNet [1]、ViT [2]、DINO-v2 [3]、CLIP [4] 和 BLIP-2…

Matlab软件进行金融时间序列数据的描述性统计代码

1、数据S&P500的收盘价格&#xff0c;return100*log(pt/pt-1) 方法1&#xff1a;用python代码 import numpy as np import pandas as pddef calculate_log_returns(prices):"""计算价格序列的对数收益率。参数:prices (numpy.array): 价格序列。返回:log_…

Mongodb基础用法【总结】

关系型数据库和非关系型数据库的区别 关系型数据库 1.在关系型数据库中&#xff0c;数据都是存储在表中的&#xff0c;对存储的内容有严格的要求 2.因为我们在创建表的时候久已经规定了表中的字段 存储的数据类型 是否为空 唯一标识等规则 3.由于操作的都是结构化的数据&#…

家政小程序搭建,数字化市场发展下的意义

家政服务行业作为当下社会生活中不可或缺的行业&#xff0c;需求量在逐渐增加&#xff0c;行业发展也趋向多样化。 随着数字化的浪潮&#xff0c;家政行业逐渐向数字化、智能化升级发展&#xff0c;推动行业高质量发展&#xff0c;迎合现代化发展趋势&#xff0c;这一转型为行…