coding
文章平均质量分 52
s11show_163
这个作者很懒,什么都没留下…
展开
-
第k大元素 & topk
// 堆排 void adjustHeap(vector<int>& nums, int i,int len){ int tmp = nums[i]; for(int k=2*i+1;k<len;k=k*2+1){ if(k+1<len && nums[k+1] > nums[k]){ k = k+1; } ..原创 2021-03-20 23:54:07 · 83 阅读 · 0 评论 -
反转链表的递归和非递归写法
很详细的一篇题解 //迭代 ListNode* reverseList(ListNode* head) { if(head == nullptr) return head; stack<ListNode*> s; ListNode *p = head; while(p->next){ s.push(p); cout<<p->val<<" "原创 2021-03-20 23:53:46 · 148 阅读 · 0 评论 -
排序时间复杂度 & 快速排序 改进快排的方法
1、冒泡排序是一种用时间换空间的排序方法,n小时好2、最坏情况是把顺序的排列变成逆序,或者把逆序的数列变成顺序,最差时间复杂度O(N^2)只是表示其操作次数的数量级3、最好的情况是数据本来就有序,复杂度为O(n)1、n大时好,快速排序比较占用内存,内存随n的增大而增大,但却是效率高不稳定的排序算法。2、划分之后一边是一个,一边是n-1个,这种极端情况的时间复杂度就是O(N^2)3、最好的情况是每次都能均匀的划分序列,O(N*log2N)1、n大时好,归并比较占用内存,内存随n的...原创 2021-03-16 23:00:35 · 721 阅读 · 0 评论 -
考过的题(面前必看)
c++介绍下std_moveC++介绍下右值引用c++异常处理java与c++的区别java:垃圾回收机制java: 抽象类与接口和c++中接口和虚函数的区别,java可以多继承吗?手写uniq_ptr编程:一个矩阵全是加号从左上角走到右上角有几种方式?编程:求字符串中回文字符串个数...原创 2021-03-01 00:04:03 · 131 阅读 · 0 评论 -
求字符串里回文字符串的个数
Given a string, your task is to count how many palindromic substrings in this string.The substrings with different start indexes or end indexes are counted as different substrings even they consist of same characters.Example 1:Input: “abc”Output: 3Exp原创 2021-02-28 23:53:57 · 172 阅读 · 0 评论 -
给前中后其中二序重构二叉树
摘自889题解:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-postorder-traversal/solution/kan-wo-jiu-gou-liao-san-chong-bian-li-fang-shi-gou/给前序+后序重构二叉树:LC889/** * Definition for a binary tree node. * struct TreeNode { * int.原创 2021-01-31 23:09:49 · 83 阅读 · 0 评论 -
c++ substr & substring
在c语言中,并没有出现substr或者substring方法。然而在1983,substr()方法已经出现在C++语言中了。然而这时候还没有出现substring, 所以可以见得:substr是stustring的老大哥string substr (size_t pos = 0, size_t len = npos) const;从C++的方法定义中可以看到, substr的参数是开始下标,以及字符串长度。 std::string str="We think in generalities, bu原创 2021-01-31 21:48:33 · 975 阅读 · 0 评论 -
vector删除用erase+remove
对于原vector { 10 20 10 15 12 7 9 },删除10,会将10后面的元素移动到前面(注意以下逐个元素对齐,模拟元素在内存中的位置,这样就容易看出变化规律)原vector10 20 10 15 12 7 9遇到第一个10,数组变成20 10 15 12 7 9遇到第二个1020 15 12 7 9 7 9因此,remove()需要和erase()配合使用svec.erase(std::remove(svec.begin(),svec.end(),“b原创 2021-01-28 00:07:46 · 270 阅读 · 0 评论 -
设计哈希集合 & 解决哈希冲突的三种方法
概述这是教科书上一个经典问题,用来测试一个人的数据结构知识。因此,是不可以用任何内置的 HashSet 数据结构来解决此问题。为了实现 HashSet 数据结构,有两个关键的问题,即哈希函数和冲突处理。哈希函数:目的是分配一个地址存储值。理想情况下,每个值都应该有一个对应唯一的散列值。冲突处理:哈希函数的本质就是从 A 映射到 B。但是多个 A 值可能映射到相同的 B。这就是碰撞。因此,我们需要有对应的策略来解决碰撞。总的来说,有以下几种策略解决冲突:单独链接法:对于相同的散列值,我们将它们放到一原创 2021-01-27 17:43:59 · 489 阅读 · 0 评论 -
面经 - 0 - 编程确认
做题 全排列LC46B+树和红黑树的区别从一百万个数里面找前1000大的(堆排,建一个大小为1000的小根堆),除了堆排呢?(快排,二分+partition)分析一下上面两个的复杂度,哪个快(口糊了堆排,因为当时算出来快排是nlogn,堆排是nlogk的。事后发现百度上说快排均摊是O(2n)的,可以通过数列求和证明)算法题:大整数加法LC415算法题:给你一组乱序的数组a,要找出一组l,r,使得a[r]-a[l]最大LC 53 剑指Offer42算法题:用一个3*.原创 2021-01-16 15:52:35 · 94 阅读 · 0 评论 -
剑offer - 1 - 二叉树
07.重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7/** * Definition for a binary tree node. * struct TreeNode { * int原创 2021-01-04 22:47:59 · 74 阅读 · 0 评论 -
剑offer - 4 - 动归
47.礼物最大价值在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 示例 1:输入: [ [1,3,1], [1,5,1], [4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物感想:改造原有矩阵节省空间且易于理解,但边界初始化要细心:clas原创 2021-01-15 11:02:19 · 92 阅读 · 0 评论 -
剑offer - 3 -链表
06.从尾到头打印链表利用vector的从头插入功能:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: vector<int> reversePrint(ListNode原创 2021-01-15 11:02:06 · 56 阅读 · 0 评论 -
剑offer - 2 -数据结构(栈/队列/矩阵/字符串/数组...)
46.全排列class Solution {public: int len = 0; void fun(vector<vector<int>> &s,vector<int> &single,int first){ if(first == len){ s.emplace_back(single); return ; } for(int i=原创 2021-01-15 11:01:41 · 162 阅读 · 0 评论 -
剑offer - 5 -排序搜索
堆排序#include<iostream>using namespace std;void print(int arr[],int len){ for(int i=0;i<len;i++){ cout<<arr[i]<<" "; } cout<<endl;}void swap(int arr[],int i,int j){ int temp=arr[i]; arr[i] = arr[j]; arr[j] = temp;}原创 2020-06-29 15:56:55 · 132 阅读 · 0 评论 -
剑指offer - 总
03.数组中的重复数字找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3二重循环 失败原因:超时hashset 失败原因:只有java有hashset,c++没有这个数据结构class Solution { public int findR原创 2020-06-22 11:16:08 · 309 阅读 · 0 评论