算法和数据结构
hyy_0224
这个作者很懒,什么都没留下…
展开
-
2021-11-12 牛客TOP100 寻找第K大
题目概述: 描述 有一个整数数组,请你根据快速排序的思路,找出数组中第 k 大的数。 给定一个整数数组 a ,同时给定它的大小n和要找的 k ,请返回第 k 大的数(包括重复的元素,不用去重),保证答案存在。 要求:时间复杂度 O(nlogn)O(nlogn)O(nlogn),空间复杂度 O(1)O(1)O(1) 数据范围:0≤n≤10000\le n \le 10000≤n≤1000, 1≤K≤n1 \le K \le n1≤K≤n,数组中每个元素满足 0≤val≤100000000 \le val \l原创 2021-11-12 15:24:18 · 115 阅读 · 0 评论 -
2021-11-3 翻转部分区间链表
题目描述: 描述 将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n)O(n)O(n),空间复杂度 O(1)O(1)O(1)。 例如: 给出的链表为 1→2→3→4→5→NULL1\to 2 \to 3 \to 4 \to 5 \to NULL1→2→3→4→5→NULL, m=2,n=4m=2,n=4m=2,n=4, 返回 1→4→3→2→5→NULL1\to 4\to 3\to 2\to 5\to NULL1→4→3→2→5→NULL. 思路: 需要五个链表指针,原创 2021-11-03 22:16:06 · 100 阅读 · 0 评论 -
2021-11-3 排序问题之——快速排序
快速排序的基本思想是分治思想,每一次选取数组首元素作为pivot,将大于它的数放在右边,小于它的数放在左边。基本思路就是首先从右往左找到小于pivot的元素,然后再从左往右找到大于pivot的元素,这时如果两个元素再原数组中的位置为大的在左边,小的在右边,就对他们进行交换。 #include<iostream> #include<vector> using namespace std; void partition(vector<int>& input, int原创 2021-11-03 16:53:18 · 111 阅读 · 0 评论 -
2021-11-02 合并有序数组
合并两个有序数组,要求不使用额外空间,在原数组基础上修改数组。 从后往前合并!可以避免挪位置。 class Solution { public: void merge(int A[], int m, int B[], int n) { int index=m+n-1; int i=m-1,j=n-1; for(;index>=0;){ //A[index]=A[i]>B[j]?A[i]:B[j];原创 2021-11-02 23:59:46 · 116 阅读 · 0 评论 -
2021-10-18 递归法构造一棵二叉树
递归法构造一棵二叉树 注意事项: 1、stoi(s)函数,使用时,s不可以为空 2、TreeNode结构体,构造函数成员初始化列表的写法: TreeNode(int val, TreeNode* left, TreeNode* right) :val(val),left(left),right(right){ } #include<iostream> #include<vector> #include<string> #include<deque> us原创 2021-10-18 22:47:39 · 89 阅读 · 0 评论 -
2021-10-19 递归构造链表+反转链表
递归构造链表+反转链表 注意事项: 1、使用getline(cin,s)获取一整行的带空格的字符串 2、链表循环条件while(cur&&cur->next) 3、//1 2 3 出循环时,cur的位置在链表最后一个非空节点,此时cur->next指向nullptr,需要增加一行,将cur->next=tmp2; #include<iostream> #include<vector> #include<string> using name原创 2021-10-19 12:56:14 · 152 阅读 · 1 评论 -
2021-10-24设计LRU缓存
注意:需要用到unordered_map和list两个数据结构,其中需要用到的方法有list.remove(int val),可以直接移除list中值为val的所有元素。而list.erase(iterator)是迭代器的精准删除。 描述 设计LRU(最近最少使用)缓存结构,该结构在构造时确定大小,假设大小为 k ,并有如下两个功能 set(key, value):将记录(key, value)插入该结构 get(key):返回key对应的value值 提示: 1.某个key的set或get操作一旦发生原创 2021-10-24 22:50:34 · 100 阅读 · 0 评论 -
2021-10-24前序中序后序遍历二叉树
也没啥技巧就是注意怎么把结果腾出来这里用了引用设定好的数组的方法。 /** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ class Solution { public: /** * * @param root TreeNode类 the root of binary tree * @return int整型vector&原创 2021-10-24 23:05:12 · 1989 阅读 · 0 评论 -
2021-10-24 最小的K个数
寻找数组中最小的K个数 方法一:建立大根堆 注意:priority_queue默认是less<>大根堆,如果使用greater<>就是小根堆。 class Solution { public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { //最小的k个数 //建大小为k的大根堆 priority_queue<int原创 2021-10-24 23:29:35 · 47 阅读 · 0 评论 -
2021-10-25 最长无重复子数组
解法:定义一个ump接受数字和下标,使用双指针,注意后面的指针只能往前标定,所以需要在ump命中时与ump的值比较大小。 至于为什么需要在命中后继续更新max,按道理来说在命中后,长度一定是缩短才对,哦哦,知道了,因为命中的可能是过去的数字,也就是已经被抛弃的数字。所以需要每次都更新max。 描述 给定一个数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。 子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组 数据范原创 2021-10-25 13:26:01 · 87 阅读 · 0 评论