算法
Hello、MrTree
Hello,树先生。
展开
-
分治算法
划分问题:整个问题划分成多个无关联的子问题。递归求解:递归调用求解各个子问题。合并问题:合并子问题的解,形成原始问题的解。以Leetcode数组的连续数列最大和例子为例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。分治实现:分治思路:nums = [-2,1,-3,4,-1,2,1,-5,4]首先,将问题划分为多个无关的子问题,在这里将整个数组每次递归划分为两部分nums1和nums2,那么最大原创 2020-10-06 17:05:41 · 244 阅读 · 0 评论 -
连续二维排序数组中数的查找
在一个二维数组中(每个一维数组的长度相同),第一行都按照从左到右递增的顺序排序,下一列按照从左到右递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。例如:数组中查找7是否存在? {1, 2, 3}, {4, 5, 6}, {7, 8, 9}关于有序序列查找第一反应看是否可以用二分查找解决,由于二维数组从第一行到下面各行都是默...原创 2019-09-12 15:38:01 · 286 阅读 · 0 评论 -
最短路:迪杰斯特拉算法
迪杰斯特拉算法这里是引用#include<queue>#include<stack>#include<vector>#include<string>#include<iostream>#include<stdio.h>using namespace std;const int LEN = 7;cons...原创 2019-07-16 15:30:55 · 402 阅读 · 0 评论 -
二叉搜索树
二叉搜索树C++实现#include<queue>#include<iostream>using namespace std;const int arrrlens = 8;int arr[arrrlens] = { 10, 5, 4, 9, 11, 20, 8, 15 };/*二叉搜索树满足:一个节点的左节点值小于这个节点的,右节点值大于这个节点*/clas...原创 2019-07-06 14:59:34 · 144 阅读 · 0 评论 -
双链表创建、删除、添加节点
双链表创建、删除、添加节点#include<queue>#include<iostream>using namespace std;// 有序链表const int arrrlens = 9;int arr[arrrlens] = { 0, 1, 2, 3, 5, 6, 7, 8, 9 };class Node {public: Node(int el...原创 2019-07-05 15:04:46 · 434 阅读 · 0 评论 -
链表篇(二)
链表篇从尾到头打印链表 //从尾到头打印链表 void NodeList::printListFromTailToHead() { stack<int> stk; Node* p = head; while (p != NULL) { stk.push(p->infor); p = p-&...原创 2019-07-03 14:42:46 · 113 阅读 · 0 评论 -
有序链表合并
有序链表合并#include<stdio.h>#include<iostream>using namespace std;//测试数据const int arrrlens = 5;int arr_1[arrrlens] = { 9, 7, 5, 3, 1 };int arr_2[arrrlens] = { 0, 2, 4, 6, 8 };class Node...原创 2019-07-03 11:32:04 · 137 阅读 · 0 评论 -
链表头部插入和尾部插入
链表头部插入和尾部插入头部插入//头部插入法链表顺序与输入数据顺序相反void NodeList::addToHead(){ for (int i = 0; i < arrrlens; i++) { int node = arr_1[i]; Node* p = new Node(node, NULL); p->next = head; head = p; ...原创 2019-07-03 10:08:51 · 3872 阅读 · 0 评论 -
排序算法总结
排序算法总结(附伪代码和C++源码)插入排序InsertSort插入排序InsertSort#include <stdio.h>#include <iostream>int arr[5] = { 10, 4, 2 ,6 ,1 };const int arrrlens = 5;void PrintArray(int* arr){ for (int ii = 0...原创 2019-06-24 14:52:01 · 221 阅读 · 0 评论 -
二叉树递归和非递归遍历
二叉树递归和非递归遍历源码:#include<queue>#include<stack>#include<vector>#include<iostream>using namespace std;//假设空节点的值为-1//const int arrrlens = 18;//char arr[arrrlens] = { 'A', ...原创 2019-07-08 14:58:37 · 565 阅读 · 1 评论 -
链表篇(一)
链表篇#include<stdio.h>//测试数据const int arrrlens = 9;int arr[arrrlens] = {0, 1, 2, 3, 4, 5, 6, 7, 8 };class Node {public: //构造函数,创建一个节点 Node(int el = 0, Node* ptr = NULL) { infor = el; ...原创 2019-07-01 16:27:01 · 126 阅读 · 0 评论 -
子数组之和
蛮力法时间复杂度O(N2).vector<int> subarraySum(vector<int> nums){ // write your code here vector<int> res; int i,j,sum; for(i=0;i<nums.size();i++) { sum=nums[原创 2016-08-01 23:31:18 · 289 阅读 · 0 评论 -
串的模式匹配
串的模式匹配(蛮力法)lintcode字符串查找练习题#include "string.h"#include "stdio.h"char source[100],target[100];int strStr(const char *source, const char *target) { int i,j; i=j=0; if(source==N原创 2016-07-30 23:19:15 · 499 阅读 · 0 评论 -
关于字符串的算法
串的模式匹配(蛮力法)lintcode字符串查找练习题#include "string.h"#include "stdio.h"char source[100],target[100];int strStr(const char *source, const char *target) { int i,j; i=j=0; if(source==N原创 2016-07-30 21:16:54 · 388 阅读 · 0 评论 -
平面最近点对问题求解
平面最近点对问题求解问题描述: 最近点对问题是指求解平面点集n个点中距离最近的两个点间的问题。为简单起见,在二维坐标平面来考虑该问题。如果说讨论的点以标准二维坐标给出,则有点和,那么这两点之间的距离。通过这个公式,我们可以计算平面上任意两点之间的距离。本章主要通过两种方法来求解蛮力法分治法1.蛮力法顾名思义,蛮力法指的就是通过遍历所有解之后通过对比求出最近点对问题。 基本思路: 对原创 2016-07-25 01:30:49 · 8423 阅读 · 4 评论