[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

相关文章

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

Goland debug失效详细解决步骤(合集)

《Golanddebug失效详细解决步骤(合集)》今天用Goland开发时,打断点,以debug方式运行,发现程序并没有断住,程序跳过了断点,直接运行结束,网上搜寻了大量文章,最后得以解决,特此在这... 目录Bug:Goland debug失效详细解决步骤【合集】情况一:Go或Goland架构不对情况二:

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

Springboot 中使用Sentinel的详细步骤

《Springboot中使用Sentinel的详细步骤》文章介绍了如何在SpringBoot中使用Sentinel进行限流和熔断降级,首先添加依赖,配置Sentinel控制台地址,定义受保护的资源,... 目录步骤 1: 添加 Sentinel 依赖步骤 2: 配置 Sentinel步骤 3: 定义受保护的