[Algorithm][综合训练][非对称之美][添加字符][数组变换]详细讲解

本文主要是介绍[Algorithm][综合训练][非对称之美][添加字符][数组变换]详细讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1.非对称之美
    • 1.题目链接
    • 2.算法原理详解 && 代码实现
  • 2.添加字符
    • 1.题目链接
    • 2.算法原理详解 && 代码实现
  • 3.数组变换
    • 1.题目链接
    • 2.算法原理详解 && 代码实现


1.非对称之美

1.题目链接

  • 非对称之美

2.算法原理详解 && 代码实现

  • 自己的版本:动态规划 --> 内存超限 --> 23.44%
    #include <iostream>
    #include <string>
    #include <vector>
    using namespace std;int main()
    {string str;cin >> str;int n = str.size();vector<vector<bool>> dp(n, vector<bool>(n, false));int maxLen = 0;for(int i = n - 1; i >= 0; i--){for(int j = i; j < n; j++){if(str[i] == str[j]){dp[i][j] = i + 1 < j ? dp[i + 1][j - 1] : true;}if(!dp[i][j]){maxLen = max(maxLen, j - i + 1);}}}cout << maxLen << endl;return 0;
    }
    
  • 优化版本:规律 + 贪心
    #include <iostream>
    #include <string>
    using namespace std;int n;
    string str;int Adjust()
    {// 1.判断是否全都是相同字符bool flag = true;for(int i = 1; i < n; i++){if(str[i] != str[0]){flag = false;break;}}if(flag){return 0;}// 2.判断本身是否是回文flag = true;int left = 0, right = n - 1;while(left < right){if(str[left] == str[right]){left++;right--;}else{flag = false;break;}}if(flag){return n - 1;}else{return n;}
    }int main()
    {cin >> str;n = str.size();cout << Adjust() << endl;return 0;
    }
    

2.添加字符

1.题目链接

  • 添加字符

2.算法原理详解 && 代码实现

  • 解法:暴力枚举
    #include <iostream>
    #include <string>
    using namespace std;int main()
    {string a, b;cin >> a >> b;int m = a.size(), n = b.size();int ret = m;for(int i = 0; i <= n - m; i++) // 枚举b的起始位置{int tmp = 0;for(int j = 0; j < m; j++){if(a[j] != b[i + j]){tmp++;}}ret = min(tmp, ret);}cout << ret << endl;return 0;
    }
    

3.数组变换

1.题目链接

  • 数组变换

2.算法原理详解 && 代码实现

  • 自己的版本:排序 + 模拟 --> 100%
    #include <iostream>
    #include <algorithm>
    #include <vector>
    using namespace std;bool Check(int small, int large)
    {while(small < large){if((small *= 2) == large){return true;}}return false;
    }int main()
    {int n = 0;cin >> n;vector<int> nums(n, 0);for(int i = 0; i < n; i++){cin >> nums[i];}sort(nums.begin(), nums.end());int r = n - 1;while(r > 0){if(Check(nums[r - 1], nums[r]) || nums[r] == nums[r - 1]){r--;}else{break;}}cout << (r == 0 ? "YES" : "NO") << endl;return 0;
    }
    
  • 优化版本:贪心 + 位运算
    • 贪心:以最大值为基准,判断较小的数都否变成最大值
    • 位运算:判断一个数是否是x 2 n 2^n 2n
      • 方法一x - (x & -x) == 0 ? true : false
        • x & -x提取出最后一个二进制为1的位
        • 如果该位为仅有的二进制位为1的位,则是
      • 方法二x & (x - 1) == 0 ? true : false
    #include <iostream>
    #include <vector>
    using namespace std;int n = 0, maxValue = 0;
    vector<int> nums;bool Check()
    {for(int i = 0; i < n; i++){if(maxValue % nums[i]){return false;}int x = maxValue / nums[i];if(x - (x & -x)){return false;}}return true;
    }int main()
    {cin >> n;nums.resize(n, 0);for(auto& x : nums){cin >> x;maxValue = max(x, maxValue);}if(Check()){cout << "YES" << endl;}else{cout << "NO" << endl;}return 0;
    }
    

这篇关于[Algorithm][综合训练][非对称之美][添加字符][数组变换]详细讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1111265

相关文章

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Java中HashMap的用法详细介绍

《Java中HashMap的用法详细介绍》JavaHashMap是一种高效的数据结构,用于存储键值对,它是基于哈希表实现的,提供快速的插入、删除和查找操作,:本文主要介绍Java中HashMap... 目录一.HashMap1.基本概念2.底层数据结构:3.HashCode和equals方法为什么重写Has

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

MySQL中优化CPU使用的详细指南

《MySQL中优化CPU使用的详细指南》优化MySQL的CPU使用可以显著提高数据库的性能和响应时间,本文为大家整理了一些优化CPU使用的方法,大家可以根据需要进行选择... 目录一、优化查询和索引1.1 优化查询语句1.2 创建和优化索引1.3 避免全表扫描二、调整mysql配置参数2.1 调整线程数2.

Java实现TXT文件导入功能的详细步骤

《Java实现TXT文件导入功能的详细步骤》在实际开发中,很多应用场景需要将用户上传的TXT文件进行解析,并将文件中的数据导入到数据库或其他存储系统中,本文将演示如何用Java实现一个基本的TXT文件... 目录前言1. 项目需求分析2. 示例文件格式3. 实现步骤3.1. 准备数据库(假设使用 mysql