当前位置: 首页 > news >正文

代码随想录第一天|二分法、双指针

代码随想录第一天

    • Leetcode 704 二分查找
    • Leetcode 35 搜索插入位置
    • Leetcode 34 在排序数组中查找元素的第一个和最后一个位置
    • Leetcode 69 x 的平方根
    • Leetcode 367 有效的完全平方数
    • Leetcode 27 移除元素
    • Leetcode 26 删除有序数组中的重复项
    • Leetcode 283 移动零
    • Leetcode 844 比较含退格的字符串

Leetcode 704 二分查找

题目链接: 二分查找
自己的思路: 由于是有序数组,所以首先想到使用二分查找,通过取左右两边的中点依次判断与目标值的大小,逐渐缩小判断区间。二分查找的难点在于左右指针的初始点,while中的循环条件以及左右指针的更新规则,因为在二分查找的过程中是在[left,right]或者[left,right)中寻找元素,所以分左闭右开和左闭右闭两种。
左闭右闭
当情况为左闭右闭的时候,左指针毋庸置疑是从0索引开始,因为是右闭区间,右指针可以取到右端点,所以右指针的起始点应该为数组长度-1,而while中更新的规则,因为右指针可以取到右边界,所以可以设置left<=right为循环条件,也就是查找过程中right可以和left相等,而更新规则为:left=middle+1,right=middle-1,因为right可以取到middle,所以我们设置right的每次更新为right=middle-1;
左闭右闭
当情况为左闭右开的时候,左指针毋庸置疑是从0索引开始,因为是右开区间,右指针取不到右端点,所以右指针的起始点应该为数组长度,而while中更新的规则,因为右指针取不到右边界,所以可以设置left<right为循环条件,也就是查找过程中right不可以等于left,而更新规则为:left=middle+1,right=middle,因为right可以取不到middle,所以设置middle为右边开区间的部门;
在刚开始学的时候可以练一下两种写法,但是自己如果平时刷题或者笔试的时候还是以一种为主即可。

正确思路: 二分查找
左闭右闭

代码:

class Solution {public int search(int[] nums, int target) {//初始化左右指针为两个端点int left = 0;int right = nums.length - 1;//左闭右闭,right可以取到右边while(left <= right){//防止数值溢出int middle = left + (right-left)/2;//左半区间没有目标值(包括middle)if (nums[middle]<target) left = middle + 1;//右半区间没有目标值(包括middle)else if (nums[middle]>target) right = middle - 1;//找到目标值else return middle;}//整个数组没有目标值return -1;}
}

左闭右开
代码:

class Solution {public int search(int[] nums, int target) {//初始化左右指针为两个端点int left = 0;int right = nums.length;//左闭右开,right取不到右边while(left < right){//防止数值溢出int middle = left + (right-left)/2;//左半区间没有目标值(包括middle)if (nums[middle]<target) left = middle + 1;//右半区间没有目标值(包括middle) 由于right取不到右边,所以设置right为middleelse if (nums[middle]>target) right = middle;//找到目标值else return middle;}//整个数组没有目标值return -1;}
}

复杂度分析
时间复杂度: O ( log ⁡ ( n ) ) \mathcal{O}(\log(n)) O(log(n)) n n n为数组的长度
空间复杂度: O ( 1 ) \mathcal{O}(1) O(1)

相似题型

Leetcode 35 搜索插入位置

题目链接: 搜索插入位置
自己的思路: 由于是有序数组,所以首先想到使用二分查找,如果找到元素,返回它的索引,如果找不到元素,则找第一个大于target的元素,插在其左边即可。如果在数组中找不到元素的话,那么最终right和left落的位置一定是,left在第一个大于该元素的位置,right在left左边一个位置,所以最终返回left即可
正确思路: 二分查找
左闭右闭

代码:

class Solution {public int searchInsert(int[] nums, int target) {//定义左右两个指针int left = 0;int right = nums.length - 1;//左闭右闭while(left<=right){//取中点,防止溢出int middle = left + (right - left)/2;//右边没有,在左边找if (nums[middle] > target) right = middle - 1;//左边没有,在右边找else if (nums[middle] < target) left = middle + 1;//如果在数组中找到元素,返回索引即可else return middle;}//如果找不到元素即返回第一个大于target的索引return left;}
}

复杂度分析
时间复杂度: O ( log ⁡ ( n ) ) \mathcal{O}(\log(n)) O(log(n)) n n n表示数组的长度
空间复杂度: O ( 1 ) \mathcal{O}(1) O(1)

相似题型

Leetcode 34 在排序数组中查找元素的第一个和最后一个位置

题目链接: 在排序数组中查找元素的第一个和最后一个位置
自己的思路: 因为题目中要求复杂度是 O ( log ⁡ ( n ) ) \mathcal{O}(\log(n)) O(log(n)),而且数组是非递减顺序的数组,所以我们第一个想到的就是二分查找,这里我采用两个二分查找来分别查找target的左边界和右边界,然后让他们两个组成一个数组返回即可。以寻找右边界为例进行讲解,首先和正常的左闭右闭二分法一样的讨论,当nums[middle]<target的时候缩小边界,使left=middle+1,当nums[middle]>target的时候缩小边界,使right=middle-1,不同的点并且最重要的点在于nums[middle]=target的时候,因为要寻找右边界,我们要尽可能地让左指针贴近右指针,也就是贴近右边界,所以我们要动左指针,让左指针left=middle+1,如果动右指针没法保证落在右边界,最后返回的时候要判断数据的有效性,是否不越界并且是否nums[right]的值是否等于target,如果都满足才返回right,否则返回-1。寻找左边界的分析方法同理。
正确思路: 二分查找

代码:

class Solution {public int[] searchRange(int[] nums, int target) {int length = nums.length;if (length==0) return new int[]{-1,-1};int left = searchleft(target,nums,length);int right = searchright(target,nums,length);return new int[]{left,right};}//寻找target的右边界public int searchright(int target,int[] nums,int length){//左右指针int left = 0;int right = length - 1;while(left<=right){//中点,防止溢出int middle = (right-left)/2 + left;//前面两个和二分查找类似if (nums[middle]<target){left = middle + 1;}else if (nums[middle]>target){right = middle - 1;}else{  //注意这里,因为要找的是右边界,所以我们要尽可能地让left向right的位置靠近,所以这里动的//是left,而不是right,如果动right的话不能保证是右边界left = middle + 1;}}//如果right合法返回right,为什么要返回right,因为跳出循环的时候,//nums[right]=target,但是left在right的右边,不能满足nums[left]=targetreturn (right<0||nums[right]!=target)?-1:right;}//寻找target的左边界//和上面寻找右边界同理public int searchleft(int target,int[] nums,int length){int left = 0;int right = length - 1;while(left<=right){int middle = (right-left)/2 + left;if (nums[middle]<target){left = middle + 1;}else if (nums[middle]>target){right = middle - 1;}else{right = middle - 1;}}return (left>length-1||nums[left]!=target)?-1:left;}
}

复杂度分析
时间复杂度: O ( log ⁡ ( n ) ) \mathcal{O}(\log(n)) O(log(n)) n n n表示数组的长度
空间复杂度: O ( 1 ) \mathcal{O}(1) O(1)

相似题型

Leetcode 69 x 的平方根

题目链接: x 的平方根
自己的思路: 比较经典的二分查找,注意要把middle*middle转换成long避免溢出即可。
正确思路: 二分查找

代码:

class Solution {public int mySqrt(int x) {//定义初始左右边界int left = 0;int right = x;//开始二分查找while(left<=right){//中点int middle = (right-left)/2 + left;if ((long)middle*middle<x){left = middle + 1;}else if ((long)middle*middle>x){right = middle - 1;}else{return middle;}}//因为最后跳出循环的时候left一定是大于right的,根据题目信息应该返回较小的那个return right;}
}

复杂度分析
时间复杂度: O ( log ⁡ ( n ) ) \mathcal{O}(\log(n)) O(log(n))
空间复杂度: O ( 1 ) \mathcal{O}(1) O(1)

相似题型

Leetcode 367 有效的完全平方数

题目链接: 有效的完全平方数
自己的思路: 比较经典的二分查找,注意要把middle*middle转换成long避免溢出即可。
正确思路: 二分查找

代码:

class Solution {public boolean isPerfectSquare(int num) {int left = 0;int right = num;while(left<=right){int middle = (right-left)/2 + left;if ((long)middle*middle<num){left = middle + 1;}else if ((long)middle*middle>num){right = middle - 1;}else{return true;}}return false;}
}

复杂度分析
时间复杂度: O ( log ⁡ ( n ) ) \mathcal{O}(\log(n)) O(log(n))
空间复杂度: O ( 1 ) \mathcal{O}(1) O(1)

Leetcode 27 移除元素

题目链接: 移除元素

自己的思路:双指针经典问题,可以定义一个快指针,一个慢指针,快指针在前面判断数组中的值是否等于val,如果不等于则把快指针的值赋给慢指针的位置,然后快慢指针都向前进一步;如果等于,快指针往前进一步,慢指针不动,这样前slow个元素就是移除val以后的数组了,也就是我们想要的。
正确思路:双指针

双指针解法
代码:

class Solution {public int removeElement(int[] nums, int val) {//定义慢指针int slow = 0;//快指针遍历,无论fast处的值等不等于val,快指针都前进一步for (int fast=0;fast<nums.length;fast++){//快指针的值如果不等于val,则将此处的值赋给慢指针位置,慢指针前进一步if (nums[fast]!=val){nums[slow] = nums[fast];slow++;}}//因为最后慢指针++了,所以返回前slow个元素即可return slow;}
}

复杂度分析
时间复杂度: O ( n ) \mathcal{O}(n) O(n)
空间复杂度: O ( 1 ) \mathcal{O}(1) O(1)

相似题型

Leetcode 26 删除有序数组中的重复项

题目链接: 26

自己的思路:双指针经典问题,可以定义一个快指针,一个慢指针,快指针在前面判断数组中的值是否等于之前慢指针的值,如果不等于则把快指针的值赋给慢指针的位置,然后快慢指针都向前进一步;如果等于,快指针往前进一步,慢指针不动,这样前slow个元素就是移除val以后的数组了,也就是我们想要的。
正确思路:双指针

双指针解法
代码:

class Solution {public int removeDuplicates(int[] nums) {//定义慢指针,由于要判断慢指针前面一个位置的值作为临时变量,所以慢指针必须从1开始int slow = 1;//快指针也必须从1开始,无论如何快指针都前进一步for (int fast=1;fast<nums.length;fast++){//定义临时变量用来记录慢指针前面一个位置的值int temp = nums[slow-1];//如果快指针不等于之前慢指针的值,则把快指针的值赋给慢指针的位置,慢指针前进一步if (nums[fast]!=temp){nums[slow] = nums[fast];slow++;}}//由于最后slow++,所以直接返回slow即可,slow即为新数组的长度return slow;}
}

复杂度分析
时间复杂度: O ( n ) \mathcal{O}(n) O(n)
空间复杂度: O ( 1 ) \mathcal{O}(1) O(1)

相似题型

Leetcode 283 移动零

题目链接: 移动零

自己的思路:双指针经典问题,可以定义一个快指针,一个慢指针,快指针在前面判断数组中的值是否0,如果值不为0,则交换两个指针的值,如果为0,快指针前进,这样可以把不为0的值都移到前面去,为0的值都移到后面去。
正确思路:双指针

双指针解法
代码:

class Solution {public void moveZeroes(int[] nums) {//定义两个指针int slow = 0;int fast = 0;while(fast<nums.length){//如果快指针的值不为0,就交换两个指针的值if (nums[fast]!=0){int temp = nums[slow];nums[slow] = nums[fast];nums[fast] = temp;slow++;fast++;}else{fast++;}}}
}

复杂度分析
时间复杂度: O ( n ) \mathcal{O}(n) O(n)
空间复杂度: O ( 1 ) \mathcal{O}(1) O(1)

相似题型

Leetcode 844 比较含退格的字符串

题目链接: 比较含退格的字符串

自己的思路:因为’#‘可以去掉前面一个元素,所以我们可以选择使用两个指针i和j从后向前遍历两个字符串,并且定义两个变量sskip和tskip记录两个字符串里面’#‘的个数。以字符串s为例,当当前元素为’#‘时,那么sskip++,i–;当当前元素不为’#'且sskip大于0,那么sskip++,i–;否则直接跳出,然后判断当前的元素和t当前的元素是否相等,如果不相等,返回false,否则继续判断。
正确思路:双指针

双指针解法
代码:

class Solution {public boolean backspaceCompare(String s, String t) {//定义两个指针在两个字符串后面,从后向前遍历int i = s.length()-1;int j = t.length()-1;//记录'#'的个数int sskip = 0;int tskip = 0;//遍历两个字符串while(i>=0||j>=0){//遍历字符串swhile(i>=0){//如果字符串为'#',则'#'个数+1,i--if (s.charAt(i)=='#'){sskip++;i--;//如果字符串不为'#',而且后面的'#'的个数还存在,那么就给它--,i--}else if (sskip>0){sskip--;i--;//如果字符串不为'#',而且sskip为0,直接跳出循环,后面类似}else{break;}}while(j>=0){if (t.charAt(j)=='#'){tskip++;j--;}else if (tskip>0){tskip--;j--;}else{break;}}//当i和j是都是合理索引的时候,判断两个字符串当前值if (i>=0&&j>=0){if (s.charAt(i)!=t.charAt(j)){return false;}}else{     //如果两个里面至少有一个不是合理索引,如果其中一个i是合理索引,直接返回falseif (i>=0||j>=0){return false;}}i--;j--;}//遍历完成,如果没有返回false,即为truereturn true;}
}

复杂度分析
时间复杂度: O ( 1 ) \mathcal{O}(1) O(1)
空间复杂度: O ( 1 ) \mathcal{O}(1) O(1)

相关文章:

代码随想录第一天|二分法、双指针

代码随想录第一天 Leetcode 704 二分查找Leetcode 35 搜索插入位置Leetcode 34 在排序数组中查找元素的第一个和最后一个位置Leetcode 69 x 的平方根Leetcode 367 有效的完全平方数Leetcode 27 移除元素Leetcode 26 删除有序数组中的重复项Leetcode 283 移动零Leetcode 844 比较…...

Flink中KeyedStateStore实现--怎么做到一个Key对应一个State

背景 在Flink中有两种基本的状态&#xff1a;Keyed State和Operator State&#xff0c;Operator State很好理解&#xff0c;一个特定的Operator算子共享同一个state&#xff0c;这是实现层面很好做到的。 但是 Keyed State 是怎么实现的&#xff1f;一般来说&#xff0c;正常的…...

flex: 0 0 100%;

flex: 0 0 100%; flex: 0 0 100%; 是一个用于设置flex项的flex-grow、flex-shrink和flex-basis属性的缩写flex-grow&#xff1a;指定了flex项在剩余空间中的放大比例&#xff0c;默认为0&#xff0c;表示不放大。在这个例子中&#xff0c;设置为0表示不允许flex项在水平方向上…...

IMX6ULL系统移植篇-镜像烧写方法

一. 烧录镜像简介 本文我们就来学习&#xff1a;windows 系统下烧录镜像的方法。 如何使用 NXP 官方提供的 MfgTool 工具通过 USB OTG 口来 烧写系统。 二. windows下烧录镜像 1. 烧录镜像前准备工作 &#xff08;1&#xff09;从开发板上拔下 SD卡。 &#xff08;2…...

【Android】实现雷达扫描效果,使用自定义View来绘制雷达扫描动画

要在Android上实现雷达扫描效果&#xff0c;你可以使用自定义View来绘制雷达扫描动画。以下是一个简单的示例代码&#xff1a; 创建一个名为RadarView的自定义View类&#xff0c;继承自View&#xff1a; import android.content.Context; import android.graphics.Canvas; im…...

小程序 - 文件预览

小程序文件预览 /** 预览 - txt文本 */viewTxt(path) {let fs wx.getFileSystemManager();let _this this;fs.readFile({filePath: path,encoding: "utf8",position: 0,success(res) {_this.setData({setNoRefresh: true});wx.navigateTo({url: /pages/view-txt/v…...

将String类型的证书转换为X509Certificate类型对象,读取证书链文件内容,完成证书链校验

证书内容如下所示: 证书内容如下 -----BEGIN CERTIFICATE----- MIIFZDCCA0ygAwIBAgIIYsLLTehAXpYwDQYJKoZIhvcNAQELBQAwUDELMAkGA1UEBhMCQ04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UECwwKSHVhd2VpIENCRzEbMBkGA1UEAwwSSHVhd2VpIENCRyBSb290IENBMB4XDTE3MDgyMTEwNTYyN1oXDTQyMDgxNTEw…...

v-model实现原理(一根绳上的蚂蚱)

目录 1、什么是v-model2、v-model实现原理3、实现示例3.1 实现text和textarea3.2 实现checkbox和radio3.3 实现select 1、什么是v-model v-model 本质上是一颗语法糖&#xff0c;可以用 v-model 指令在表单 <input>、<textarea> 及 <select>元素上创建双向数…...

第三章 仅支持追加的单表内存数据库

第三章 仅支持追加的单表内存数据库 我们将从小处着手&#xff0c;对数据库施加很多限制。目前&#xff0c;它有如下限制&#xff1a; 支持两种操作&#xff1a;插入一行和打印所有行 仅驻留在内存中&#xff08;不需要持久化到磁盘&#xff09; 支持单个硬编码表 我们的硬…...

抖音seo矩阵系统源码解析

抖音SEO矩阵系统源码是一种用于优化抖音视频内容的工具&#xff0c;可以帮助用户提高抖音视频的搜索排名和流量&#xff0c;从而增加视频曝光和转化率。该系统包括两部分&#xff0c;即数据收集和分析模块以及SEO策略和实施模块。 数据收集和分析模块主要负责从抖音平台上收集…...

6个ChatGPT4的最佳用途

文章目录 ChatGPT 4’s Current Limitations ChatGPT 4 的当前限制1. Crafting Complex Prompts 制作复杂的提示2. Logic Problems 逻辑问题3. Verifying GPT 3.5 Text 验证 GPT 3.5 文本4. Complex Coding 复杂编码5.Nuanced Text Transformation 细微的文本转换6. Complex Kn…...

go系列-读取文件

1 概述 2 整个文件读入内存 直接将数据直接读取入内存&#xff0c;是效率最高的一种方式&#xff0c;但此种方式&#xff0c;仅适用于小文件&#xff0c;对于大文件&#xff0c;则不适合&#xff0c;因为比较浪费内存。 2.1 直接指定文化名读取 在 Go 1.16 开始&#xff0c;i…...

10 编码转换问题

文章目录 字符编码问题编码转换问题ANSI转UnicodeUnicode转ANSIUtf8转 ANSIutf8 转UnicodeANSI 转UTF-8Unicode 转 UTF-8 全部代码 字符编码问题 Windows API 函数 MessageBoxA:MessageBox 内部实现&#xff0c;字符串编码(ANSI)转换成了Unicode,在调用MessageboxW MessageBox:…...

Spring MVC获取参数和自定义参数类型转换器及编码过滤器

目录 一、使用Servlet原生对象获取参数 1.1 控制器方法 1.2 测试结果 二、自定义参数类型转换器 2.1 编写类型转换器类 2.2 注册类型转换器对象 2.3 测试结果 三、编码过滤器 3.1 JSP表单 3.2 控制器方法 3.3 配置过滤器 3.4 测试结果 往期专栏&文章相关导读…...

理想的实验

1.关于“问题”的问题 一项研究计划可以围绕四个基本问题&#xff08;frequently asked questions,FAQ&#xff09;展开&#xff1a; 研究对象间的&#xff08;因果&#xff09;关系&#xff08;relationship of interest&#xff09; 这里更关注的是“因果关系”&#xff0c…...

nginx配置开机启动(Windows环境)

文章目录 1、下载nginx&#xff0c;并解压2、配置nginx.conf&#xff0c;并启动Nginx3、开机自启动 1、下载nginx&#xff0c;并解压 2、配置nginx.conf&#xff0c;并启动Nginx 两种方法&#xff1a; 方法一&#xff1a;直接双击nginx.exe&#xff0c;双击后一个黑色弹窗一闪…...

MySQL 基础面试题02(事务索引)

1.什么是 MySQL 事务&#xff1f; MySQL 事务是指一组操作&#xff0c;是一个不可分割的工作单位&#xff0c;可以确保一组数据库操作要么全部执行&#xff0c;要么全部不执行。换句话说&#xff0c;事务是 MySQL 中保证数据一致性和完整性的机制。 在 MySQL 中&#xff0c;事…...

主从架构lua脚本-Redis(四)

上篇文章介绍了rdb、aof持久化。 持久化RDB/AOF-Redis&#xff08;三&#xff09;https://blog.csdn.net/ke1ying/article/details/131148269 redis数据备份策略 写job每小时copy一份到其他目录。目录里可以保留最近一个月数据。把目录日志保存到其他服务器&#xff0c;防止机…...

maven与idea版本适配问题

maven与idea版本适配问题 1.版本对应关系——3.6.3 注意&#xff1a;针对一些老项目 还是尽量采用 3.6.3版本&#xff0c;针对idea各个版本的兼容性就很兼容 0.IDEA 2022 兼容maven 3.8.1及之前的所用版本 1.IDEA 2021 兼容maven 3.8.1及之前的所用版本 2.IDEA 2020 兼容Mave…...

ChatGPT扫盲知识库

本文并不是教你如何使用ChatGPT&#xff0c;而是帮助小白理清一些与ChatGPT相关的概念&#xff0c;并解释一些常见的问题。 概念 OpenAI: 一家人工智能公司&#xff0c;ChatGPT属于该公司的产品之一。前身是一个非盈利组织&#xff0c;不过目前已经转变为一家商业公司。 GPT: O…...

chatgpt赋能python:Python轨迹可视化:用数据讲故事

Python轨迹可视化&#xff1a;用数据讲故事 介绍 随着物联网、智能城市等领域的发展&#xff0c;越来越多的数据被收集下来并存储在数据库中。这些数据对于决策者来说是非常重要的&#xff0c;但是如何将这些数据进行展示和分析呢&#xff1f;这时候Python轨迹可视化就可以派…...

K-means

K-means 主要缺点&#xff1a;对于高维度数据&#xff0c;用kmeans方法可能会受到数据形态的影响&#xff0c;其假设高维数据呈球形分布。...

归并排序(基础+提升)

目录 归并排序的理论知识 归并排序的实现 merge函数 递归实现 递归改非递归 归并排序的性能分析 题目强化 题目一&#xff1a;小和问题 题目二&#xff1a;求数组中的大两倍数对数量 题目三&#xff1a;LeetCode_327. 区间和的个数 归并排序的理论知识 归并排序&…...

MATLAB应用

目录 网站 智能图像色彩缩减和量化 网站 https://yarpiz.com/ 智能图像色彩缩减和量化 使用智能聚类方法&#xff1a;&#xff08;a&#xff09;k均值算法&#xff0c;&#xff08;b&#xff09;模糊c均值聚类&#xff08;FCM&#xff09;和&#xff08;c&#xff09;自组织神…...

LeetCode --- 1784. Check if Binary String Has at Most One Segment of Ones 解题报告

Given a binary string s ​​​​​without leading zeros, return true​​​ if s contains at most one contiguous segment of ones. Otherwise, return false. Example 1: Input: s = "1001" Output: false Explanation: The ones do not form a contiguous s…...

js:javascript中的事件体系:常见事件、事件监听、事件移除、事件冒泡、事件捕获、事件委托、阻止事件

参考资料 事件介绍Element事件 目录 常见的事件鼠标事件键盘事件Focus events 添加事件监听方式一&#xff1a;addEventListener()&#xff08;推荐&#xff09;方式二&#xff1a;事件处理器属性方式三&#xff1a;内联事件处理器&#xff08;不推荐&#xff09; 移除监听器方…...

【数据结构】特殊矩阵的压缩存储

&#x1f387;【数据结构】特殊矩阵的压缩存储&#x1f387; &#x1f308; 自在飞花轻似梦,无边丝雨细如愁 &#x1f308; &#x1f31f; 正式开始学习数据结构啦~此专栏作为学习过程中的记录&#x1f31f; 文章目录 &#x1f387;【数据结构】特殊矩阵的压缩存储&#x1f38…...

在layui中使用vue,使用vue进行页面数据部分数据更新

layui是一款非常优秀的框架&#xff0c;使用也非常的广泛&#xff0c;许多后台管理系统都使用layui&#xff0c;简单便捷&#xff0c;但是在涉及页面部分数据变化&#xff0c;就比较难以处理&#xff0c;比如一个页面一个提交页&#xff0c;提交之后部分数据实时进行更新&#…...

Vue中如何进行数据导入与Excel导入

Vue中如何进行数据导入与Excel导入 Vue是一款非常流行的JavaScript框架&#xff0c;它提供了一套用于构建用户界面的工具和库。在Vue中&#xff0c;我们可以使用多种方式来导入数据&#xff0c;包括从服务器获取数据、从本地存储获取数据、从文件中读取数据等等。其中&#xf…...

git 的基本操作

1. git建立本地仓库 在想要建立的目录下输入命令 git init 我们可以看一下 .git目录下有什么 2. 配置git本地仓库 配置用户的 name 和 email 命令&#xff1a;git config [...] 配置完后&#xff0c;我们像查看一下 刚才的配置 2.1 查看配置命令 git config -l 2.2 删除…...