首页 > 编程语言 >【贪心算法】(第七篇)

【贪心算法】(第七篇)

时间:2024-10-21 12:48:23浏览次数:3  
标签:right hash int ret 第七篇 算法 贪心 left

目录

最⻓回⽂串(easy)

题目解析

讲解算法原理

编写代码

增减字符串匹配(easy)

题目解析

讲解算法原理

编写代码


最⻓回⽂串(easy)

题目解析

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

2.题目描述

给定⼀个包含⼤写字⺟和⼩写字⺟的字符串 s ,返回通过这些字⺟构造成的最⻓的回⽂串。在构造过程中,请注意区分⼤⼩写。⽐如 "Aa" 不能当做⼀个回⽂字符串。

⽰例1:
输⼊:s="abccccdd"
输出:7
解释:
我们可以构造的最⻓的回⽂串是"dccaccd",它的⻓度是7。⽰例2:
输⼊:s="a"
输出:1
⽰例3:
输⼊:s="aaaaaccc"
输出:7

提⽰:
◦ 1 <= s.length <= 2000
◦ s 只由⼩写和/或⼤写英⽂字⺟组成

讲解算法原理

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

⽤尽可能多的字符去构造回⽂串:
a. 如果字符出现偶数个,那么全部都可以⽤来构造回⽂串;b. 如果字符出现奇数个,减去⼀个之后,剩下的字符能够全部⽤来构造回⽂串;c. 最后再判断⼀下,如果有字符出现奇数个,就把它单独拿出来放在中间。

编写代码

c++算法代码:

class Solution
{
public:
 int longestPalindrome(string s) 
 {
 // 1. 计数 - ⽤数组模拟哈希表
 int hash[127] = { 0 };
 for(char ch : s) hash[ch]++;
 // 2. 统计结果
 int ret = 0;
 for(int x : hash)
 {
 ret += x / 2 * 2;
 }
 return ret < s.size() ? ret + 1 : ret;
 }
};

java算法代码:

class Solution
{
 public int longestPalindrome(String s) 
 {
 // 1. 计数 - ⽤数组模拟哈希表
 int[] hash = new int[127];
 for(int i = 0; i < s.length(); i++)
 {
 hash[s.charAt(i)]++;
 }
 // 2. 统计结果
 int ret = 0;
 for(int x : hash)
 {
 ret += x / 2 * 2;
 }
 return ret < s.length() ? ret + 1 : ret;
 }
}

增减字符串匹配(easy)

题目解析

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

2.题目描述

由范围 [0,n] 内所有整数组成的 n + 1 个整数的排列序列可以表⽰为⻓度为 n 的字符串 s ,其中:
• 如果 perm[i] < perm[i + 1] ,那么 s[i] == 'I'
• 如果 perm[i] > perm[i + 1] ,那么 s[i] == 'D'
给定⼀个字符串 s ,重构排列 perm 并返回它。如果有多个有效排列perm,则返回其中任何⼀个。

⽰例1:
输⼊:s="IDID"
输出:[0,4,1,3,2]
⽰例2:
输⼊:s="III"
输出:[0,1,2,3]
⽰例3:
输⼊:s="DDI"
输出:[3,2,0,1]

提⽰:
◦ 1 <= s.length <= 10(5)
◦ s 只包含字符 "I" 或 "D"

讲解算法原理

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

a. 当遇到 'I' 的时候,为了让下⼀个上升的数可选择的「范围更多」,当前选择「最⼩」的那
个数;
b. 当遇到 'D' 的时候,为了让下⼀个下降的数可选择的「范围更多」,选择当前「最⼤」的那
个数。

编写代码

c++算法代码:

class Solution
{
public:
 vector<int> diStringMatch(string s) 
 {
 int left = 0, right = s.size(); // ⽤ left,right 标记最⼩值和最⼤值 vector<int> ret;
 for(auto ch : s)
 {
 if(ch == 'I') ret.push_back(left++);
 else ret.push_back(right--);
 }
 ret.push_back(left); // 把最后⼀个数放进去
 return ret;
 }
};

java算法代码:

class Solution
{
 public int[] diStringMatch(String s) 
 {
 int n = s.length();
 int left = 0, right = n; // ⽤ left,right 标记最⼩值和最⼤值 int[] ret = new int[n + 1];
 for(int i = 0; i < n; i++)
 {
 if(s.charAt(i) == 'I')
 {
 ret[i] = left++;
 }
 else
 {
 ret[i] = right--;
 }
 }
 ret[n] = left; // 把最后⼀个数放进去
 return ret;
 }
}

标签:right,hash,int,ret,第七篇,算法,贪心,left
From: https://blog.csdn.net/weixin_73861555/article/details/143109371

相关文章

  • 【贪心算法】(第六篇)
    目录按⾝⾼排序(easy)题目解析讲解算法原理编写代码优势洗牌(⽥忌赛⻢)(medium)题目解析讲解算法原理编写代码按⾝⾼排序(easy)题目解析1.题目链接:.-力扣(LeetCode)2.题目描述给你⼀个字符串数组names,和⼀个由互不相同的正整数组成的数组heights。两个数组的⻓度......
  • 算法比赛中常用的快读
    在算法比赛中,快读是一个常用的技巧,用于提高输入数据的速度。常见的快读方法有以下几种:1.C++中的快读C++中常用scanf和getchar进行快读。#include<cstdio>#include<cstring>inlineintread(){intx=0,f=1;charc=getchar();while(c<'0'......
  • Python 自编码器(Autoencoder)算法详解与应用案例
    目录Python自编码器(Autoencoder)算法详解与应用案例引言一、自编码器的基本原理1.1自编码器的结构1.2自编码器的类型二、Python中自编码器的面向对象实现2.1`Autoencoder`类的实现2.2`Trainer`类的实现2.3`DataLoader`类的实现三、案例分析3.1手写数字去噪自......
  • Python Bagging算法详解与应用案例
    这里写目录标题PythonBagging算法详解与应用案例引言一、Bagging的基本原理1.1Bagging的概念1.2Bagging的步骤1.3Bagging的优势与挑战二、Python中Bagging的面向对象实现2.1`DecisionTree`类的实现2.2`Bagging`类的实现2.3`Trainer`类的实现三、案例分析3.1......
  • 普通人,适合做算法吗?大语言模型有未来吗?
    直接说结论:目前来说,算法领域不适合,但是大语言模型工程可以!发展背景AI发展的几个阶段,统计、算法策略、机器学习、深度学习和大语言模型在2013~2014年的时候,岗位极度稀缺,大厂也是非常需要。所以背景显得没那么重要了。到了2015年~2020年,机器学习相关的培训课程和学校教学,......
  • 最强总结!十大回归类算法模型 !!!
     【转载】 最强总结!十大回归类算法模型!!! 今儿和大家分享的回归类算法有:线性回归Ridge回归Lasso回归弹性网络回归多项式回归决策树回归随机森林回归支持向量回归K近邻回归梯度提升回归1.线性回归线性回归是一种用于描述两个或多个变量......
  • 泥石流山体滑坡监控AI视觉识别检测算法
    泥石流山体滑坡监控AI视觉识别检测算法基于AI视觉识别技术,泥石流山体滑坡监控AI视觉识别检测算法通过监控摄像头采集到的图像和视频流,利用先进的视觉识别算法分析和判断监控画面中是否出现泥石流和山体滑坡现象。泥石流山体滑坡监控AI视觉识别检测算法一旦系统识别到灾害事件的发......
  • 支持国密算法的数字证书-国密SSL证书详解
    在互联网中,数字证书作为标志通讯各方身份信息的数字认证而存在,常见的数字证书大都采用国际算法,比如RSA算法、ECC算法、SHA2算法等。随着我国加强网络安全技术自主可控的大趋势,也出现了支持国密算法的数字证书-国密SSL证书。那么什么是国密SSL证书?国密SSL证书支持哪种国密算法呢......
  • 【关联规则挖掘算法‌】基于兴趣度的关联规则挖掘算法
    目录一、基于兴趣度的关联规则挖掘算法概述1.1兴趣度度量1.2基于兴趣度的关联规则挖掘算法1.2.1支持度-置信度(SC)算法1.2.2支持度-提升度(SP)算法1.2.3支持度-互信息(SM)算法1.2.4基于兴趣度的关联规则挖掘算法二、基于兴趣度的关联规则挖掘算法优缺点和改进2.1  ......
  • 【关联规则挖掘算法‌】基于约束的关联规则挖掘算法
    目录一、基于约束的关联规则挖掘算法概述二、基于约束的关联规则挖掘算法优缺点和改进2.1  基于约束的关联规则挖掘算法优点2.2  基于约束的关联规则挖掘算法缺点2.3  基于约束的关联规则挖掘算法改进三、 基于约束的关联规则挖掘算法编程实现3.1  基于约束的......