LeetCode hot100(自用背诵、部分题目、非最优解)

news2024/12/23 17:44:31

点击题目可以跳转到LeetCode

哈希

两数之和

public int[] twoSum(int[] nums, int target) {
        int length=nums.length;
        int[] ans = new int[2];
        for (int i = 0; i <length-1 ; i++) {
            for (int j = i+1; j < length; j++) {
                if(nums[i]+nums[j]==target){
                    ans[0]=i;
                    ans[1]=j;
                }
            }
        }
        return ans;
    }

字母异位词分组

public List<List<String>> groupAnagrams(String[] strs) {
        HashMap<String, List<String>> map = new HashMap<>();
        List<List<String>> res = new ArrayList<>();
        for (String str : strs) {
            char[] chars = str.toCharArray();//把字符串转为数组
            Arrays.sort(chars);//排序
            String sortedStr = new String(chars);//把数组转为字符串
            List<String> tempList = map.getOrDefault(sortedStr, new ArrayList<>());//有就加入,没有就创建新的列表
            tempList.add(str);
            map.put(sortedStr,tempList);
        }
        res.addAll(map.values());
        return res;
    }

最长连续序列

public int longestConsecutive(int[] nums) {
        if(nums.length==0){
            return 0;
        }
        Set<Integer> set = new HashSet<>();//去重
        List<Integer> list = new ArrayList<>();
        for (int i : nums) {
            set.add(i);
        }
        list.addAll(set);
        Collections.sort(list);
        int cnt=0;
        int max=0;
        for (int i = 1; i < list.size(); i++) {
            if(list.get(i)-1==list.get(i-1)){
                cnt++;
            }else {
                cnt=0;
            }
            max=Math.max(cnt,max);
        }
        return max+1;
    }

双指针

移动零

public void moveZeroes(int[] nums) {
        int temp=0;
        for (int i = 0; i < nums.length; i++) {
            if(nums[i]!=0){//用一个临时值,把所有非0的元素全都移动到前面
                nums[temp]=nums[i];
                temp++;
            }
        }
        while (temp<nums.length){//后面的补上0
            nums[temp]=0;
            temp++;
        }
    }

盛最多水的容器

//左右两个指针
//每次移动最短的  因为移动最短的面积有可能增大  移动长的面积一定变小
public int maxArea(int[] height) {
        int i=0;
        int j=height.length-1;
        int res=0;
        while (i<j){
            int value=Math.min(height[i],height[j])*(j-i);
            if(height[i]<height[j]){
                res=Math.max(res,value);
                i++;
            }else {
                res=Math.max(res,value);
                j--;
            }
        }
        return res;
    }

三数之和

//三重for循环超时
    public List<List<Integer>> threeSum(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();
        HashSet<List<Integer>> set = new HashSet<>();//去重
        for (int i = 0; i < nums.length-2; i++) {
            for (int j = i+1; j < nums.length-1; j++) {
                for (int k = j+1; k < nums.length; k++) {
                    if(nums[i]+nums[j]+nums[k]==0){
                        List<Integer> list= new ArrayList<>();
                        list.add(nums[i]);
                        list.add(nums[j]);
                        list.add(nums[k]);
                        Collections.sort(list);
                        set.add(list);
                    }
                }
            }
        }
        res.addAll(set);
        return res;
    }

接雨水

//按列来看  装的水的高度为左右两边的最低高度减去自身的高度
public int trap(int[] height) {
        int sum=0;
        for (int i = 0; i < height.length; i++) {
            if(i==0||i==height.length-1){
                continue;
            }
            int left=height[i];
            int right=height[i];
            for (int j = i-1; j >=0 ; j--) {//记录左边最高高度
                if(height[j]>left){
                    left=height[j];
                }
            }
            for (int j = i+1; j <=height.length-1 ; j++) {//记录右边最高高度
                if(height[j]>right){
                    right=height[j];
                }
            }
            sum+=Math.min(left,right)-height[i];
        }
        return sum;
    }

 滑动窗口

滑动窗口算法框架

//左闭右开
public class SlidingWindow {
    /* 滑动窗口算法框架 */
    void slidingWindow(string s, string t) {
        Map<Character, Integer> need = new HashMap<>();
        Map<Character, Integer> window = new HashMap<>();
        for (char c:t.toCharArray()){
            need.put(c,need.getOrDefault(c,0)+1);
        }
        int left = 0, right = 0;
        int valid = 0;
        while (right < s.length()) {
            // c 是将移入窗口的字符
            char c = s.charAt(right);
            // 右移窗口
            right++;

            // 进行窗口内数据的一系列更新
            ...

            /*** debug 输出的位置 ***/
            System.out.printf("window: [%d, %d]\n", left, right);
            /********************/

            // 判断左侧窗口是否要收缩  有时候需要控制窗口的固定大小
            while (window needs shrink) {
                // d 是将移出窗口的字符
                char d = s.charAt(left);
                // 左移窗口
                left++;
                // 进行窗口内数据的一系列更新
                ...
            }
        }
    }
}

无重复字符的最长子串

public int lengthOfLongestSubstring(String s) {
        Map<Character, Integer> window = new HashMap<>();
        int left = 0, right = 0;
        int res=0;
        while (right < s.length()) {
            // c 是将移入窗口的字符
            char c = s.charAt(right);
            // 右移窗口
            right++;

            // 进行窗口内数据的一系列更新
            window.put(c,window.getOrDefault(c,0)+1);


            // 判断左侧窗口是否要收缩  有时候需要控制窗口的固定大小
            while (window.get(c)==2) {;
                // d 是将移出窗口的字符
                char d = s.charAt(left);
                // 左移窗口
                left++;
                // 进行窗口内数据的一系列更新
                window.put(d,window.get(d)-1);
            }
            res=Math.max(res,right-left);//注意是在这里更新
        }
        return res;
    }

 找到字符串中所有字母异位词

public List<Integer> findAnagrams(String s, String p) {
        Map<Character, Integer> need = new HashMap<>();
        Map<Character, Integer> window = new HashMap<>();
        List<Integer> list = new ArrayList<>();
        for (char c:p.toCharArray()){
            need.put(c,need.getOrDefault(c,0)+1);
        }
        int left = 0, right = 0;
        int valid = 0;
        while (right < s.length()) {
            // c 是将移入窗口的字符
            char c = s.charAt(right);
            // 右移窗口
            right++;

            // 进行窗口内数据的一系列更新
            if(need.containsKey(c)){
                window.put(c,window.getOrDefault(c,0)+1);
                if(window.get(c).equals(need.get(c))) valid++;
            }

            // 判断左侧窗口是否要收缩  有时候需要控制窗口的固定大小
            while (right-left>=p.length()) {
                if(valid==p.length()){
                    list.add(left);
                }
                // d 是将移出窗口的字符
                char d = s.charAt(left);
                // 左移窗口
                left++;
                // 进行窗口内数据的一系列更新
                if(need.containsKey(d)){
                    if(window.get(d).equals(need.get(d))) valid--;
                    window.put(d,window.get(d)-1);
                }
            }
        }
        return list;
    }

子串 

前缀和数组:其中每个元素是原始数组中从开始到当前元素的元素之和(子数组求和问题

和为 K 的子数组

//前缀和加哈希表
public int subarraySum(int[] nums, int k) {
        HashMap<Integer, Integer> map = new HashMap<>();
        int count=0;
        int presum=0;
        map.put(0,1);// 初始化,前缀和为0出现1次
        for(int x:nums){
            presum+=x;
            if(map.containsKey(presum-k)){
                count+=map.get(presum-k);
            }
            map.put(presum,map.getOrDefault(presum,0)+1);
        }
        return count;
    }

 滑动窗口最大值

//超时 37/51
public int[] maxSlidingWindow(int[] nums, int k) {
        int[] res=new int[nums.length-k+1];//存放所有计算出来的值
        List<Integer> temp = new ArrayList<>();
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < k; i++) {
            temp.add(nums[i]);
        }
        list.add(Collections.max(temp));
        for (int i = k; i < nums.length; i++) {
            temp.removeFirst();
            temp.add(nums[i]);
            list.add(Collections.max(temp));
        }
        for (int i = 0; i < res.length; i++) {
            res[i]=list.get(i);
        }
        return res;
    }

 最小覆盖子串

public String minWindow(String s, String t) {
        Map<Character, Integer> need = new HashMap<>();
        Map<Character, Integer> window = new HashMap<>();
        String res="";
        int min=Integer.MAX_VALUE;
        for (char c:t.toCharArray()){
            need.put(c,need.getOrDefault(c,0)+1);
        }
        int left = 0, right = 0;
        int valid = 0;
        while (right < s.length()) {
            // c 是将移入窗口的字符
            char c = s.charAt(right);
            // 右移窗口
            right++;

            // 进行窗口内数据的一系列更新
            if(need.containsKey(c)){
                window.put(c,window.getOrDefault(c,0)+1);
                if(window.get(c).equals(need.get(c))) valid++;
            }

            // 判断左侧窗口是否要收缩  有时候需要控制窗口的固定大小
            while (valid==need.size()) {
                if(right-left<min){
                    res=s.substring(left,right);
                    min=right-left;
                }
                // d 是将移出窗口的字符
                char d = s.charAt(left);
                // 左移窗口
                left++;
                // 进行窗口内数据的一系列更新
                if(need.containsKey(d)){
                    if(window.get(d).equals(need.get(d))) valid--;
                    window.put(d,window.get(d)-1);
                }
            }
        }
        return res;

普通数组 

矩阵置零

public void setZeroes(int[][] matrix) {
        //记录行和列中有0的坐标
        Set<Integer> rowSet = new HashSet<>();
        Set<Integer> columnSet = new HashSet<>();
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                if(matrix[i][j]==0){
                    rowSet.add(i);
                    columnSet.add(j);
                }
            }
        }
        //把行中有0的行  全部置为0
        for (Integer i : rowSet) {
            for (int j = 0; j < matrix[0].length; j++) {
                matrix[i][j]=0;
            }
        }
        //把所有列中有0的列 全部置为0
        for (Integer i : columnSet) {
            for (int j = 0; j < matrix.length; j++) {
                matrix[j][i]=0;
            }
        }
    }

螺旋矩阵

public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> res = new ArrayList<>();
        int m=matrix.length;
        int n=matrix[0].length;
        int up=0,down=m,left=0,right=n;
        while (true){
            //处理上边界
            for (int i = left; i <right ; i++) {
                res.add(matrix[up][i]);
            }
            up++;
            if(up>=down) break;

            //处理右边界
            for (int i = up; i < down; i++) {
                res.add(matrix[i][right-1]);
            }
            right--;
            if (right<=left) break;

            //处理下边界
            for (int i = right-1; i >=left ; i--) {
                res.add(matrix[down-1][i]);
            }
            down--;
            if(down<=up) break;

            //处理左边界
            for (int i = down-1; i >up-1 ; i--) {
                res.add(matrix[i][left]);
            }
            left++;
            if(left>=right) break;
        }
        return res;
    }

旋转图像

//没有用原地算法
public void rotate(int[][] matrix) {
        //clone是浅克隆   新new深克隆
        int length=matrix[0].length;
        int[][] temp = new int[length][length];
        for (int i = 0; i < length; i++) {
            for (int j = 0; j < length; j++) {
                temp[i][j] = matrix[i][j];
            }
        }

        for (int i = 0; i < length; i++) {
            for (int j = 0; j < length; j++) {
                matrix[i][j]=temp[length-1-j][i];
            }
        }
        System.out.println(Arrays.deepToString(matrix));
    }

 搜索二维矩阵 II

//直接两层for循环
public boolean searchMatrix(int[][] matrix, int target) {
        int row=matrix.length;
        int column=matrix[0].length;
        for (int i = 0; i <row ; i++) {
            for (int j = 0; j < column; j++) {
                if(matrix[i][j]==target){
                    return true;
                }
            }
        }
        return false;
    }

链表 

相交链表

//核心代码
指针指向的是地址   移动的距离相同  指向的地址一样
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode pa=headA,pb=headB;
        while(pa!=pb){
            pa=pa==null?headB:pa.next;
            pb=pb==null?headA:pb.next;
        }
        return pa;
    }

 反转链表

//三指针
public ListNode reverseList(ListNode head) {
        ListNode pre=null;
        ListNode cur=head;//保留头结点
        ListNode temp=null;
        while (cur!=null){//循环的次数
            temp=cur.next;
            cur.next=pre;
            pre=cur;
            cur=temp;
        }
        return pre;
    }
​

回文链表

//使用两个集合来判断
public boolean isPalindrome(ListNode head) {
        ArrayList<Integer> list = new ArrayList<>();
        ArrayList<Integer> temp = new ArrayList<>();
        while (head !=null){
            list.add(head.val);
            temp.add(head.val);
            head=head.next;
        }
        Collections.reverse(list);
        if(temp.equals(list)){
            return true;
        }
        return false;
    }

 环形链表

//通过节点的地址来判断,没有环就不会无限循环  有地址相等的话就是有环
public boolean hasCycle(ListNode head) {
        List<ListNode> list = new ArrayList<>();
        while (head!=null){
            list.add(head);
            if(list.contains(head.next)){//判断下一个节点的地址在集合中是否存在
                return true;
            }
            head = head.next;
        }
        return false;
    }

环形链表 II

public ListNode detectCycle(ListNode head) {
        List<ListNode> list = new ArrayList<>();
        while (head!=null){
            list.add(head);
            if(list.contains(head.next)){
                return head.next;
            }
            head=head.next;
        }
        return null;
    }

合并两个有序链表

public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
       //定义一个虚拟头结点,方便待会返回
       ListNode dum;
       ListNode cur = new ListNode();
       dum=cur;
       while (list1!=null&&list2!=null){
           if(list1.val<=list2.val){
               cur.next=list1;
               list1=list1.next;
           }else {
               cur.next=list2;
               list2=list2.next;
           }
           cur=cur.next;
       }
       if(list1!=null){
           cur.next=list1;
       }else {
           cur.next=list2;
       }
       return dum.next;
    }

两数相加

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode dum = new ListNode();
        ListNode cur=dum;
        int carry=0;
        while (l1!=null||l2!=null){
            //位数不够的话  补0
            int x=l1==null?0:l1.val;
            int y=l2==null?0:l2.val;
            int sum=x+y+carry;

            carry=sum/10;
            sum=sum%10;

            cur.next=new ListNode(sum);
            cur=cur.next;
            if (l1!=null){
                l1=l1.next;
            }
            if (l2!=null){
                l2=l2.next;
            }
        }
        //最后两个节点的进位
        if(carry==1){
            cur.next=new ListNode(1);
        }
        return dum.next;
    }

删除链表的倒数第 N 个结点

public ListNode removeNthFromEnd(ListNode head, int n) {
        int length=0;
        ListNode temp=head;
        while (temp!=null){//先计算出长度
            length++;
            temp=temp.next;
        }
        if(length==1){//如果长度为1就返回空
            return null;
        }
        ListNode pre=new ListNode(0);//新建一个新节点方便删除操作,记得给初始值不然会报空指针
        pre.next=head;
        if(length-n==0){//如果删除的是头节点
            pre.next=pre.next.next;
            return pre.next;
        }
        for (int i = 0; i < length-n; i++) {//如果删除的不是头结点
            pre=pre.next;
        }
        pre.next=pre.next.next;
        return head;
    }

两两交换链表中的节点

//四指针,局部反转
public ListNode swapPairs(ListNode head) {
        ListNode dum=new ListNode();
        dum.next=head;
        ListNode pre=dum;
        ListNode start;
        ListNode end=dum;
        ListNode next;

        while (end.next!=null){
            for (int i = 0; i < 2&&end!=null; i++) {
                end=end.next;
            }
            if(end== null){
                break;
            }
            start=pre.next;
            next=end.next;
            end.next=null;
            pre.next= reverseList(start);
            start.next=next;
            pre=start;
            end=pre;
        }
        return dum.next;
    }

    public ListNode reverseList(ListNode head) {
        //三指针
        ListNode pre = null;
        ListNode cur = head;
        ListNode temp;
        while (cur!=null){
            temp=cur.next;
            cur.next=pre;
            pre=cur;
            cur=temp;
        }
        return pre;
    }

K 个一组翻转链表

把上面那题的2改成K就行

public ListNode reverseKGroup(ListNode head, int k) {
        ListNode dum=new ListNode();//定义一个虚节点,始终指向第一个节点,方便后面返回
        dum.next=head;
        ListNode pre=dum;
        ListNode start;
        ListNode end=dum;
        ListNode next;

        while (end.next!=null){
            for (int i = 0; i < k&&end!=null; i++) {//也要判断end为不为空 不然空指针异常
                end=end.next;
            }
            if(end== null){//如果end为空的话就是遍历到了末尾
                break;
            }
            start=pre.next;//指定要翻转链表的开头
            next=end.next;//保留下一个节点,方便待会找回
            end.next=null;//把指针断掉,截取要翻转的部分
            pre.next= reverseList(start);//翻转过后,start 跟 end 位置变了要清楚
            start.next=next;//把断掉的链表重新连起来
            pre=start;
            end=pre;
        }
        return dum.next;
    }

    public ListNode reverseList(ListNode head) {
        ListNode pre = null;
        ListNode cur = head;
        ListNode temp;
        while (cur!=null){
            temp=cur.next;
            cur.next=pre;
            pre=cur;
            cur=temp;
        }
        return pre;
    }

排序链表

//转换为集合,排序后,再生成新的链表  比较笨 但是直观 哈哈
public ListNode sortList(ListNode head) {
        List<Integer> list = new ArrayList<>();
        ListNode cur=head;

        while (cur!=null){
            list.add(cur.val);
            cur=cur.next;
        }
        Collections.sort(list);
        for (Integer i : list) {
            System.out.println(i);
        }
        ListNode dum=new ListNode();
        cur=dum;
        for (Integer integer : list) {
            cur.next = new ListNode(integer);
            cur = cur.next;
        }
        return dum.next;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2252473.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android -- 简易音乐播放器

Android – 简易音乐播放器 播放器功能&#xff1a;* 1. 播放模式&#xff1a;单曲、列表循环、列表随机&#xff1b;* 2. 后台播放&#xff08;单例模式&#xff09;&#xff1b;* 3. 多位置同步状态回调&#xff1b;处理模块&#xff1a;* 1. 提取文件信息&#xff1a;音频文…

基础Web安全|SQL注入

基础Web安全 URI Uniform Resource Identifier&#xff0c;统一资源标识符&#xff0c;用来唯一的标识一个资源。 URL Uniform Resource Locator&#xff0c;统一资源定位器&#xff0c;一种具体的URI&#xff0c;可以标识一个资源&#xff0c;并且指明了如何定位这个资源…

ESG研究报告白皮书与ESG治理报告合集(2020-2023年)

一.资料范围&#xff1a;&#xff08;1&#xff09;ESG白皮书及指南;&#xff08;2&#xff09;ESG研究报告,&#xff08;3&#xff09;ESG治理报告分析&#xff08;4&#xff09;上市公司ESG报告&#xff08;知名企业&#xff09; 二、资料用途&#xff1a;可以分析研究企业E…

WPF指示灯的实现方式

WPF指示灯的实现方式 样式 XAML <Button x:Name"Btn1" Width"25" Height"25" Grid.Row"0" Grid.Column"1" Margin"10 5 5 5 "><Button.Template><ControlTemplate TargetType"Button"…

初识QT第一天

思维导图 利用Qt尝试做出原神登陆界面 import sys from PyQt6.QtGui import QIcon, QPixmap, QMovie from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QLineEdit# 封装原神窗口类 class Genshin(QWidget):# 构造函数def __init__(self):# 初始化父类…

【Linux】线程池设计 + 策略模式

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; 线程池 1-1 ⽇志与策略模式1-2 线程池设计1-3 线程安全的单例模式1-3-1 什么是单例模式1-3-2 单例模式的特点1-3-3 饿汉实现⽅式和懒汉实现⽅式1-3-4 饿汉…

vim插件管理器vim-plug替代vim-bundle

文章目录 vim-plug与vim-bundle对比vim-plug安装vim-plug管理安装插件相关文章 vim-plug与vim-bundle对比 vim-plug 和 vim-bundle 都是 Vim 的插件管理器&#xff0c;但它们有一些关键的区别。以下是两者的主要对比&#xff1a; 易用性和简洁性 vim-plug: 易用性: vim-plug …

107.【C语言】数据结构之二叉树求总节点和第K层节点的个数

目录 1.求二叉树总的节点的个数 1.容易想到的方法 代码 缺陷 思考:能否在TreeSize函数内定义静态变量解决size的问题呢? 其他写法 运行结果 2.最好的方法:分而治之 代码 运行结果 2.求二叉树第K层节点的个数 错误代码 运行结果 修正 运行结果 其他写法 1.求二…

【代码随想录day48】【C++复健】739. 每日温度;496.下一个更大元素 I;503.下一个更大元素II

739. 每日温度 一顿操作猛如虎&#xff0c;一看击败5%。一眼顶针&#xff0c;鉴定为在存栈的时候把值和下标一起存了&#xff0c;所以导致了问题。 class Solution { public:vector<int> dailyTemperatures(vector<int>& temperatures) {stack<vector<…

vscode + conda + qt联合开发

安装vscode 安装conda 清华大学开源软件镜像(Anaconda下载)_清华大学镜像-CSDN博客 conda create新建一个环境&#xff0c;激活这个环境&#xff0c;然后安装pyside6 pip install pyside6 -i https://pypi.tuna.tsinghua.edu.cn/simple 安装成功后输入 pip list查看是否安装…

第十一篇 绘图matplotlib.pyplot的使用

文章目录 摘要安装方法入门案例使用plt绘图使用ax绘图plt.figure参数plot参数案例一 绘制红色实心的点状图案例二 绘制红色的破折线图案例三 绘制两条线颜色总结设置标题、轴名称、图例使用plt实现绘图使用ax实现绘图legend()中loc设置刻度plt自定义刻度ax自定义刻度plt.title …

Unity-Particle System属性介绍(一)基本属性

什么是ParticleSystem 粒子系统是Unity中用于模拟大量粒子的行为的组件。每个粒子都有一个生命周期&#xff0c;包括出生、运动、颜色变化、大小变化和死亡等。粒子系统可以用来创建烟雾、火焰、水、雨、雪、尘埃、闪电和其他各种视觉效果。 开始 在项目文件下创建一个Vfx文件…

计算机的错误计算(一百七十二)

摘要 探讨 MATLAB 对于算式 的计算误差。 例1. 在 MATLAB 中计算 的值。 直接贴图吧&#xff1a; 这样&#xff0c;MATLAB 的输出中只有3位正确数字&#xff0c;有效数字的错误率为 (16-3)/16 81.25% . 因为16位的正确输出为 0.2971242332737277e-18&#xff08;ISReals…

Flink四大基石之CheckPoint(检查点) 的使用详解

目录 一、Checkpoint 剖析 State 与 Checkpoint 概念区分 设置 Checkpoint 实战 执行代码所需的服务与遇到的问题 二、重启策略解读 重启策略意义 代码示例与效果展示 三、SavePoint 与 Checkpoint 异同 操作步骤详解 四、总结 在大数据流式处理领域&#xff0c;Ap…

S4 UPA of AA :新资产会计概览

通用并行会计&#xff08;Universal Parallel Accounting&#xff09;可以支持每个独立的分类账与其他模块集成&#xff0c;UPA主要是为了支持平行评估、多货币类型、财务合并、多准则财务报告的复杂业务需求 在ML层面UPA允许根据不同的分类账规则对物料进行评估&#xff0c;并…

Vue3学习宝典

1.ref函数调用的方式生成响应式数据&#xff0c;可以传复杂和简单数据类型 <script setup> // reactive接收一个对象类型的数据 import { reactive } from vue;// ref用函数调用的方式生成响应式数据&#xff0c;可以传复杂和简单数据类型 import { ref } from vue // 简…

Linux——基础命令(2) 文件内容操作

目录 ​编辑 文件内容操作 1.Vim &#xff08;1&#xff09;移动光标 &#xff08;2&#xff09;复制 &#xff08;3&#xff09;剪切 &#xff08;4&#xff09;删除 &#xff08;5&#xff09;粘贴 &#xff08;6&#xff09;替换,撤销,查找 &#xff08;7&#xff…

openwrt利用nftables在校园网环境下开启nat6 (ipv6 nat)

年初写过一篇openwrt在校园网环境下开启ipv6 nat的文章&#xff0c;利用ip6tables控制ipv6的流量。然而从OpenWrt22版本开始&#xff0c;系统内置的防火墙变为nftables&#xff0c;因此配置方法有所改变。本文主要参考了OpenWRT使用nftables实现IPv6 NAT 这篇文章。 友情提示 …

go语言的成神之路-筑基篇-gin框架渲染模板

第一节-gin框架渲染模板 因为电脑打不开了&#xff0c;所以用朋友的电脑来写的&#xff0c;也是体验了一次从零开始用vscode配置环境&#xff0c;忙活了一上午才配置好环境。太难配置了。好了废话不多说开始今天的进修之旅。 今天开始gin框架的正式学习希望大家认真观看并检查…

【软考网工笔记】网络基础理论——网络层

文章目录 中断处理过程数据包组装RIPRSVPipv4RIPv1 & RIPv2HFC 混合光纤同轴电缆&#xff08;Hybrid Fiber Coax&#xff0c;简称HFC&#xff09;BGP (边界网关协议)BGP-4 协议的四种报文ICMP 协议数字语音电子邮件协议MPLS 多协议标记交换ipv6DHCPDNS名称解析过程查询顺序…