0
点赞
收藏
分享

微信扫一扫

Leetcode训练营笔记(DataWhale开源社区)(2022春)

8052cf60ff5c 2022-02-14 阅读 31

Leetcode训练营笔记(DataWhale开源社区)(2022春)

文章目录

1.线性结构

1.1数组

1.1.1课堂内容

a.一二三维数组公式:
一 维 数 组 : L o c ( a [ i ] ) = L o c ( a [ 0 ] ) + i ∗ c 二 维 数 组 : L o c ( a [ i , j ] ) = L o c ( a [ 0 ] [ 0 ] ) + ( i ∗ n + j ) ∗ c 三 维 数 组 : L o c ( a [ i , j , k ] ) = L o c ( a [ 0 ] [ 0 ] [ 0 ] ) + ( i ∗ n ∗ l + j ∗ l + k ) ∗ c 一维数组:Loc(a[i])=Loc(a[0])+i*c\\ 二维数组:Loc(a[i,j])=Loc(a[0][0])+(i*n+j)*c\\ 三维数组:Loc(a[i,j,k])=Loc(a[0][0][0])+(i*n*l+j*l+k)*c Loc(a[i])=Loc(a[0])+icLoc(a[i,j])=Loc(a[0][0])+(in+j)cLoc(a[i,j,k])=Loc(a[0][0][0])+(inl+jl+k)c

1.1.2课堂例题

a.T15最接近三数之和

题目:

解:

O( n 3 n^3 n3)解法:

嵌套三层循环,寻找和的绝对值最接近的数

O( n 2 n^2 n2)解法:

def solution(nums,target):
    nums.sort()
    result = nums[0] + nums[1] + nums[2] #用result记录最接近的值
    for(i=0;i<len(nums)-2;++i):
        start = i + 1
        end = len(nums) - 1
        while(start<end):
            summ = nums[i] + nums[start] + nums[end] #用summ记录一次循环的总和
            if(abs(target-summ)<abs(target-result)): #如果summ更接近target,则将result更新为新的summ
                result = summ
            if(summ>target): #summ大了就将最后一个元素往前移,反之将中间的元素往后移
            	--end
            else if(summ<target): 
                ++start
            else: #result与target相等,直接返回result
                return result
    return result

b.T26移除元素

题目

解:

前后双指针解决

def removeElement(nums: list, val: int):
    start = 0 #双指针
    end = len(nums) - 1
    res = len(nums)
    while start <= end: #start与end重合时停止
        if nums[start] == val:
            temp = start #temp用于删除元素时临时指针
            res -= 1
            while temp != end: #temp与end重合时停止删除
                nums[temp] = nums[temp+1]
                temp+=1
            end -= 1
        if(nums[start] == val): #更新后元素仍为val,则重复循环
            continue
        else:
            start += 1
    return res

numsTest = [0,1,2,2,3,0,4,2]
print(removeElement(numsTest, 2))
举报

相关推荐

0 条评论