
算法
算法
code-016
有问题请私信,停更一段时间。
展开
-
【动态规划】判断子序列
文章目录题目描述双指针解法动态规划题目描述双指针解法class Solution {public: bool isSubsequence(string s, string t) { int m = s.size(); int n = t.size(); int i = 0, j = 0; while(i < m && j < n) { if(s[i] == t原创 2022-04-18 15:10:05 · 817 阅读 · 1 评论 -
【动态规划】买股票的最佳时期
文章目录一、题目描述二、动态转移方程三、题解一、题目描述二、动态转移方程三、题解class Solution {public: //动态规划 int maxProfit(vector<int>& prices) { int n = prices.size(); if(n < 2) return 0; vector<int> dp; dp.resize(n, 0);原创 2022-04-17 22:37:41 · 413 阅读 · 0 评论 -
【动态规划】打家劫舍
文章目录一、题目描述二、算法分析三、题解代码一、题目描述二、算法分析三、题解代码class Solution {public: int rob(vector<int>& nums) { int house_len = nums.size(); vector<int> dp; dp.reserve(house_len); for (int i = 0; i < house_len; ++i) { if (i == 0) {原创 2022-04-17 20:12:20 · 397 阅读 · 0 评论 -
【动态规划】机器人走m*n宫格
文章目录一、题目描述二、代码实现一、题目描述二、代码实现#include<iostream>#include<vector>using namespace std;void Robits(vector<vector<int>>& dp){ for (int i = 0; i < dp.size(); ++i) { for (int j = 0; j < dp[i].size(); ++j)原创 2022-04-17 12:19:50 · 816 阅读 · 0 评论 -
【动态规划】最长公共子序列
文章目录一、引言二、最长公共子序列三、解题思路四、代码五、代码优化一、引言二、最长公共子序列三、解题思路四、代码int LSCLen(char* arr, char* brr, int m, int n){ //if (nullptr == arr || nullptr == brr) return 0; if (m == 0 || n == 0) return 0; else { if (arr[m] == brr[n]) { return LSCLen(arr,原创 2022-04-14 16:25:53 · 156 阅读 · 0 评论 -
【分治策略】打印子集
文章目录一、题目描述二、解题思路三、代码实现一、题目描述通过使用分治策略,打印一个数组元素的所有子集输入:1 2 3输出:1 2 31 21 312 323二、解题思路通过这个程序的思路进行分析void fun(int i, int n){ if(i >= n) return; else { fun(i + 1, n); fun(i + 1, n); }}int main(){ fun(0, 3);}上述程序的递归活动如下我们在递推原创 2022-04-13 19:22:23 · 266 阅读 · 0 评论 -
【分治策略】全排列
文章目录一、题目描述二、思路分析三、递归程序一、题目描述二、思路分析若R = {1, 2, 3} 对应的全排列就是1 3 22 1 32 3 13 2 13 1 2进行层次分析:三、递归程序#include<iostream>using namespace std;#if 1void Perm(int* arr, int left, int right){ if (left == right) { //确定只剩下一个元素时 for (int i =原创 2022-04-13 18:20:25 · 391 阅读 · 0 评论 -
【算法】一维最接近点对问题
文章目录一、描述二、思路三、代码一、描述一维最接近点对问题:也就是寻找无序不重复数组的最小差值解题思想:分治策略二、思路三、代码//寻找非负整数序列(不重复)的最小差值#if 1//两边向中间划分int OnePartition(int* arr, int left, int right){ int tmp = arr[left]; int i = left; int j = right; while (i < j) { while (i < j原创 2022-04-12 18:40:22 · 1705 阅读 · 0 评论 -
【算法】分治策略
文章目录一、关于分治策略二、使用分治策略+递归解题一、关于分治策略分治策略: 简单来说就是将问题的规模变小,问题本身不变解题步骤:分解: 将原问题划分成子问题,规模变小递归: 递归求解子问题,若子问题规模足够小,此时停止递归,直接求解合并: 将小规模的解合并成原规模的解注意: 分治策略是一种处理问题的思想,递归是一种算法。二、使用分治策略+递归解题...原创 2022-04-12 17:16:14 · 2104 阅读 · 0 评论 -
【进制转换】十进制到二、八、十六进制
进制转换的原理:先将一个十进制数转换成二进制数;(构造一个0 ~2^30的数组,用number和数组中每个元素逆序比大小, 如果number >= quan_arr[i], 就让number -= quan_arr[i]; 并且该位置的数就置为1,否则该位置的数置为0, 直到number减为0);对quan_arr数组进行不同进制的处理,贪心算法贪心算法的思想,从局部最优到整体最优;例如八进制:3位可以表示一个数,从数组的0下标开始,依次往后取三位计算出值存入一个临时数组中,所有的二进制位原创 2021-10-23 14:53:33 · 1153 阅读 · 0 评论 -
【KMP算法】字符串匹配 plus版
定义:KMP算法是在BF算法的基础上做出的优化算法,去除了目标串匹配时的回溯。演示过程第一步:比较目标串和模式串第二步:在模式串失配前的子串的首尾寻找最长公共子串(前串和尾串)(1)很显然A和A匹配成功,但是我们要找的是最长公共子串,继续往下走吧(2)再看 AB和BA 不匹配,但是先别着急,说不定后面还有匹配。(3)很显然,ABA和ABA匹配成功(4)再继续往下走,再看看还有没有比第三步更长的,可见ABAB和BABA不匹配,若是再继续往往下走就是它自己本身,就失去了寻找最长公共字串的原创 2021-04-18 14:13:27 · 284 阅读 · 0 评论 -
【BF算法】字符串匹配
BF算法:就是在字符串s中去寻找有没有字符串p,如果找到了就返回字符串s找到的首位置,否则就返回-1;代码:#include <stdio.h>#include <string.h>// 从pos开始在s中寻找p,最终返回找到的首位置,如果没有找到返回-1int BF(const char* s, const char* p, int pos){ if (s == NULL && p == NULL) return -1; int lens原创 2021-04-11 17:26:03 · 306 阅读 · 0 评论