#华为机试#
华为od机试,求数组内元素之和的最小绝对值,并返回那两个元素,过了65% case。其他案例不知道为什么没过,求各位大神解惑🙏
华为od机试,求数组内元素之和的最小绝对值,并返回那两个元素,过了65% case。其他案例不知道为什么没过,求各位大神解惑🙏
全部评论
排序,然后左右指针,如果(绝对值)左比右大:左++, 如果(绝对值)右比左大:右--;每次记住他们的和直到左超越右或者右超越左
请问这是什么岗啊
我的理解先排序,再二分查找
list1 = list(map(int,input().split()))
listfu = []
min1 = 10000000
listzheng = []
listij = []
for i in list1:
if i<0:
listfu.append(i)
else:
listzheng.append(i)
for i in listfu:
for j in listzheng:
if i + j < min1:
min1 = i + j
listij.append([i,j])
print(' '.join(map(str,listij[-1])),min1)
#print(listfu,listzheng)
nums = list(map(int, input().split()))
nums[:] = sorted(nums)
list1 = []
l = 0
r = len(nums)-1
mins = nums[l]+nums[r]
while r>l:
if abs(nums[l] + nums[r])<abs(mins):
mins = nums[l] + nums[r]
list1.append([nums[l],nums[r]])
elif abs(nums[l])>abs(nums[r]):
l+=1
else:
r -=1
print(' '.join(map(str,list1)),mins)
#这是复杂度为n的双指针
应该是复杂度问题 你写的是O(N^2)吗?
qsort一下,然后从中间向两边查找
两个列表 一个放正数 一个放负数 分别排序 都取最小 正数列表没有 取最小两位负数 负数列表没有 取最小两位正数
我是95%
这个应该先从小到大排序,全正数或全负数好说;否则找到负数和正数的分界点i,j,然后依次遍历下标0-i以及j-(length-1),按数***算结果,一定是负数最大值和正数最小值相加后绝对值最小,因此遍历是i--->0;j----->leng-1;
动态规划?
你怎么知道通过65%case
排好序 一个指针指向l 一个指针指向e 如果l和r对应的两数之和大于0 让l++ 否则r-- 每次移动指针后更新绝对值最小值
请问下不是有监控吗,这怎么拍的题呀
排序,然后左右双指针向中间走吧,如果往右走绝对值变小l++,否则r--
昨天没参加 今天参加可以吗我看是试卷长期有效
滑动窗口
用一个栈来维护
感觉是双指针
排序左右双指针,
相关推荐

点赞 评论 收藏
分享
01-27 00:39
山东管理学院 嵌入式软件开发 点赞 评论 收藏
分享
2024-12-26 14:43
贵州中医药大学 数据分析师 点赞 评论 收藏
分享

点赞 评论 收藏
分享