数据结构与算法
文章平均质量分 65
数据结构与算法
yb0os1
YBo0sing frighting~
展开
-
代码随想录 -- 回溯算法
回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯是递归的副产品,只要有递归就会有回溯。原创 2024-03-16 21:45:24 · 1050 阅读 · 0 评论 -
代码随想录 -- 二叉树(未完待续)
因为lz考研复试可能优先回溯 动态规划 双指针,所以lz先进行这三样了!!!原创 2024-03-12 00:55:10 · 979 阅读 · 0 评论 -
代码随想录 -- 栈和队列
解释:例如,在 “abbaca” 中,我们可以删除 “bb” 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。输入: [“10”, “6”, “9”, “3”, “+”, “-11”, " * ", “/”, " * ", “17”, “+”, “5”, “+”]有效的运算符包括 + , - , * , /。给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串,判断字符串是否有效。你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。原创 2024-03-09 01:34:36 · 1067 阅读 · 0 评论 -
代码随想录 -- 双指针法
示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。示例 2: 给定 nums = [0,1,2,2,3,0,4,2], val = 2, 函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。元素的顺序可以改变。输入:[“H”,“a”,“n”,“n”,“a”,“h”]输出:[“h”,“a”,“n”,“n”,“a”,“H”]输入:[“h”,“e”,“l”,“l”,“o”]原创 2024-03-07 00:09:13 · 591 阅读 · 0 评论 -
代码随想录 -- 字符串
字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。原创 2024-02-21 19:30:55 · 1087 阅读 · 0 评论 -
代码随想录 -- 哈希表
满足要求的四元组集合为: [ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2] ]如果 可以变为 1,那么这个数就是快乐数。给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。依然还是在数组中找到 abc 使得a + b +c =0,我们这里相当于 a = nums[i],b = nums[left],c = nums[right]。原创 2024-02-21 08:30:00 · 925 阅读 · 0 评论 -
代码随想录 --链表
操作链表的时候尽量定义一个虚拟的头节点,这样方便处理删除实际头结点的逻辑。原创 2024-02-18 13:12:22 · 774 阅读 · 0 评论 -
代码随想录 -- 数组
示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。示例 2: 给定 nums = [0,1,2,2,3,0,4,2], val = 2, 函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。解释:平方后,数组变为 [16,1,0,9,100],排序后,数组变为 [0,1,9,16,100]元素的顺序可以改变。输入:s = 7, nums = [2,3,1,2,4,3]原创 2024-02-14 11:29:04 · 1061 阅读 · 0 评论 -
C++数据结构与算法 -- 图
图存储方式邻接表邻接矩阵class Edge{public: //权重 int weight; //该边从from点指向to点 Node* from; Node* to; Edge(int w, Node* f, Node* t) :weight(w), from(f), to(t) {}};class Node{public: //值 int value; //入度 int in; //出度 int out; vector<Node*>nex原创 2022-02-12 17:09:43 · 649 阅读 · 0 评论 -
C++数据结构与算法 -- 链表
链表菜鸡一枚,不喜勿喷~~~~~~换头需要返回值不换头不用返回值技巧快慢指针额外的数据结构记录(哈希表等)回文链表利用栈(先入后出)快慢指针(快指针走两步、慢指针走一步,快指针走完,慢指针走到终点)链表的自身修改实现 不需要额外的空间复杂度//回文链表 时间复杂度O(N) 空间复杂度O(1) 链表的自身修改实现 不需要额外的空间复杂度class Solution {public: bool isPalindrome(ListNode* head) {原创 2022-02-04 19:23:42 · 710 阅读 · 0 评论 -
C++数据结构与算法 --二叉树
二叉树结点结构struct Tree{ int val; Tree *left; Tree *right;};遍历先序遍历//递归遍历void preorderTraversal(Tree* head){ if(head == nullptr)return; cout<<head->val<<endl; preorderTraversal(tree->left); preorderTrave原创 2022-02-04 19:21:04 · 960 阅读 · 0 评论 -
C++数据结构与算法 -- 快速排序
时间复杂度:O(N*longN)空间复杂度:O(logN)基于荷兰国旗问题//以下实现的是快排3.0版本 也就是时间复杂度为O(N*logN)class QuickSort{public: void quciksort(vector<int>&arr,int L,int R) { if (L>=R||arr.size()<2) return; //选取的随机数和最后一个交换 在main函数不要忘记加上随机种子 //srand((un原创 2022-02-03 10:01:03 · 731 阅读 · 0 评论 -
C++数据结构与算法 --归并排序
时间复杂度:O(N*longN)空间复杂度:O(N)思想:取中点,利用递归使左边和右边有序,最后按照大小将左边和右边的内容有序存储T(N) = 2*T(N/2)+O(N) a = 2 b = 2 d = 1logab == d 时间复杂度为O(N*logN)void merge(int* arr, int left, int right, int mid){ int len = right - left + 1; int *help = new int[len]; int i原创 2022-02-02 20:38:32 · 448 阅读 · 0 评论 -
C++数据结构与算法 --插入排序
0-1范围有序 0-2范围有序 … 局部有序最好情况O(N) 最差情况O(N^2)void insertSort(int* arr, int len){ for (int i = 1 ; i < len; i++) { int j = i; while (j - 1 >= 0 && arr[j] < arr[j - 1]) { arr[j] = arr[j] ^ arr[j - 1]; arr[j - 1] = arr[j] ^ a原创 2022-02-02 20:29:03 · 288 阅读 · 0 评论 -
C++数据结构与算法 -- 选择排序
思想:定义一个min,每次循环把最小值对应的下标赋值给min,最后把min对应的值放到头部时间复杂度:O(N^2)void selectSort(int* arr, int len){ for (int i = 0; i < len; i++) { int minIndex = i; for (int j = i+1; j < len; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; }原创 2022-02-02 20:27:46 · 180 阅读 · 0 评论 -
C++数据结构与算法 -- 冒泡排序
冒泡排序基于比较的一种排序思想:每次两两对比找到最大的一个值放到最后,如此直至循环完毕时间复杂度:O(N^2)void bubbleSort(int *arr,int len){ for(int i=0;i<len-1;i++) { for(int j = 0;j<len-1-i;j++) { if(arr[j+1]<arr[j]) { //引入变量交换数值 //int temp; //temp = arr[j]; //ar原创 2022-02-02 20:27:19 · 426 阅读 · 0 评论