前言新年好啊各位(迟到祝福) ,本打算2024年开始一个月更一篇文章,结果上个月没有更新😭,万万不可以放弃,这个月开始更起来,先补一下上个月的文章😫
需求来源仿Pizza-Express首页日历组件
技术栈NextJs框架 App Router版UI库:RadixUI无样式版CSS-IN-JS方案:PandaCSSReact日期组件库:react-datepicker项目搭建具体项目搭建,可以查看此链接👀
引入React Date Picker库
pnpm install react-datepicker
pnpm install @types/react-datepicker -D
引入Radix Dialog组件
pnpm install @radix-ui/react-dialog
日期组件成果展示
使用defineKeyframes(PandaCss) 定义全局动画
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849// theme/keyfr ...
序言时间过的真挺快,一转眼间就来到了2023年的末尾,去年的这个时候还在备战研究生,还在背肖老爷子的肖四肖八呢,跟几个大学好哥们一起备考,看了四年来一场杭州难得的大雪,想了想甚是怀念。但没想到现在已经是一个打工人社畜的形状🤣。这篇文章是我在掘金上的第一篇文章,对我这一年的经历做一个流水账😏总结,主要包括租房、找工作、学习、工作、生活等内容,各位就看个乐,能有所帮助那就再好不过。
姑且算是背景介绍回头看看这一年的经历,首先是考研失利,考完数一的那场,我就知道我G咯,大环境不好(还是自己太菜了,找工作的时候深有体会),加上普本计算机学子(大学大多时间还是以快乐为主哈哈哈),大学还没毕业,已经开始为自己未来感到焦虑。谈谈为啥选择前端这条路,大三搞竞赛的时候,对前端三剑客还是比较熟悉,为了做了一个考试系统相关的项目,自学了Vue,跟后端相比起来,前端相对来说更好上手,下定决心,干脆一条路走到黑,毕竟干这一行,得先找个方向入这一行。先入行再说,反正后边还能转!抱着这种心态,开启了我前端技术学习这条”不归路”。
第一份实习反思了一下,去年考研的动机是什么,大多数还是对进入社会工作的恐惧,不想 ...
老板说你Git玩不明白,要被裁了,怎么办?我来祝你一臂之力!
掌握接下来所讲的Git基础知识与技巧,希望能帮助大家在日常工作和学习中可以轻松使用这个强大的代码管理工具😏
先讲讲Git是个什么东东,以下内容直接CV大法,有所了解的朋友们选择性跳过
简介Git是一款免费、开源的分布式版本控制系统,用于高效地处理任何或小或大的项目。是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件
优点
版本控制,多人协同开发,适合分布式开发,强调个体,公共服务器压力和数据量都不会太大
速度快、灵活,任意两个开发者之间可以很容易的解决冲突
对于刚上手的新手来说,不推荐直接使用Git的相关GUI工具,好用归好用,建议在使用之前,对Git有一定程度的了解,并且熟练操作Git的常用命令。熟练之后,用GUI对比代码,解决冲突等其它操作,非常方便,嘎嘎香😍
正篇开始以下命令代码涉及到的远程源默认名为origin且双引号内为自定义内容
以下内容是我个人对这个工具的了解与心得,如有错误,欢迎各位大佬纠正
最基本流程
workspace:工作区,开发,变更代码所在位 ...
leetcode209 长度最小的子数组滑动窗口(双指针)关键是如何对左右指针的值进行动态变化
12345678910111213141516var minSubArrayLen = function(target, nums) { let left = 0; let right = 0; let sum = 0; let minLen = Infinity; while (right < nums.length) { sum += nums[right]; while (sum >= target) { minLen = Math.min(minLen, right - left + 1); sum -= nums[left]; left++; } right++; } return minLen === Infinity ? 0 : minLen;};
废话不多说上效果图源码HTML部分
1234567891011121314151617181920212223242526272829303132333435363738394041424344<div class="containerBoxLBT"> <div class="swiper-button-next swiper-icon"></div> <div class="swiper-button-prev swiper-icon"></div> <div class="swiper-container"> <div class="swiper-wrapper"> <div class="swiper-slide"> <img src="https://cbypicimg.oss-cn-hangzhou.aliyun ...
双指针+归并排序时间复杂度:O(n)空间复杂度:O(1) 除了存储答案的数组以外,我们只需要维护常量空间。
123456789101112131415161718192021222324252627282930313233var sortedSquares = function(nums) {let middle = -1 for (let i = 0; i < nums.length; i++) { if (nums[i] < 0) { // 寻找分界点 middle = i } } let left = middle let right = middle + 1 let arr = [] while (left > -1 || right < nums.length) { console.log('left', left, right) if (left < 0) { // 都是正数 ar ...
双指针写法(不好想到)m,n分别代表两个字符串长度空间复杂度o(1)优秀空间复杂度o(m+n)优秀 需要遍历两字符串各一次
123456789101112131415161718192021222324252627282930313233var backspaceCompare = function(S, T) { let i = S.length - 1, j = T.length - 1, skipS = 0, skipT = 0; // 大循环 while(i >= 0 || j >= 0){ // S 循环 while(i >= 0){ if(S[i] === '#'){ skipS++; i--; }else if(skipS > 0){ skipS--; ...
暴力解法就不写了以下是双指针写法
1234567891011var removeDuplicates = function(nums) { let slow = 0; for(let i = 1;i < nums.length;){ if(nums[i] != nums[slow]){ slow++; nums[slow] = nums[i]; } i++; } return slow};
双指针写法
12345678910111213141516var moveZeroes = function (nums) { let slow = 0; for (let i = 0; i < nums.length;i++) { if (nums[slow] != nums[i]) { let temp = -1 temp = nums[slow] nums[slow] = nums[i] nums[i] = temp slow++; } else { if(nums[slow] != 0){ slow++ } } };}
本题要将0向后移动,快慢指针需要考虑以下情况,快指针是无需“停下来的”,以下只考虑慢指针的值两个指针指向数组值相同时 ...
leetcode 2712345678910111213141516var removeElement = function (nums, val) { // 暴力解法 let record = 0 let size = nums.length for (let i = 0; i < size; i++) { if (nums[i] == val) { for (let j = i; j < size - 1; j++) { nums[j] = nums[j + 1] } record++; i--; size--; } } return nums.length - record};
1234567891011121314var removeElement = function (nums, ...



















