
算法
算法
qq_52484093
这个作者很懒,什么都没留下…
展开
-
递归的非递归解法
反转字符串递归解法String Reverse_Rec(const String& s){ String ret = ""; if(s.length() == 0) { ret = ""; } else if(s.length() == 1) { ret = s[0]; } else { ret = Reverse_Rec(s.sub(1, s.length(原创 2022-04-01 22:26:02 · 437 阅读 · 0 评论 -
递归到循环的转换
判断数组 a 是不是一个等差数列使用栈模拟递归解法struct Param : public Object{ Param(int begin = -1, int end = -1, int d = -1) { this->begin = begin; this->end = end; this->d = d; this->ret = false; } int begin;原创 2022-03-20 21:16:50 · 487 阅读 · 0 评论 -
递归强化练习
查找字符串 s 中连续出现次数最多的字符自己实现的代码char MaxDupChar(const char* s, int begin, int& n){ char ret = 0; /* 字符串只有一个字符时 */ if(s[begin + 1] == 0) { ret = s[begin]; n = 1; } /* 字符串大于一个字符时 */ else { int原创 2022-03-12 18:47:47 · 464 阅读 · 0 评论 -
再论递归函数设计
判断数组 a 是不是一个等差数列普通递归实现bool IsArithProg(int a[], int begin, int end, int& d){ bool ret = false; if((end - begin) == 0) { ret = true; } else if((end - begin) == 1) { ret = true; d = a[end] - a.原创 2022-03-11 22:40:27 · 161 阅读 · 0 评论 -
两个遗留问题
在无表头单链表中删除指定值 x 的结点循环遍历的实现方法如下:template<typename T>class WorkList : public LinkList<T>{protected: typedef typename LinkList<T>::Node Node; /* 删除链表中的重复结点 */ void rmdup(Node* head) { if(head != nullptr)原创 2022-03-10 22:55:41 · 650 阅读 · 0 评论 -
递归基础练习
判断数组 a 中是否包含了数值 xbool IsContained(int a[], int n, int x){ bool ret = false; if(n > 0) { ret = (a[n - 1] == x) || IsContained(a, n - 1, x); } return ret;}判断数组 a 是否有序bool IsOrdered(int a[], int n, bool min2ma.原创 2022-03-06 20:07:11 · 240 阅读 · 0 评论 -
重拾递归
链表翻转的递归解法template<typename T>class WorkList : public LinkList<T>{private: typedef typename LinkList<T>::Node Node; Node* reverse(Node* head) { Node* ret = nullptr; if((head == nullptr) || (head->nex原创 2022-03-04 16:21:23 · 477 阅读 · 0 评论 -
二分图与矩阵距离
判断二分图代码如下所示:#include <iostream>#include "DynamicArray.h"#include "MatrixGraph.h"using namespace std;using namespace LJLib;// 根据顶点来判断bool IsBipartiteV(Graph<int, int>& graph){ bool ret = true; DynamicArray<int&g.原创 2022-02-26 22:16:06 · 234 阅读 · 0 评论 -
堆的插入和删除操作
代码如下// 自底向上进行调整 void add(const T& e) { int i = m_length + 1; // 新加入的结点编号为这棵完全二叉树最后一个结点的编号 + 1 if(i <= capacity()) // 是否还有足够的容量插入 { while((i > 1) && compare(e, get(parent(i)))) // 新加入的值大于它原创 2022-02-26 12:55:28 · 226 阅读 · 0 评论 -
将顺序结构二叉树调整为最大堆
实现如下#include <iostream>#include <cmath>#include "BTreeArray.h"using namespace std;using namespace LJLib;bool toHeap(BTreeArray<int>& arr){ bool ret = true; try { int size = arr.count(); for(int原创 2022-02-20 12:12:59 · 685 阅读 · 0 评论 -
回文字符串
问题给定一个字符串,判断如果最多删除一个字符能不能得到一个回文字符串?示例abca,删除 b 或 c 就能得到一个回文字符串双端队列解法#include <iostream>#include "DualEndQueue.h"#include "LJString.h"using namespace std;using namespace LJLib;bool IsSym(const String& s){ DualEndQueue<原创 2022-02-16 16:17:06 · 421 阅读 · 0 评论 -
岛屿的最大面积及组成
不使用图类型结构的解法#include <iostream>#include "LinkQueue.h"#include "DynamicList.h"using namespace std;using namespace LJLib;int Solve(int Matrix[][5], int row, int col, int m, int n, DynamicList<int>* list){ int area = 0; if(Matri原创 2022-02-14 22:47:28 · 442 阅读 · 0 评论