第371场周赛
至少在态度上有进步 昨天参加了 今天也参加了
跟昨晚的类似 第一题和第四题都是一样的 但是plus版要求时间复杂度
给你一个下标从 0 开始的整数数组 nums
。如果一对整数 x
和 y
满足以下条件,则称其为 强数对 :
|x - y| <= min(x, y)
你需要从 nums
中选出两个整数,且满足:这两个整数可以形成一个强数对,并且它们的按位异或(XOR
)值是在该数组所有强数对中的 最大值 。
返回数组 nums
所有可能的强数对中的 最大 异或值。
注意,你可以选择同一个整数两次来形成一个强数对。
示例 1:
输入:nums = [1,2,3,4,5]
输出:7
解释:数组 nums
中有 11 个强数对:(1, 1), (1, 2), (2, 2), (2, 3), (2, 4), (3, 3), (3, 4), (3, 5), (4, 4), (4, 5) 和 (5, 5) 。
这些强数对中的最大异或值是 3 XOR 4 = 7 。
class Solution(object): def maximumStrongPairXor(self, nums): """ :type nums: List[int] :rtype: int """ l = len(nums) ans = 0 for i in range(l-1): for j in range(i+1,l): if abs(nums[i]-nums[j])<=min(nums[i],nums[j]): ans = max(ans,nums[i]^nums[j]) return ans
4分钟过
--------------------------------------第二题----------------------------------
给你一个长度为 n
、下标从 0 开始的二维字符串数组 access_times
。对于每个 i
(0 <= i <= n - 1
),access_times[i][0]
表示某位员工的姓名,access_times[i][1]
表示该员工的访问时间。access_times
中的所有条目都发生在同一天内。
访问时间用 四位 数字表示, 符合 24 小时制 ,例如 "0800"
或 "2250"
。
如果员工在 同一小时内 访问系统 三次或更多 ,则称其为 高访问 员工。
时间间隔正好相差一小时的时间 不 被视为同一小时内。例如,"0815"
和 "0915"
不属于同一小时内。
一天开始和结束时的访问时间不被计算为同一小时内。例如,"0005"
和 "2350"
不属于同一小时内。
以列表形式,按任意顺序,返回所有 高访问 员工的姓名。
示例 1:
输入:access_times = [["a","0549"],["b","0457"],["a","0532"],["a","0621"],["b","0540"]] 输出:["a"] 解释:"a" 在时间段 [05:32, 06:31] 内有三条访问记录,时间分别为 05:32 、05:49 和 06:21 。 但是 "b" 的访问记录只有两条。 因此,答案是 ["a"] 。
class Solution(object): def findHighAccessEmployees(self, access_times): """ :type access_times: List[List[str]] :rtype: List[str] """ ans = list() access_dict = {} for item in access_times: key, value = item if key in access_dict: access_dict[key].append(value) else: access_dict[key] = [value] for key, value_list in access_dict.items(): n = len(value_list) count = 0 if n<3: continue else: value_list.sort() for indx in range(0,n-2): start_time=value_list[indx] if int(value_list[indx+1])-int(start_time)<100 and int(value_list[indx+2])-int(start_time)<100: ans.append(key) continue return list(set(ans))
先根据人分类 每个人的时间再排序
然后再一次判断每个人的
滑动窗口的思想
前几次没考虑到 0010 0040 0120 0130 这种
for key, value_list in access_dict.items(): n = len(value_list) count = 0 if n<3: continue else: value_list.sort() start_time = value_list[0] for i in range(1,n): if int(value_list[i])-int(start_time)<100: count=count+1 if(count==2): ans.append(key) continue else: count = 0 start_time=value_list[i]
判断到0120 超过0010的一小时之后 就把起点设置到0120去了 事实上以0040为起点是满足条件的
于是直接 三位三位 这样判断
错了五次 耽误了一些时间 但是有几次是相同的代码提交 因为没记住错误的地方 批评
本文来自博客园,作者:YuhangLiuCE,转载请注明原文链接:https://www.cnblogs.com/YuhangLiuCE/p/17826901.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2022-11-12 FPGA-YSM3语音播放模块