力扣 week1(Python题解)

不知道现在刷题还来不来得及,看到有人说一个月认真刷就行,所以就想试试,万一呢

准备从今天开始,按顺序认真刷题并记录过程中的一些小点

python列表操作:

nums.remove(3)                

“3”表示数值,并且只能删除nums中第一个3

nums.pop(3) 

"3"表示索引,pop表示删除nums中第四个位置上的数据(python序列索引从0开始)

 nums.index(3)        nums.sort()

index表示数值“3”在nums中的索引,sort表示将nums中数值从小到大排列

然后就是哈希矩阵,一开始不懂,后来找了一些,发现就是先找有没有这个值,如果没有就按(Key,Value)存进去

存数值用这个:

 hashMap[Value]=Key

查找用这个:

hashMap.get(3)

之后又看到了一个求a+b+c=0,看了解题思路,可以换成a+b=-c,然后结合上面的hashMap,我就整理了一个代码,运行以后发现还要除去重复的数字,就卡在这一步了,后来想想,可以通过赋值,一组一组的赋值过去,同时进行排序,来检查是否存在相同的序列。

题目:

 我的代码:

nums = [-1, 0, 1, 2, -1, -4]
b = []
hashMap = {}
for i in range(len(nums)):
    for j in range(i + 1, len(nums)):
        if hashMap.get(-nums[i] - nums[j]) is not None:
            b.append([nums[i], nums[j], -nums[i] - nums[j]])
        hashMap[nums[j]] = j
    hashMap = {}
a = []
for i in b:
    i.sort()
    if i not in a:
        a.append(i)
print(a)

结果:

再之后又有一个删除顺序数组的问题,我就想用a存储数据,如果有相同的就remove掉,但是因为sums长度变化导致 i 的取值有变化,所以没有调试成功先放这吧

nums = [1, 1, 2]
a = nums[0]
for i in range(1, len(nums)):
    if nums[i] == a:
        nums.remove(i)
        i = i-1
    else:
        a = nums[i]
print(nums)

然后看了参考答案觉得,有时候如果 = 不好用,可以换思路试试 !=,两道题下来,觉得双指针挺方便的,,

再再之后,看到一个给0移位的题,这个题吧,唉,主要是我不知道python可以直接交换值,

nums[right], nums[left] = nums[left], nums[right]

所以我就用之前C的方法,但是又不想再加一个参数,就后面用append加0

nums = [0, 1, 0, 3, 5]
right, left = 0, 0
for left in range(len(nums)):
    if nums[left] != 0:
        nums[right] = nums[left]
        right += 1
c = len(nums) - right
nums = nums[0:right]
for i in range(c):
    nums.append(0)
print(nums)

要么python广泛,,里面有的东西真的很方便

enumerate 表示枚举,可以直接将数组换成 索引-值的形式,但是这个只能是看了才知道

 再再再之后又看了一个题,把数组的最后一位加一,我一开始看,完全没想到要进位,,,还觉得参考答案给的复杂,但是看了一遍答案,突然发现要进位,然后在我的基础上进行修改

nums = [1, 9, 9]
a = len(nums)
b = 0
for i in range(a):
    a = a - 1
    b = b + nums[a] * 10 ** i
b = b + 1
c = [int(x) for x in str(b)]
print(c)

这里有几个点,a[:-1] 表示去掉最后一个数, a[::-1] 表示将数组倒序

如果想将数字拆成数组,可以用  [int(x) for x in str(b)]

但是还是需要把参考答案再看一看 ,不能只靠自己已经有的东西,虽然一道题可以有很多解法,最好还是找到最简捷的

再再再再之后,有一个有序拼接两个数组的题,我一开始想用 append ,但是发现那是整体加入的,所以换成了 extend ,这个是只插入元素,但是后来又发现输入数组有0,拼接排序以后有0,所以还是换成了数组赋值,再 sort 排序。

nums1 = [1, 2, 3, 0, 0, 0, 0]
nums2 = [1, 5, 6, 8]
m, n = 3, 4
nums1[m:] = nums2[:]
nums1.sort()
print(nums1)

顺便复习一下,pop() 是删除元素,remove() 是删除索引

总结一下,就是前面不行看后面,等于不行用不等于。还有不要以为自己写的少就好,可能是自己的有bug。。。

再再再再再之后,是一个选两个板盛水最多的容器,这个要找左右夹击的就不需要循环,用双指针就可以。最大不行用最小

还要max,min的熟练运用,a = max(a, b),a = min(a, b)

再再再再再再之后,是一个接雨水,和上面的区别在于这个水被分开了,,,啊,崩溃,,,

这个题可以用实时动态存储,a = max(a, b),但是也是一个个的拿出来和它左右最大值做对比,不能贪心。另一个方法是利用栈,熟练运用pop,append,主要先找到上升趋势,然后再一个个pop掉,依次求面积

再再再再再再再之后,是一个旋转数组和整数反转,旋转数组要求有三个方法,我放到第二篇里了,可以利用负负得正的方法,三次反转,以k为界。整数反转难在负数,哦,对,这里要说,enumerate只能对数组枚举,对一个整数不行,还有python中取整符号是 // ,还有整数拆开用 list(str(num)) ,我看参考答案有点长,下面这个是我自己的

nums = -120
a = 0
if nums < 0:
    nums = nums * -1
    while nums > 0:
        a = 10 * a + nums % 10
        nums = nums // 10
else:
    while nums > 0:
        a = 10 * a + nums % 10
        nums = nums // 10

nums = a
print(nums)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值