leetcode刷题之数组问题总结,二分法,移除元素,

news2024/10/6 10:38:45

目录

    • 一、二分查找相关应用
      • 704.二分查找
      • 35.搜索插入位置
        • 方法一:二分法
        • 暴力解法
      • 34.在排序数组中查找元素的开始位置和最后一个位置
        • 方法一:暴力解法
        • 方法二:二分法,确定左右两侧的边界
      • 69.x的平方根
        • 方法一:二分法
        • 方法二:暴力解法
        • 错解:多次判断,超时了
      • 367.有效完全平方数
        • 方法一:暴力解法
        • 方法二:二分法
    • 二、移除元素相关
      • 27.移除元素
        • 方法一:暴力解法
        • 暴力解法2
        • 快慢指针方法
        • 双向指针
      • 26.删除有序数组中的重复项
        • 暴力解法
        • 快慢指针
      • 283.移动零
        • 错解
        • 快慢指针
        • 暴力解法
      • 844.比较含退格的字符串
        • 方法一:使用栈 栈是用来解决括号匹配等问题的一大利器
        • 方法二:使用指针,从右往左
      • 977.有序数组的平方
        • 方法一:暴力解法
        • 方法二:双指针
    • 三、滑动窗口相关问题
      • 209.长度最小的子数组
        • 方法一:暴力解法
        • 暴力解法修改
        • 滑动窗口 最小滑动窗口
      • 904.水果成篮
        • 暴力解法
        • 滑动窗口 这里是最大滑动窗口
      • 76.最小覆盖子串

一、二分查找相关应用

704.二分查找

在这里插入图片描述

var search = function(nums, target) {
    let low = 0,high = nums.length - 1
    let mid = Math.ceil(low + (high - low) /2)
    while(low<=high){
        mid = Math.ceil(low + (high - low) /2)
        if(target==nums[mid]){
            return mid
        }else if(nums[mid]<target){
            //往右走
            low = mid + 1
        }else{
            //往左走
            high = mid - 1
        }
    }
    return -1
};

35.搜索插入位置

在这里插入图片描述

方法一:二分法

var searchInsert = function(nums, target) {
    //二分查找 找到该插入到的位置
    let low = 0,high = nums.length - 1
    let mid = 0
    while(low<=high){
        mid = Math.ceil(low + (high - low)/2)
        if(nums[mid]==target){
            return mid
        }else if(target<nums[mid]){
            //往左走
            high = mid - 1
        }else{
            //往右走
            low = mid + 1
        }
    }
    //当low==high的时候,mid = low = high 还未找到target,if(target<nums[mid]) => high = mid - 1,这时候mid左侧都比target小 故target应该放到mid的位置,if(target>nums[mid]) => low = mid + 1,包括mid和他左侧的都比他小,target应该放入到mid+1的位置 总之返回位置总是high + 1
    return nums[mid]>target?mid:mid+1
};

暴力解法

var searchInsert = function(nums, target) {
    //暴力解法
    let len = nums.length
    for(let i = 0;i<len;i++){
        if(nums[i]==target){
            //找到target了
            return i
        }else if(nums[i]>target){
            //将target放入到nums[i]
            return i
        }
    }
    return len

};

34.在排序数组中查找元素的开始位置和最后一个位置

在这里插入图片描述

方法一:暴力解法

var searchRange = function(nums, target) {
    if(nums==[]) return [-1,-1]
    let start = null,end = null
    for(let i=0;i<nums.length;i++){
        if(nums[i]==target){
            start = i
            break //结束循环
        }
    }
    //倒着来 去找target
    for(let j = nums.length - 1;j>=0;j--){
        if(nums[j]==target){
            end = j
            break
        }
    }
    if(start==null&&end==null){
        return [-1,-1]
    }
    return [start,end]
};

方法二:二分法,确定左右两侧的边界

var searchRange = function(nums, target) {
    //由于数组是递增的 那么如果target有多个的话,一定是相邻的 可以使用二分法来分别找到左右边界
    const getLeftBorder = (nums,target) =>{
        let low = 0,high = nums.length - 1
        let mid = Math.ceil((low+high)/2) //找到中间的下标
        let leftBorder = null//用来记录左边界
        while(low<=high){
            mid = Math.ceil((low+high)/2)
            if(nums[mid]>=target){
                //注意 这里等于的时候也要移动
                high = mid - 1
                leftBorder = high
            }else{
                low = mid + 1
            }
        }
        return leftBorder   //根据循环里面的判断条件,最后跳出循环的时候,high位于范围的左侧
    }

    const getRightBorder = (nums,target) =>{
        let low = 0,high = nums.length - 1
        let mid = Math.ceil((low+high)/2) //找到中间的下标
        let rightBorder = null
        while(low<=high){
            mid = Math.ceil((low+high)/2)
            if(nums[mid]<=target){ //这样才能移动到右侧边界
                low = mid + 1
                rightBorder = low
            }else{
                high = mid - 1
            }
        }
        return rightBorder 
    }

    const left = getLeftBorder(nums,target)
    const right = getRightBorder(nums,target)
    //情况一:nums为空 或者 target不再这个范围内
    if(nums==[]||left==null||right==null){
        return [-1,-1]
    }
    //要保证left与right之间有一个结点
    if(right-left>1){
        return [left+1,right-1]
    } 
    return [-1,-1]
    
};

69.x的平方根

在这里插入图片描述

方法一:二分法

var mySqrt = function(x) {
    //计算并返回x的算术平方根 这里给出的是非负整数
    //除了0之外 别的非负整数的算术平方根的范围是1 到 x
    //里用二分法 从 1 到 x 之间进行判断
    let low = 1,high = x
    let mid = null
    while(low<=high){
        mid = Math.ceil((low+high)/2)
        if(mid*mid<=x){
            if((mid+1)*(mid+1)>x){
                return mid
            }
            low = mid + 1
        }else{
            if((mid-1)*(mid-1)<=x){
                return mid - 1
            }
            high = mid - 1
        }
    }
    //如果在x = 0 那么返回0
    return 0
};

方法二:暴力解法

var mySqrt = function(x) {
    if(x==0) return 0 
    //如果x = 1 那么这个遍历中只有一项 没有i+1 就会出错
    if(x==1) return 1
    for(let i=1;i<x;i++){
        if(i*i<=x&&(i+1)*(i+1)>x){
            return i
        }
    }
};

错解:多次判断,超时了

var mySqrt = function(x) {
    //计算并返回x的算术平方根 这里给出的是非负整数
    //除了0之外 别的非负整数的算术平方根的范围是1 到 x
    //里用二分法 从 1 到 x 之间进行判断
    
    let low = 1,high = x
    let mid = null
    while(low<=high){
        mid = Math.ceil((low+high)/2)
        if(mid*mid<=x&&(mid+1)*(mid+1)>x){
            return mid
        }
        if(mid*mid<x&&(mid+1)*(mid+1)<x){
            //继续往右侧移动
            low = mid + 1
            continue
        }
        if(mid*mid>x&&(mid-1)*(mid-1)<=x){
            return mid - 1
        }
        if(mid*mid>x&&(mid-1)*(mid-1)>x){
            //想左侧移动
            high = mid - 1
            continue
        }
    }
    //如果在x = 0 那么返回0
    return 0
};

367.有效完全平方数

在这里插入图片描述

方法一:暴力解法

var isPerfectSquare = function(num) {
    //正整数num 那么它的平方根一定在 1 到 num之间    这里注意1的平方还是1
    for(let i = 1;i<=num;i++){
        if(i*i==num){
            return true
        }
    }
    return false
};

方法二:二分法

var isPerfectSquare = function(num) {
    //二分法 num的平方根一定在 1 到num之间
    if(num==1) return true
    let low = 1,high = num
    while(low<=high){
        mid = Math.ceil((low+high)/2)
        if(mid*mid==num){
            return true
        }else if(mid*mid<num){
            //要往右走
            low = mid + 1
        }else{
            //往左走
            high = mid - 1
        }
    }
    //未找到
    return false
};

二、移除元素相关

27.移除元素

在这里插入图片描述

方法一:暴力解法

var removeElement = function(nums, val) {
    //题目说了 数组的顺序可以改变
    //对数组进行排序
    nums.sort((a,b)=>a-b)
    //那么val值相同的元素都是相邻的
    let count = 0  //用来记录val的个数
    let start = null  //开始的索引位置

    //找到val的开始位置
    for(let i = 0;i<nums.length;i++){
        if(nums[i]==val){
            start = i
            break//结束循环
        }
    }

    for(let i=0;i<nums.length;i++){
        if(nums[i]==val){
            count++
        }
    }
    nums.splice(start,count)
};

暴力解法2

var removeElement = function(nums, val) {
    //暴力解法二
    let len = nums.length
    //两层for循环 外边的一层是用来找val 里面的for循环用来从后往前移动val
    for(let i=0;i<len;i++){
        if(nums[i]==val){
            //从后往前去移动元素 将当前的nums[i]给替换掉
            for(let j=i;j<len-1;j++){
                nums[j] = nums[j+1]
            }
            //移动元素结束之后 
            len--
            i--//刚刚移动过来的这个元素没有判断,需要判断一下
        }
    }
    return len
};

快慢指针方法

var removeElement = function(nums, val) {
    //快慢指针
    let slow = 0,fast = 0
    //这样就可以只用一个for循环即可
    for(fast;fast<nums.length;fast++){
        if(nums[fast]!==val){    //当遍历到的值不是val时,slow和fast同时移动
            nums[slow++] = nums[fast]  //当遇到的是val,slow会停留在这个val值这里,然后fast向后移动,if fast遇到的这个值不是val,那么slow 和 fast 进行交换 ,else fast遇到的还是val,那么slow还是不动,fast继续移动;由于交换完成之后,slow自动加一,所以最后slow指向数组的末尾的后一个位置
        }
    }
    return slow
};

双向指针

var removeElement = function(nums, val) {
    //从左右两侧进行比较
    let left = 0,right = nums.length - 1
    while(left<=right){
        //左侧指针要找val值
        while(left<=right&&nums[left]!==val){
            ++left
        }
        //右侧指针要找不是val的值
        while(left<=right&&nums[right]==val){
            --right
        }
        //这里曾经有一个错误理解,右侧指针移动的过程中会将等于val的值给忽略过去,最会返回数组长度的时候,要看left 所以这样不会造成影响
        //以上两个while循环结束之后,left指针指向一个等于val的值,right指向一个不等于val的值
        if(left<right){   //if left==right 就没有必要交换了
            nums[left++] = nums[right--]
        }
    }
    //每次结束之后,left都会进行加一,故最后left指向新数组的末尾的下一项
    return left
};

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

暴力解法

var removeDuplicates = function(nums) {
    //暴力解法
    let len = nums.length
    for(let i = 0;i<len;i++){
        let target = nums[i]
        for(let j = i+1;j<len;j++){
            //从这里开始去找target
            if(nums[j]==target){
                //后面的全部数组向前进行移动
                for(let k=j+1;k<len;k++){
                    nums[k-1] = nums[k]
                }
                //移动一次之后,len--
                len--
                j--
            }
        }
    }
    return len
};

快慢指针

var removeDuplicates = function(nums) {
    //千万要注意,nums是升序的  因为是升序的 所以不会出现 3 4 3的情况
    //使用快慢指针
    let slow = 0,fast = 1
    for(fast;fast<nums.length;fast++){
        if(nums[slow]!==nums[fast]){
            slow++
            nums[slow] = nums[fast]
        }
    }
    //因为slow先加一 然后才会将新的值放入到slow这里 故最后结束的时候 slow指向的是数组的最后的位置
    return slow + 1
};

283.移动零

在这里插入图片描述

错解

使用左右两侧指针会导致元素的顺序发生变化

var moveZeroes = function(nums) {
    //使用双指针 左右两侧指针
    let left = 0,right = nums.length - 1
    while(left<=right){
        //左指针去找0
        while(left<=right&&nums[left]!==0){
            ++left
        }
        //右指针将0忽略
        while(left<=right&&nums[right]==0){
            --right
        }
        //执行完成上面两个while循环之后,left指向0 right不指向0 然后将left与right所指向的值进行交换
        if(left<right){
            nums[left] = nums[right]
            nums[right] = 0
        }
    }
};

快慢指针

var moveZeroes = function(nums) {
    //快慢指针 先将非零元素移动到前面 然后再将后面的元素填补为0
    let slow = 0,fast = 0
    for(fast;fast<nums.length;fast++){
        if(nums[fast]!==0){
            nums[slow++] = nums[fast]
        }
    }
    //上面的for循环完成之后,前面都是非零值   此时slow指向非零部分末尾的下一个位置
    for(let i=slow;i<nums.length;i++){
        //将后面全都填充成0
        nums[i] = 0
    }

};

暴力解法

var moveZeroes = function(nums) {
    //暴力解法
    let len = nums.length
    //外层循环判断每一项是否是0 里面的for循环来移动位置
    for(let i=0;i<len;i++){
        if(nums[i]==0){
            for(let j=i+1;j<len;j++){
                nums[j-1] = nums[j]
            }
            len--
            i--
        } 
    }
    let j = len
    while(j<nums.length){
        nums[j] = 0
        j++
    }
};

844.比较含退格的字符串

题目详情
题解参考

方法一:使用栈 栈是用来解决括号匹配等问题的一大利器

var backspaceCompare = function(s, t) {
    //使用栈
    const helper = str =>{
        let stack = []
        for(let i=0;i<str.length;i++){
            if(str.charAt(i)!=='#'){
                stack.push(str.charAt(i))
            }else{
                stack.pop()
            }
        }
        //结束之后,转换成字符串
        return stack.join()
    }
    const str1 = helper(s)
    const str2 = helper(t)
    if(str1==str2){
        return true
    }else{
        return false
    }

};

方法二:使用指针,从右往左

var backspaceCompare = function(s, t) {
    //使用指针
    let i = s.length - 1
    let j = t.length - 1  //指向字符串的最后一个位置
    let skipS = 0
    let skipT = 0   //用来记录从右往左进行遍历过程中遇到的#号
    //主要思路:对两个字符串同时从右侧往左侧进行遍历,如果遇到#,那么skip加一,如果遇到的不是#,且skip是正数,那么skip减一   直到两个字符串都比较完成
    while(i>=0||j>=0){
        //对字符串s进行统计
        while(i>=0){
            if(s[i]=='#'){
                skipS++   //统计遇到的#个数
                i--   //继续往左侧移动
            }else if(skipS>0){
                skipS--   //用来消除前面的字符串
                i--
            }else{
                break
            }
        }
        //对字符串t进行统计
        while(j>=0){
            if(t[j]=='#'){
                skipT++
                j--
            }else if(skipT>0){
                skipT--
                j--
            }else{
                break
            }
        }
        //如果处理退格之后的字符不相等,返回false
        if(s[i]!==t[j]) return false
        i--
        j--
    }
    return true

};

977.有序数组的平方

在这里插入图片描述

方法一:暴力解法

var sortedSquares = function(nums) {
    //方法:先对每个元素进行平方放入到原来的位置,然后对数组进行排序
    for(let i=0;i<nums.length;i++){
        nums[i] = nums[i]*nums[i]
    }
    nums.sort((a,b)=>a-b)
    return nums
};

方法二:双指针

var sortedSquares = function(nums) {
    //思路:由于数组是递增的,数组平方之后的大小 要以 0 为中心,向两侧逐渐变大
    //故只需要数组首尾两端 然后将大的放到新数组的最后一个位置  这里使用双指针,分别指向数组的首尾
    let i = 0, j = nums.length - 1, last = nums.length - 1
    let arr = new Array(nums.length)
    while(i<=j){
        let leftVal = nums[i] * nums[i]
        let rightVal = nums[j] * nums[j]
        arr[last--] = leftVal<rightVal?(j--,rightVal):(i++,leftVal)
    }
    return arr
};

三、滑动窗口相关问题

209.长度最小的子数组

方法一:暴力解法

var minSubArrayLen = function(target, nums) {
    //暴力解法
    let res = [] //用来记录从当前i开始连续有几个元素
    for(let i=0;i<nums.length;i++){
        let sum = nums[i] //用来保存当前的累加和
        if(sum>=target){ //当前值已经满足条件的了,后面就不用再遍历了
            return 1
        }
        for(let j=i+1;j<nums.length;j++){
            sum+=nums[j]
            if(sum>=target){
                res.push(j-i+1)
                break //结束当前的循环
            }
        }
    }
    if(res.length==0) return 0
    //找出res中最小的
    res.sort((a,b)=>a-b)
    return res[0]
};

暴力解法修改

var minSubArrayLen = function(target, nums) {
    //暴力解法
    let min = null //用来记录最小值
    for(let i=0;i<nums.length;i++){
        let sum = nums[i] //用来保存当前的累加和
        if(sum>=target){ //当前值已经满足条件的了,后面就不用再遍历了
            return 1
        }
        for(let j=i+1;j<nums.length;j++){
            sum+=nums[j]
            if(sum>=target){
                min?min = Math.min(min,j-i+1):min = j-i+1
                break //结束当前的循环
            }
        }
    }
    return min?min:0
};

滑动窗口 最小滑动窗口

var minSubArrayLen = function(target, nums) {
    //滑动窗口 i是窗口的最左侧 j是窗口的最右侧
    let res = null //用来记录最小值
    let sum = 0 //用来记录窗口所有元素的和
    let i = 0, j = 0
    for(j;j<nums.length;j++){
        sum+=nums[j]
        while(sum>=target){
            res?res=Math.min(res,j-i+1):res=j-i+1
            //左侧指针i向右侧移动
            sum-=nums[i++]
        }
    }
    return res?res:0
};

904.水果成篮

暴力解法

var totalFruit = function(fruits) {
    //暴力解法
    let max = 0
    //使用两层循环 外层循环是从下标i开始,j是从i往后开始几个
    for(let i=0;i<fruits.length;i++){
        let type1 = null
        let type2 = null
        type1 = fruits[i]
        let sum = 1//当前篮子中的水果数量
        for(let j=i+1;j<fruits.length;j++){
            if(fruits[j]==type1){
                sum++
            }else if(type2==null){
                type2 = fruits[j]
                sum++
            }else if(fruits[j]==type2){
                sum++
            }else{
                break
            }
        }
        max = Math.max(max,sum)
    }
    return max
};

滑动窗口 这里是最大滑动窗口

var totalFruit = function(fruits) {
    let max = 0//用来记录最大值
    let map = new Map() //用来记录某个种类在滑动窗口中出现的次数,注意窗口中只能由两个键值
    let left = 0 //窗口左侧指针
    //下面right是窗口的右侧指针   只要map中只有两个键值,那么窗口就可以一直扩大直到数组结束
    for(let right=0;right<fruits.length;right++){
        //设置键值
        map.set(fruits[right],map.get(fruits[right])+1||1)
        //只要map对象中的键值个数超过两个,那么左侧指针开始往右侧移动
        while(map.size>2){
            map.set(fruits[left],map.get(fruits[left])-1)
            //一直在删除原来窗口中的键的val值,删除过程中,看那两个键 哪个先删除为0 
            if(map.get(fruits[left])==0){
                map.delete(fruits[left])
            }
            //将某个键值给删除之后进行新的窗口 新的窗口中有一个原先的老的键值还有一个新的键值
            ++left
        }
        max = Math.max(max,right-left+1)
    }
    return max
};

76.最小覆盖子串

在这里插入图片描述

var minWindow = function(s, t) {
    //t中也会有重复的元素,但是t不用去重,因为题目中要求要找的字串中必须和t的字符的数量都是一样的
    let map = new Map() //保存t中的所有的字符 及其数量
    for(let i=0;i<t.length;i++){
        map.set(t.charAt(i),map.get(t.charAt(i))+1||1)
    }

    let left = 0, right = 0
    let minStr = ''
    let size = map.size//保存所需要的字符种类
    for(right;right<s.length;right++){
        if(map.has(s[right])){
            map.set(s[right],map.get(s[right])-1)
        }
        if(map.get(s[right])==0) size-- //需求的字符个数减一
        //只有需求的元素都有了,才会执行while
        while(!size){
            let curStr = s.substring(left,right+1)
            minStr?(minStr =  minStr.length<curStr.length?minStr:curStr):minStr = curStr
            if(map.has(s[left])){
                map.set(s[left],map.get(s[left])+1)
                if(map.get(s[left])==1) size++//需求数量加一
            }
           left++
        }
    }
    return minStr

};

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

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

相关文章

k8s1.26.1部署 ingress-nginx-controller(1.6.4)

文章目录 参考ingress-nginx git地址ingress-nginx 的 deployment的地址&#xff1a; 参考 1.24版本k8s集群配置Nginx-Ingressrancher配置https域名访问图文教程 ingress-nginx git地址 https://github.com/kubernetes/ingress-nginx ingress-nginx 的 deployment的地址&a…

cdn配置(超详细+图解+原理)

具体的详细配置在右侧目录翻到“三”&#xff0c;前面的一二是将原理 以腾讯云的cdn为例&#xff0c;其它家的大同小异 一、cdn作用和配置思路 &#xff08;一&#xff09;cdn作用 1.加速访问 cdn服务通常有多个节点缓存&#xff0c;用户可以就近获取&#xff0c;延迟较低 …

得物App万米高空WiFi拦截记

0.前情摘要 在一次飞行途中&#xff0c;我司客户遭遇到了得物App在飞机上的WiFi网络访问异常的问题。这让我们意识到在特定场景下&#xff0c;用户可能面临无法使用得物App的困扰。经过SRE团队与无线团队、网络团队联合全力排查与优化&#xff0c;最终成功解决了这一问题&…

PAN(Pyramid Attention Network for semantic segmentation)paper解读

Pyramid Attention Network for Semantic Segmentation讲PAN用于语义分割&#xff0c;网络结构类似encoder-decode, u-shape。 背景 encoder-decoder结构&#xff0c; 在encoding到高维度特征的过程中&#xff0c;原始的纹理信息会遭遇空间分辨率损失&#xff0c;例如FCN。 P…

Spring Boot进阶(39):SpringBoot之Jackson配置全局时间日期格式 | 超级详细,建议收藏

1. 前言&#x1f525; 不知道小伙伴对于日期字段&#xff0c;在项目中都是如何处理的&#xff0c;是单独给每个字段都自定义日期格式还是做全局格式设置&#xff1f;这个我之前啊&#xff0c;是对日期都是有做单独配置&#xff0c;给每个Entity带有日期字段的都配JsonFormat注解…

SolVES 模型与多技术融合【QGIS、PostgreSQL、ARCGIS、MAXENT、R】实现生态系统服务功能社会价值评估及拓展案例分析

生态系统服务是人类从自然界中获得的直接或间接惠益&#xff0c;可分为供给服务、文化服务、调节服务和支持服务4类&#xff0c;对提升人类福祉具有重大意义&#xff0c;且被视为连接社会与生态系统的桥梁。自从启动千年生态系统评估项目&#xff08;Millennium Ecosystem Asse…

编译器设计(十四)——寄存器分配

文章目录 一、简介二、背景问题2.1 内存与寄存器2.2 分配与指派2.3 寄存器类别 三、局部寄存器分配和指派3.1 自顶向下的局部寄存器分配3.2 自底向上的局部寄存器分配3.3 超越单个程序块 四、全局寄存器分配和指派4.1 了解图着色4.2 找到全局活跃范围4.3 估算全局逐出代价4.4 冲…

前端列表页+element-puls实现列表数据弹窗功能

效果图&#xff1a; 这是一个修改的弹窗&#xff0c;我们要实现的功能是&#xff0c;在列表&#xff0c;点击修改按钮时&#xff0c;将数据带入到弹窗里面&#xff0c;点击保存时关闭弹窗。 1&#xff0c;点击修改展开弹窗 使用 eldialog组件&#xff0c;v-model绑定的值为tru…

fluent-operator在kubesphere中的实战详解

前言 最近收到一个小任务&#xff1a;熟悉kubesphere实现一个日志平台。基于这样的机会&#xff0c;将最近所整理的笔记进行汇总。 kubesphere开启日志收集 根据官网介绍只需要将 enabled 的 false 改为 true即可 执行kubectl get pod -n kubesphere-logging-system命令来检查…

QT课程 QT介绍

QT介绍&#xff08;了解&#xff09; Qt是一个基于C开发语言的图形用户界面开发&#xff08;GUI&#xff09;框架。界面开发知识Qt的一部分&#xff0c;实际上Qt也可以支持很多其他的功能&#xff0c;比如&#xff1a;网络编程、文件IO、图形图像处理等。 Qt在嵌入式领域最大…

Vue之插值表达式,v-bind(单向绑定),v-model(双向绑定)

文章目录 前言一、插值表达式二、v-bind指令三、v-model指令总结 前言 插值表达式{{…}} v-bind v-model 一、插值表达式 插值表达式支持匿名变量、三目运算符、四则运算符、比较运算符、数值类型的一些内置方法&#xff0c;还有数组的索引取值方法和对象属性。 <!DOCTYPE…

安全工具 | CMSeeK [指纹识别]

0x00 免责声明 本文仅限于学习讨论与技术知识的分享&#xff0c;不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;本文作者不为此承担任何责任&#xff0c;一旦造成后果请自行承担…

2023年北京.NET线下技术沙龙圆满落幕!

5月20日&#xff0c;MASA技术团队在北京举办的“2023年北京.NET线下技术沙龙”圆满落幕&#xff01;整个活动气氛热烈&#xff0c;嘉宾们的分享内容丰富多彩&#xff0c;现场观众都受益匪浅。我们期待着更多这样的技术交流活动&#xff0c;让.NET社区不断发展和进步。 本次活动…

材料电磁参数综合测试解决方案 材料吸波、屏蔽性能测试系统 (10MHz~500GHz)

材料吸波、屏蔽性能测试系统测试频率范围可达10MHz&#xff5e;500GHz&#xff0c;可实现材料反射率、屏蔽性能特性参数测试。系统由矢量网络分析仪、测试夹具、系统软件等组成&#xff0c;根据用户不同频率、材料性能测试需求&#xff0c;可选用弓形框法、便携式反射率测试法进…

如何快速实现接口自动化测试,常规接口断言封装实践

目录 前言&#xff1a; 一、框架设计思路 1. 封装请求方法 2. 断言封装 3. 接口封装 4. 接口统一管理 二、框架使用 三、总结 前言&#xff1a; 在当今互联网行业中&#xff0c;接口自动化测试已经成为了非常重要的测试手段之一。而在这个过程中&#xff0c;接口自动化…

3年外包裸辞,面试阿里、字节全都一面挂,哭死.....

测试员可以先在外包积累经验&#xff0c;以后去大厂就很容易&#xff0c;基本不会被卡&#xff0c;事实果真如此吗&#xff1f;但是在我身上却是给了我很大一巴掌... 所谓今年今天履历只是不卡简历而已&#xff0c;如果面试答得稀烂&#xff0c;人家根本不会要你。况且要不是大…

性能优化 面试

性能分析 1.页面加载性能&#xff08;加载时间&#xff1b;用户体验&#xff09; 2.动画与操作性能&#xff08;是否流畅无卡顿&#xff09; 3.内存占用&#xff08;内存占用过大&#xff0c;浏览器崩掉等&#xff09; 4.电量消耗&#xff08;游戏方面&#xff0c;暂不考虑&…

【SpringBoot】九:Web服务---文件上传

文章目录 1.MultipartFile API2.上传文件 1.MultipartFile API 在 Controller 的方法加入形参RequestParam MultipartFile。 MultipartFile 表示上传的文件&#xff0c;提供了方便的方法&#xff0c;保存文件到磁盘。 方法作用getName()参数名称&#xff08;upfile&#xff0…

pymongo给文档里的某个列表添加元素并去重以及操作符的表格

文章目录 问题描述知识点收集mongo的操作符:匹配符&#xff1a;选择符&#xff1a;函数操作&#xff1a;更新符&#xff1a;聚集符&#xff1a;字段操作符&#xff1a; 问题描述 给parts列表新增字典 新增前: 新增后: 代码: mongo_client get_mongo_client()col mongo_cli…

【ZYNQ】ZYNQ7000 UART 控制器及驱动示例

简介 UART 控制器介绍 UART 控制器是一个全双工异步收发控制器&#xff0c;ZYNQ 内部包含两个 UART 控制器&#xff0c;UART0 和 UART1。每一个 UART 控制器支持可编程的波特率发生器、64 字节的接收 FIFO 和发送 FIFO、产生中断、RXD 和 TXD 信号的环回模式设置以及可配置的…