数位dp
数位dp枚举0~n#include<bits/stdc++.h>using namespace std;vector<int> a(11);vector<int> b(11);void dfs(int p, int limit, int length){ if(p==length){ for(int i=0; i<length; i++) cout<<b[i]; cout<<endl; return ; } int up=limit?a[p]:9; for(int i=0; i<=up; i++){ b[p]=i; dfs(p+1,limit&&i==up,length); }}void handle(int num){ int p=0; while(num){ a[p++]=num%10; ...
单调栈
739.每日温度题目链接
题意概括:找下一个比当前元素大的数
关键点
栈存的是下标
如果每次存的都是比栈顶小的元素,找的就是比当前元素大的数
如果每次存的都是比栈顶大的元素,找的就是比当前元素小的数
单调栈记录的是遍历过的元素,栈顶和当前元素对比,再进行求值的过程
详细版代码class Solution {public: vector<int> dailyTemperatures(vector<int>& temperatures){ stack<int> st; vector<int> result(temperatures.size(),0); st.push(0); for(int i=1; i<temperatures.size(); i++) { if(temperatures[i]<temperatures[st.top()]){ ...
面经
数据结构与算法 展开查看
1.哈希冲突定义:在哈希表中,不同的键经过哈希函数计算后得到相同的哈希值,导致它们应该存储在哈希表的同一个位置上链地址法(Chaining):使用链表或其他数据结构,在哈希表的每个位置上维护一个链表,将哈希冲突的元素存储在同一个位置的链表中。当需要查找、插入或删除元素时,遍历对应位置的链表即可。这种方法简单且易于实现,但可能会造成额外的存储空间开销和链表的遍历操作。开放地址法(Open Addressing):当发生哈希冲突时,通过一定的规则在哈希表的其他位置寻找空槽来存储冲突元素。常见的开放地址法有线性探测、二次探测、双重哈希等。这种方法不需要额外的数据结构存储冲突元素,节省了存储空间,但可能导致聚集现象,即连续的冲突元素会聚集在一起,影响性能。建立更好的哈希函数:改进哈希函数的设计,减少哈希冲突的发生。好的哈希函数能够尽可能地将键均匀地分布在哈希表的各个位置上,减少冲突的概率。通常,好的哈希函数应该具有均匀性、雪崩效应(即输入的微小变化会导致输出的巨大变化)等特性。调整哈希表的负载因子:负载因子是 ...
C++11-右值引用
定义lvalue: 可以取地址
rvalue: 不可取地址
引用就是别名
只能通过左值去初始化左值引用,右值去初始化右值引用
常量的左值引用是万能的引用类型,可以用左值、左值引用、常量的右值引用
右值引用:延长临时变量的时间, A a=临时
左值引用:用来函数传递参数
移动构造函数-复用其他对象中的资源(堆内存)(浅拷贝+其他对象指针指向空)
右值引用:复用匿名对象所有资源
华为OD题库
1.最大化资源控制成本 查看代码测试
公司创新实验室正在研究如何最小化资源成本,最大化资源利用率,请你设计算法帮他们解决个任务混部问题: 有taskNum项任务,每个任务有开始时间 (startTime) ,结束时间(endTime)并行度(parallelism) 三个属性,并行度是指这个任务运行时将会占用的服务器数量,一个服务器在每个时刻可以被任意任务使用但最多被一个任务占用,任务运行完成立即释放(结束时刻不占用)。任务混部问题是指给定一批任务,让这批任务由同一批服务器承载运行请你计算完成这批任务混部最少需要多少服务器,从而最大最大化控制资源成本。输入描述:第一行输入为taskNum,表示有taskNum项任务接下来taskNum行,每行三个整数,表示每个任务的开始时间(startTime ) ,结束时间 (endTime ) ,并行度 (parallelism)输出描述:个整数,表示最少需要的服务器数量示例1 输入输出示例仅供调试,后台判断数据一般不包含示例输入32 3 16 9 20 5 1输出2说明共有三个任务,第一 ...
Hello World
第一篇Hexo博客
无重复的最长字串
题目给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
题目链接
暴力解法遍历字符串,找每个字符为首的最长子串。时间复杂度为O(n)*O(以首字符开始的字符串),寻找首字符开始的字符串时间复杂度O(n^2),总的时间复杂度为O(n^3)。
class Solution { public int lengthOfLongestSubstring(String s) { int maxLength = 0; //要考虑到空串的情况 int length=0; for(int i=0; i<s.length(); i++){ length = 1; for(int j=i+1; j<s.length(); j++){ String str = s.substring(i,j);// 子串范围s[i,j) if(str.indexOf(s.charAt(j)) < ...
两数之和
题目给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
题目链接
暴力解法// 双重循环class Solution { public int[] twoSum(int[] nums, int target) { int[] ans = new int[2]; for(int i=0; i<nums.length; i++){ for(int j = i+1; j< nums.length; j++){ if(nums[i]+nums[j]==target){ ans[0]=i; ans[1]=j; } ...
Markdown常用语法
偶的第一篇博客就从markdown语法开始吧,主要参考的是菜鸟教程。从中摘录了可能最常用的语法,并结合其他资源整合而成,那就让我们开始md之旅吧!。
标题# 一级标题## 二级标题### 三级标题
段落样式字体*斜体文本***粗体文本*****斜粗体文本***
斜体文本粗体文本斜粗体文本
分割线***
删除线~~Hell World~~
Hell World
下划线<u>带下划线文本</u>
带下划线文本
脚注[^名称][^名称]: 解释名称例:我用Hexo[^1]搭建了第一个博客[^1]:一个很好用的博客框架
我用Hexo1搭建了第一个博客
列表无序列表* 第一项* 第二项* 第三项
第一项
第二项
第三项
有序列表1. 第一项2. 第二项3. 第三项
第一项
第二项
第三项
列表嵌套1. 第一项: * 第一项嵌套的第一个元素 * 第一项嵌套的第二个元素2. 第二项: * 第二项嵌套的第一个元素 * 第二项嵌套的第二个元素
第一项:
第一项嵌套的第一个元素
第一项嵌套的第二个元素
第二项:
第二项嵌套的第一个元素 ...