2021-10-27 每日打卡:腾讯精选50题

2021-10-27 每日打卡:腾讯精选50题

写在前面

“这些事儿在熟练之后,也许就像喝口水一样平淡,但却能给初学者带来巨大的快乐,我一直觉得,能否始终保持如初学者般的热情、专注,决定了在做某件事时能走多远,能做多好。” 该系列文章由python编写,遵循LeetBook 列表/腾讯的刷题顺序,所有代码已通过。每日3道,随缘剖析,希望风雨无阻,作为勉励自己坚持刷题的记录。

16. 最接近的三数之和

在这里插入图片描述

  • 双指针,注意和上一题对比【第一遍未写出】:
class Solution:
    def threeSumClosest(self, nums: List[int], target: int) -> int:
        nums.sort()
        n, mindes, res = len(nums), 2**31, []
        
        for first in range(n):
            if first>0 and nums[first]==nums[first-1]:
                continue
            L, R = first+1, n-1

            # L和R不能取同一个数,但可以取同一个值
            while L<R:
                sum = nums[first] + nums[L] + nums[R]
                if abs(sum - target)<mindes:
                    res, mindes = sum, abs(sum-target)
                    # 防止[-20,-19,-19,-18], -58的情况,此时L和R可以取同一个数(值)
                    # 上个题之所以不取同一个数是因为,只有在满足求和为0的情况下,才做重复判断,此时已经取到了同一个数(值)
                    # while L<R and nums[L]==nums[L+1]: L += 1
                    while L<R and nums[R]==nums[R-1]: R -= 1
                    # 这句话之所以要去掉是因为上个题是针对满足条件时仍需要继续寻找
                    # 而这个题只有一个满足条件,等于0时直接返回即可
                    # L,R = L+1,R-1
                if mindes == 0: return target
                elif sum-target > 0: R -= 1
                else: L += 1
        return res

20. 有效的括号

在这里插入图片描述

  • 栈的方法:
class Solution:
    def isValid(self, s: str) -> bool:
        stack = []
        chardic = {"(":")","{":"}","[":"]"}
        for ch in s:
            if ch in chardic:
                stack.append(ch)
            else:
                match = stack.pop() if stack else ""
                if not match or ch!=chardic[match]: return False
        return not stack 

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

在这里插入图片描述

  • 数组修改使用快慢指针:
class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        slow = 0
        for fast in range(0, len(nums)):
            if fast==slow or nums[fast]==nums[slow]:
                continue
            else: 
                slow+=1
                nums[slow]=nums[fast]
        return slow+1
要找出某个日期的正确上下班打卡时间,你可以使用`datetime`模块进行日期时间的比较和筛选。下面是一个示例代码: ```python import datetime # 打卡数据 data = [ {'日期': '2023-06-10', '开始时间': '2023-06-10 16:27:00', '结束时间': '2023-06-10 17:39:00'}, {'日期': '2023-06-11', '开始时间': '2023-06-11 01:57:00', '结束时间': '2023-06-11 02:02:00'}, {'日期': '2023-06-11', '开始时间': '2023-06-11 15:57:00', '结束时间': '2023-06-12 01:51:00'}, {'日期': '2023-07-01', '开始时间': '2023-07-01 08:09:00', '结束时间': '2023-07-01 17:25:00'}, {'日期': '2023-07-01', '开始时间': '2023-07-01 17:32:00', '结束时间': '2023-07-01 17:41:00'} ] target_date = datetime.date(2023, 6, 11) # 指定目标日期 # 遍历打卡数据,找到目标日期的打卡记录 for record in data: record_date = datetime.datetime.strptime(record['日期'], '%Y-%m-%d').date() if record_date == target_date: start_time = datetime.datetime.strptime(record['开始时间'], '%Y-%m-%d %H:%M:%S') end_time = datetime.datetime.strptime(record['结束时间'], '%Y-%m-%d %H:%M:%S') print('开始时间:', start_time) print('结束时间:', end_time) ``` 在上面的示例代码中,我们首先指定目标日期为`2023-06-11`,然后遍历打卡数据,找到与目标日期匹配的记录。然后将开始时间和结束时间转换为`datetime`对象,并打印出来。 你可以根据实际需要修改目标日期和打卡数据,以适应你的情况。 希望对你有所帮助!如果还有其他问,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值