【数据结构】136,169,15刷题

5.5刷leetcode有感

题136只出现一次的数字

题169 多数元素

两道题都很简单,主要手法加入

from collections import Counter
// 统计出现的次数
nums = [2,2,1,1,1,2,2]
result = Counter(nums)
//结果
Counter({2: 4, 1: 3})
//遍历方法
for i in result.keys():
    print(result[i])
//结果4,3;这里不要忘记是keys()

题15三数之和比较难


思路:
定一个动两个,定的那一个

class Solution(object):
    def threeSum(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        result = []
        nums.sort(key=None,reverse=False)
        #[-4,-1,-1,0,1,2]
        for i in range(len(nums)-2):#i是定的一个,可以是[-4,-1,-1,0]
            if i==0 or nums[i]!=nums[i-1]:#目的是为了定的一个不重复,但是i=0时没有i-1;这里的问题就是能不能改成nums[i]!=nums[i+1],不能,因为后面两个值是动的
                start = i+1
                end = len(nums)-1
                while(start<end):
                    if nums[i]+nums[start]+nums[end]==0:
                        pos = [nums[i],nums[start],nums[end]]
                        result.append(pos)
                        start = start+1
                        end = end-1#跳出来继续寻找
                        while start<end and nums[start]==nums[start-1]:#对于一样的值平滑处理
                            start = start+1
                        while start<end and nums[end]==nums[end+1]:#对于一样的值平滑处理
                            end = end-1
                    elif nums[i]+nums[start]+nums[end]>0:#当值偏大了,只能让大值变小
                        end = end-1
                    elif nums[i]+nums[start]+nums[end]<0:#当值偏小了,只能让小值变大
                        start = start+1
        return result

今天就写了3道题,反正还有很久很久才找工作,慢慢刷啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值