Algorithm + DataStructure
文章平均质量分 52
一些基础算法以及数据结构知识、笔记
CodeLuweir
壁立千仞,无欲则刚!
展开
-
【算法刷题】算法题解题方法技巧及典例汇总
一、二分查找使用条件:有序数组+查找目标元素;复杂度:O(log n);优化:实际使用求中间mid索引建议用这种方法:int mid = left + (right-left)/2 可以防止left+right溢出(超出整数范围);可以将查找目标元素扩展为 查找符合要求的元素,括号内为满足的条件,比如这一题:https://leetcode-cn.com/problems/first-bad-version/注意前后端点的判断,不要越界,还有就是return条件的选择(这一题:原创 2021-08-05 10:24:08 · 3625 阅读 · 1 评论 -
数据结构与算法 实验二:利用单链表(实现ADT)判断回文
必须要有两个 .h文件 和一个 .cpp文件,一个定义,一个实现,一个解决问题;LinkedList.h#ifndef LINKEDLIST_H_#define LINKEDLIST_H_#include <iostream>#define OK 1#define ERROR 0typedef char ElemType;typedef int status;typedef struct LNode{ ElemType data;//数据域 LNode *next;/原创 2021-04-21 08:43:14 · 753 阅读 · 0 评论 -
数据结构与算法:实验一线性表(字符串分类统计)
【问题描述】l 定义和声明一个线性表ADTl 基于顺序表或者链表实现线性表ADT(具体采用顺序表或者哪种链表可自行选择)l 输入一行字符,存入线性表中,要求编写测试程序,能统计出其中英文字母、数字、其他字符的个数,并输出删除所有数字后得到的新的字符串。【输入形式】从标准输入读入数据 第一行输入一行字符【输出形式】输出到标准输出 包含两行:第一行:统计值,包括英文字母、数字、其他字符的个数,依次输出,数据和数据之间使用空格隔开第二行:输出删除数字后的新字符串【样原创 2021-03-31 09:18:09 · 795 阅读 · 0 评论 -
一道把递归、链表、引用、双指针都结合的题——回文链表
题目描述:给出一个链表,然你判断它是不是回文链表,是则返回true,不是则返回false;比如1 2 3 5 3 2 1和1 2 3 5 5 3 2 1都是回文链表;限制条件:控制时间复杂度为O(n)、空间复杂度为O(1);解题思路:step1:判断是否为回文链表,必然要判断前半部分(顺序)和后半部分(反序)的元素是否全部一致;所以,我们首先要找到链表的中间结点;这里可能会想到先遍历一遍结点得到长度size,然后再从头遍历size/2的结点即可得到中间结点,这是普通的方法,需要遍历1.5次链表;而原创 2020-10-15 14:07:08 · 349 阅读 · 0 评论 -
Algorithm Set:floyd判环法
目录1.1 适用情况1.2 复杂度1.3 判断是否存在环1.4 找到环的入口1.5 代码实现1.1 适用情况该算法用于解决一个数组/链表中是否存在环的情况!1.2 复杂度时间复杂度:O(n)空间复杂度:O(1)1.3 判断是否存在环核心思想:类似于龟兔赛跑的原理,使用一个快指针和一个慢指针,快指针一次走两步,慢指针一次走一步,若数组/链表中存在环,那么快慢指针一定会在某一时刻指向同一个元素;fast指针走过的路程 Sfast=m+n1*k+cslow指针走过的路程 Sslow=m+n2*原创 2020-09-25 14:06:44 · 259 阅读 · 0 评论 -
Algorithm:位运算的这些小技巧你知道吗?
目录位运算的巧妙之处应用二进制中1的个数异或运算的巧妙之处性质应用交换两个变量的值不用判断语句,求整数绝对值如何找唯一成对的数?位运算的巧妙之处算法中,位运算可以巧妙运用在一下几个方面:1、判断奇偶数 => x&12、判断数x中第k ( 从右至左 ) 位是1还是0 法1:( x >> ( k - 1 ) ) & 1 法2:x & ( 1 << ( k - 1 ) )3、交换两个整数变量 a , b 的值a = a ^ b;原创 2020-05-21 09:37:58 · 399 阅读 · 0 评论 -
数据结构:B树和B+树的插入、删除图文详解
目录B树1.1B树的定义1.2B树的插入操作1.3B树的删除操作B+树2.1 B+树的定义2.2 B+树的插入操作2.3 B+树的删除操作B树1.1B树的定义B树也称B-树,它是一颗多路平衡查找树。我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数。当m取2时,就是我们常见的二叉搜索树。一颗m阶的B树定义如下:1)每个结点最多有m-1个关键字。2)根结点最少可以只有1个关键字。3)非根结点至少有Math.ceil(m/2)-1个关键字。4)每个结转载 2020-05-12 09:55:20 · 2235 阅读 · 0 评论 -
Algorithm:十大经典排序算法C++实现及总结
#include <iostream>#include <vector>#include <algorithm>using namespace std;//1、Bubble Sort 冒泡排序void bubbleSort(int a[], int length){ if (length < 2) return; for (int i = 0; i < length - 1; i++) //需length-1趟排.原创 2020-05-10 13:48:57 · 1720 阅读 · 2 评论 -
Algorithm:贪心策略之区间调度问题
Describe:有n项工作,每项工作分别再si时间开始,在ti时间结束;对于每项工作,你都可以参与与否,如果选择参与,那么自始自终都必须全程参与;此外参加工作的时间段不能重复(即使是开始的瞬间和结束的瞬间的重叠也不允许);你的目标是参与尽可能多的工作,那么最多能参与多少项工作呢?1<=n<=1000001<=si<=ti<=10^9输入:第一行:n第二...原创 2020-05-03 08:57:10 · 316 阅读 · 0 评论