- 今日份的英语:晚上睡觉前看看吧
- 今日份的算法:没太有思路,第一想到的是暴力解法,却忽略了数学在算法思想中的重要性。当暴力解法的时间复杂度过高时,可以使用数学的思想转化一下,得出一个结论或者公式,这样就便于代码的编写。
- 今日份的SQL
- 今日份的八股
- 今日份的锻炼:
- 今日份的阅读
- 今日份的项目:Web课设博客部分前端基本搭建完成,页面布局更加游刃有余,卡片也做得更漂亮了!也学会了调样式的方法
- 今日份的科研:python学了很久,学了元组,字符串,序列,字典,确实有很多简单的方法
- 今日份的娱乐:暂无
- 今日份的绘画:要不今天画一幅?还是去学概率论捏
- 今日份的学习:同上
我决定每天必须坚持的:科研学习+绘画+算法。加油加油加油!
一、算法
- c++ Hashmap
//建立Hashmap
unordered_map<int,int> Hashmap;
//建立迭代器
unordered_map<int,int>::iterator it;
//插入键值对
//insert函数
Hashmap.insert(make_pair<int,int>(1,3));
Hashmap.insert(make_pair(1,3));
//以上两种皆可
//通过键添加
Hashmap[3]=1;
//其他函数
it = Hashmap.begin() //指向哈希表的第一个容器
it = Hashmap.end() //指向哈希表的最后一个容器,实则超出了哈希表的范围,为空
Hashmap.size() //返回哈希表的大小
Hashmap.empty() //判断哈希表是否为空,返回值为true/false
Hashmap.clear() //清空哈希表
//通过key值查找键值对
it = Hashmap.find(2) //查找key为2的键值对是否存在 ,若没找到则返回Hashmap.end()
if(Hashmap.find(2)!=Hashmap.end()) //判断找到了key为2的键值对
//通过key值查找该key值下的键值对对数
Hashmap.count(1) //返回 1
//swap交换两个Hashmap的键值对
Hashmap1.swap(Hashmap2);
swap(Hashmap1,Hashmap2);
//哈希表遍历
//第一种
unordered_map<int, int> Hashmap;
for (auto p : Hashmap) {
int front = p.first; //key
int end = p.second; //value
}
//第二种
unordered_map<int, int> Hashmap;
for(auto it=Hashmap.begin();it!=Hashmap.end();it++)
{
int front = it->first; //key
int end = it->second; //value
}
//第三种
unordered_map<int,int> hash;
unordered_map<int,int>::iterator it;
it = hash.begin();
while(it != hash.end())
{
int front= it->first; //key
int end = it->second; //value
it++;
}
//原文链接:https://blog.csdn.net/Misty_Rain_/article/details/122971817
- 题解:今天的算法不太会,只能想到暴力解决的思路,却不会把问题转化。主要思路贴在下面图上,但是还有一些问题,就是如何避免重复计算字符出现的次数--确定该字符唯一出现的区间,这里不是很懂,这样就能避免重复计算了吗??
过啦!
class Solution {
public:
int uniqueLetterString(string s) {
//哈希表记录每个字母出现的所有下标,存在vector<int>里面
unordered_map<char,vector<int>> mp;
for(int i=0;i<s.length();i++){
mp[s[i]].push_back(i);
}
int ans = 0;
for(auto p : mp){
vector<int> nums = p.second;
int index=0;
int left = 0;
int right = 0;
//找到相应的index,left和right
for(int i=0;i<nums.size();i++){
if(nums.size()==1){
index = nums[i];
left = 0;
right = s.length()-1;
}else {
if(i==0){
index = nums[i];
left = 0;
right = nums[i+1]-1;
}else if(i==nums.size()-1){
index = nums[i];
left = nums[i-1]+1;
right = s.length()-1;
}else {
index = nums[i];
left = nums[i-1]+1;
right = nums[i+1]-1;
}
}
ans += (index-left+1)*(right-index+1);
}
}
return ans;
}
};
二、Web课设
- a标签样式修改
<style>
a {
text-decoration: none;
color: #000;
}
/* 状态一: 未被访问过的链接 */
a:link {
text-decoration: none;
color: #000;
}
/* 状态二: 已经访问过的链接 */
a:visited {
text-decoration: none;
color: #000;
}
/* 状态三: 鼠标划过(停留)的链接(默认红色) */
a:hover {
text-decoration: none;
color: #000;
}
/* 状态四: 被点击的链接 */
a:active {
text-decoration: none;
color: #000;
}
</style>
- 富文本编辑器MdEditor
- 富文本编辑器选择:https://juejin.cn/post/7234418257759879223
- MdEditor使用:
https://blog.csdn.net/weixin_44468853/article/details/123068173
1.下载 npm install md-editor-v3
2.引入(与上面博客不同)
import 'md-editor-v3/lib/style.css';
import { MdEditor } from 'md-editor-v3';
3.使用:
<MdEditor :toolbarsExclude="['link', 'mermaid', 'katex', 'github','image']">
</MdEditor>
-
el-input带来的调试样式小技巧
右键-检查-找到大体的位置,点击右边元素,下面会出现css样式,就可以可以找到具体的class和id名,如果需要hover,focus,或active的话,就在左边做相应的操作,右下同样会显示出相应的css样式,如果直接写claas不行,记得使用深层选择器::deep或者/deep/
如图:通过这种方式找到了el-input在focus时的样式
-
样式美化:卡片在鼠标hover时悬浮
第一行X改成Y,就变成向上位移
第三行能让动画过渡更自然,不生硬,注意需要在父元素都加上才能生效
.blog-card:hover {
transform: translateX(-10px);
box-shadow: 0 26px 40px -24px rgb(0 36 100 / 50%);
transition: all 0.6 ease;
}
5. Elmessage.confirm
6. 父子组件传值 & 跳转传值
- 父子组件传值
父组件:引用并使用子组件,绑定变量传值
子组件:定义props,接收变量
- router跳转传值