导航

一、NC192 二叉树的后序遍历

二、NC117 合并二叉树

三、求长度最长的的连续子序列使他们的和等于sum

四、按顺序取出固定长度内容并合并两个数组为一个新数组

五、输出所有结果小于k的整数组合到一起的最小交换次数

六、取集合中满足条件的数据对组成新的集合

七、太阳能板最大面积

八、计算出满足能力最低要求的最大数量团队组合

九、将虚拟IPv4地址转换为一个32位的整数

十、将一队小朋友以“高”“矮”“高”“矮”顺序排列

十一、将探险队的坐标位置中挑选出相对总部的距离最远的坐标位置

- - - - - - - - - - 分-割-线 - - - - - - - - - - -
一、NC192 二叉树的后序遍历

描述:给定一个二叉树,返回他的后序遍历的序列。
解析:使用递归的方法去处理二叉树节点遍历的情况,后序遍历先访问左子树,再访问右子树,最后访问根节点
测试数据:

示例1
输入:
{1,#,2,3}
复制
返回值:
[3,2,1]
示例2
输入:
{1}
复制
返回值:
[1]

class Solution:
def postorder(self, list: List[int], root: TreeNode):
# 遇到空节点则返回
if not root:
return
# 先去左子树
self.postorder(list, root.left)
# 再去右子树
self.postorder(list, root.right)
# 最后访问根节点
list.append(root.val) def postorderTraversal(self , root: TreeNode) -> List[int]:
res = []
# 递归后序遍历
self.postorder(res, root)
return res

二、NC117 合并二叉树

描述:已知两颗二叉树,将它们合并成一颗二叉树。合并规则是:都存在的结点,就将结点值加起来,否则空的位置就由另一个树的结点来代替。

解析:利用递归方式,新节点值设置为现有两个节点值的和,新节点左右子树分别用现有子树左右节点为参数进行递归

测试数据:

输入:

示例1
输入:
{1,3,2,5},{2,1,3,#,4,#,7}
复制
返回值:
{3,4,5,5,4,#,7}
示例2
输入:
{1},{}
返回值:
{1}

class Solution:
def mergeTrees(self , t1: TreeNode, t2: TreeNode) -> TreeNode:
if not t1:
return t2
if not t2:
return t1
newnode = TreeNode(t1.val+t2.val)
newnode.left = self.mergeTrees(t1.left,t2.left)
newnode.right = self.mergeTrees(t1.right,t2.right)
return newnode

三、求长度最长的的连续子序列使他们的和等于sum

描述:有N个正整数组成的一个序列,给定一个整数sum
求长度最长的的连续子序列使他们的和等于sum
返回次子序列的长度,如果没有满足要求的序列 返回-1
示例:
输入序列仅由数字和英文逗号构成,数字之间采用英文逗号分割
输入:
1,2,3,4,2
6
输出:
3
解析:
1,2,3和4,2两个序列均能满足要求,所以最长的连续序列为1,2,3 因此结果为3
输入:
1,2,3,4,2
20
输出:
-1
解析:两次for循环遍历数组,连续累加值等于sum,时记录长度
l = list(map(int, input().split(",")))
s = int(input())
a = []
for i in range(len(l)):
sum_ = 0
for j in range(i,len(l)):
sum_ += l[j]
if sum_ == s:
a.append(len(l[i:j+1]))
break
print(max(a) if len(a)>0 else -1)

四、按顺序取出固定长度内容并合并两个数组为一个新数组

描述:现在有多组整数数组,需要将他们合并成一个新的数组,合并规则从每个数组里按顺序取出固定长度的内容
合并到新的数组,取完的内容会删除掉,如果改行不足固定长度,或者已经为空,则直接取出剩余部分的内容放到新的数组中继续下一行
输入描述:
第一 行每次读取的固定长度,长度0<len<10
第二行是整数数组的数目,数目 0<num<10000
第3~n行是需要合并的数组,不同的数组用换行分割,元素之间用逗号分割,最大不超过100个元素
示例:
输出描述:输出一个新的数组,用逗号分割示例 输入:
3
2
2,5,6,7,9,5,7
1,7,4,3,4
输出:
2,5,6,1,7,4,7,9,5,3,4,7
说明:
输入:
4
3
1,2,3,4,5,6
1,2,3
1,2,3,4
输出:
1,2,3,4,1,2,3,1,2,3,4,5,6
解析:将多个数组写入一个二维的数组内,遍历二维数组,获取最小的可弹出长度,弹出后写入新的数组内
size = int(input())
num = int(input())
l1,l2,total = [],[],0
for i in range(num):
tmp = list(map(str,input().split(",")))
l1.append(tmp)
total += len(tmp)
while len(l2)<total:
for i in l1:
if len(i)==0:
break
else:
tmp_size = min(size,len(i))
for j in range(tmp_size):
l2.append(i.pop(0))
print(",".join(l2))

五、输出所有结果小于k的整数组合到一起的最小交换次数

描述:给出数字k,请输出所有结果小于k的整数组合到一起的最小交换次数。  组合一起是指满足条件的数字相邻,不要求相邻后在数组中的位置。
数据范围 -100 <= k <= 100 -100 <= 数组中的值 <= 100
示例:
第一行输入数据:第二行输入k数值:
1 3 1 4 0
2
输出 1
样例输入2:
第一行输入数据:第二行输入k数值
0 0 1 0
2
输出 0
样例输入3: 第一行输入数据:第二行输入k数值:
2 3 2
1
输出 0
解析:取出原数组内所有小于k的数字的下标位置组成新的数组,并遍历数组内记录最小的距离值
l1 = list(map(int,input().split()))
k = int(input())
l = []
a = []
for i in range(len(l1)):
if l1[i]< k:
l.append(i)
if len(l) > 1:
for i in range(len(l)):
for j in range(i+1,len(l)):
s = abs(l[i]-l[j])-1
a.append(s)
print(min(a) if len(l) > 1 else 0)

六、取集合中满足条件的数据对组成新的集合

描述:同一个数轴x有两个点的集合A={A1,A2,...,Am}和B={B1,B2,...,Bm}  A(i)和B(j)均为正整数
A、B已经按照从小到大排好序,AB均不为空
给定一个距离R 正整数,列出同时满足如下条件的(A(i),B(j))数对
1. A(i)<=B(j)
2. A(i),B(j)之间距离小于等于R
3. 在满足1,2的情况下每个A(i)只需输出距离最近的B(j)
4. 输出结果按A(i)从小到大排序
输入描述
第一行三个正整数m n R
第二行m个正整数 表示集合A
第三行n个正整数 表示集合B
输入限制
1<=R<=100000
1<=n,m<=100000
1<= A(i),B(j) <= 1000000000
输出描述
每组数对输出一行 A(i)和B(j),以空格隔开
示例:
输入
4 5 5
1 5 5 10
1 3 8 8 20
输出
1 1
5 8
5 8
解析:解析两个数组,取出满足条件的数据,经过排序后输出
line1 = list(map(int,input().split()))
A = list(map(int,input().split()))
B = list(map(int,input().split()))
m,n,R = line1[0],line1[1],line1[2]
s,temp=[],{}
for i in A:
for j in B:
if i<=j and abs(j-i)<=R:
temp[j-i] = (i,j)
temp1 = sorted(temp.items(),key=lambda x:x[0])
if temp1:
s.append(temp1[0][1])
temp={}
for i in s:
print(" ".join(map(str,i)))

七、太阳能板最大面积

描述:给航天器一侧加装长方形或正方形的太阳能板(图中的红色斜线区域),需要先安装两个支柱(图中的黑色竖条),再在支柱的中间部分固定太阳能板。但航天器不同位置的支柱长度不同,太阳能板的安装面积受限于最短一侧的那根支柱长度。如图:
现提供一组整形数组的支柱高度数据,假设每根支柱间距离相等为1个单位长度,计算如何选择两根支柱可以使太阳能板的面积最大。
输入描述:
10,9,8,7,6,5,4,3,2,1
注:支柱至少有2根,最多10000根,能支持的高度范围1~10^9的整数。柱子的高度是无序的,例子中递减只是巧合。
输出描述:
可以支持的最大太阳能板面积:(10米高支柱和5米高支柱之间)
25
示例:
输入
10,9,8,7,6,5,4,3,2,1
输出
25

nums = list(map(int,input().split(",")))
max_area=0
for i in range(len(nums)-1):
for j in range(i+1,len(nums)-1):
temp_area= min(nums[i:j+1])*(j-i)
if temp_area > max_area:
max_area = temp_area
print(max_area)

八、计算出满足能力最低要求的最大数量团队组合

描述:用数组代表每个人的能力,一个比赛活动要求参赛团队的最低能力值为N,每个团队可以由1人或2人组成,
且1个人只能参加1个团队, 请计算出最多可以派出多少支符合要求的团队?
输入描述:
5
3 1 5 7 9
8
第一行数组代表总人数,范围[1,500000]
第二行数组代表每个人的能力,每个元素的取值范围[1, 500000],数组的大小范围[1,500000]
第三行数值为团队要求的最低能力值,范围[1, 500000]
输出描述:
3

解析:分单人组团与多人组团分别处理,两人的团队分别先按照能力从小到大排序并各种可能记录二维数组,记录sum的最小值后写入最终的数组,此时累计count

n = int(input())
l1 = list(map(int,input().split()))
k = int(input())
l = []
l2 = []
l3 = []
for i in l1:
if i<k:
l.append(i)
count = n - len(l)
l = sorted(l) #[1,3,5,7]
if len(l)>1:
for i in range(len(l)):
for j in range(i+1,len(l)):
if l[i]+l[j]>=k and (l[i] not in l3) and (l[j] not in l3):
l2.append([l[i],l[j]])
if len(l2)>0:
sum_max=0
index=0
for k in range(len(l2)):
tmp_sum = sum(l2[k])
if tmp_sum > sum_max:
sum_max = tmp_sum
index = k
l3.append(l2[k][0])
l3.append(l2[k][1])
count += 1
l2 = []
print(count)

 九、将虚拟IPv4地址转换为一个32位的整数

描述:存在一种虚拟IPv4地址,由4小节组成,每节的范围为0~128,以#号间隔,格式如下:
(1~128)#(0~255)#(0~255)#(0~255)
请利用这个特性把虚拟IPv4地址转换为一个32位的整数,IPv4地址以字符串形式给出,要求每个IPv4地址只能对应到唯一的整数上。
如果是非法IPv4,返回invalid IP

示例
输入:
100#101#1#5
输出
1684340997

while True:
try:
m = input()
try:
n = list(map(int,m.split("#")))
if n[0]>128 or n[1]>255 or n[2]>255 or n[3]>255 or len(n)!=4:
print("invalid IP")
continue
res = ""
for i in n:
res += str("%08d" % (int(bin(i)[2:])))
print(int(res,2))
except:
print("invalid IP")
except:
break

十、将一队小朋友以“高”“矮”“高”“矮”顺序排列

描述:现在有一队小朋友,他们高矮不同,,我们以正整数数组表示这一队小朋友的身高,如数组{5,3,1,2,3}
我们现在希望小朋友排队,以“高”“矮”“高”“矮”顺序排列,
每一个“高”位置的小朋友要比相邻的位置高或者相等;
每一个“矮”位置的小朋友要比相邻的位置矮或者相等;
要求小朋友们移动的距离和最小,第一个从“高”位开始排,输出最小移动距离即可"""
示例:
1.输入:
4 1 3 5 2
输出:4 1 5 2 3
2.输入:
1 1 1 1 1
输出:1 1 1 1 1
说明:
相邻位置可以相等
3.输入:
xxx
输出:[]
说明:
出现非法参数情况,返回空数组

解析:设置标记,通过循环一步步处理并在每一步处理后改变标记的布尔值

try:
l = list(map(int,input().split()))
flag=True
for i in range(len(l)-1):
for j in range(i+1,len(l)-1):
if flag:
if not l[i]>=l[j]:
l[i],l[j]=l[j],l[i]
flag = not flag
break
else:
if not l[j]>=l[i]:
l[i],l[j]=l[j],l[i]
flag = not flag
break
res=""
for i in l:
res += str(i)+" "
print(res.strip())
except:
print("[]")

十一、将探险队的坐标位置中挑选出相对总部的距离最远的坐标位置

描述:探险队负责对地下洞穴进行探险。 探险队成员在进行探险任务时,随身携带的记录器会不定期地记录自身的坐标,但在记录的间隙中也会记录其他数据。 探索工作结束后,探险队需要获取到某成员在探险过程中相对于探险队总部的最远的足迹位置。
仪器记录坐标时,坐标的数据格式为(x,y),如(1,2)、(100,200),其中0<x<1000,0<y<1000。同时存在非法坐标,如(01,1)、(1,01),(0,100)属于非法坐标。
设定探险队总部的坐标为(0,0),某位置相对总部的距离为:x * x+ y * y。
若两个座标的相对总部的距离相同,则第一次到达的坐标为最远的足迹。
若记录仪中的坐标都不合法,输出总部坐标(0,0)。 备注:不需要考虑双层括号嵌套的情况,比如sfsdfsd((1,2))。
输入描述:
字符串,表示记录仪中的数据。
ferga13fdsf3(100,200)f2r3rfasf(300,400)
输出描述:
字符串,表示最远足迹到达的坐标。
如: (300,400)
示例 1:
输入
ferg(3,10)a13fdsf3(3,4)f2r3rfasf(5,10)
1
输出
(5,10)
1
说明
记录仪中的合法坐标有3个: (3,10), (3,4), (5,10),其中(5,10)是相距总部最远的坐标, 输出(5,10)。
示例 2:
输入
asfefaweawfaw(0,1)fe
1
输出
(0,0)

解析:首先进行字符串的分割,提取到坐标的位置,排除异常的坐标后取最大值的坐标并输出

l1 = input().split("(")[1:]
l2 = []
res =[]
max_area=0
for i in l1:
i = i.split(")")[0]
l2.append(i)
for i in l2:
x = i.split(",")[0]
y = i.split(",")[1]
if str(x) == "0" or x.startswith("0") or str(y) == "0" or y.startswith("0"):
res = [0,0]
else:
x,y=int(x),int(y)
tmp_area = x ** 2 + y ** 2
if tmp_area > max_area:
max_area = tmp_area
res = [x,y]
print(f"({res[0]},{res[1]})")

python(牛客)试题解析2 - 中等的更多相关文章

  1. python(牛客)试题解析1 - 入门级

    导航: 一.NC103 反转字符串 二.NC141 判断是否为回文字符串 三.NC151 最大公约数 四.NC65 斐波那契数列 - - - - - - - - - - 分-割-线 - - - - - ...

  2. python 牛客网 你的输出为:空。请检查一下你的代码,有没有循环输入处理多个case。问题解决

    你的输出为:空.请检查一下你的代码,有没有循环输入处理多个case.点击查看如何处理多个case 核心:他这个程序测试正确与否的流程是 连续输入多组测试数据进行测试,只有每组数据都对才行 所以必须使用 ...

  3. 牛客网华为机试题之Python解法

    牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...

  4. 【Java笔试】OYO校招Java工程师|牛客平台,算法:字符串翻转。附选择题解析

    文章目录 1.Java笔试算法题:字符串翻转 2.单选题: 2.1.同一进程下的多个线程可以共享哪一种资源:data section 2.2.一个树形的叶结点在前序遍历和后序遍历下,可以相同的相对位置 ...

  5. Python 最常见的 170 道面试题解析:2019 最新

    Python 最常见的 170 道面试题解析:2019 最新 2019年06月03日 23:30:10 GitChat的博客 阅读数 21329 文章标签: PythonPython入门Python面 ...

  6. 算法题14 小Q歌单,牛客网,腾讯笔试题

    算法题14 小Q歌单,牛客网,腾讯笔试题 题目: 小Q有X首长度为A的不同的歌和Y首长度为B的不同的歌,现在小Q想用这些歌组成一个总长度正好为K的歌单,每首歌最多只能在歌单中出现一次,在不考虑歌单内歌 ...

  7. 算法题16 贪吃的小Q 牛客网 腾讯笔试题

    算法题16 贪吃的小Q 牛客网 腾讯笔试题 题目: 链接:https://www.nowcoder.com/questionTerminal/d732267e73ce4918b61d9e3d0ddd9 ...

  8. MySql面试题、知识汇总、牛客网SQL专题练习

    点击名字直接跳转到链接: Linux运维必会的100道MySql面试题之(一) Linux运维必会的100道MySql面试题之(二) Linux运维必会的100道MySql面试题之(三) Linux运 ...

  9. 牛客网数据库SQL实战解析(51-61题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  10. 牛客网数据库SQL实战解析(41-50题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

随机推荐

  1. KingbaseES 中 JSON 介绍

    KingbaseES支持JSON和JSONB.这两种类型在使用上几乎完全一致,主要区别是 JSON类型把输入的数据原封不动的存放到数据库中.JSONB类型在存放时把JSON解析成二进制格式. JSON ...

  2. Typora自动上传超级详细教程!!

    第一步检查环境变量 打开cmd 查看以下环境变量 需要软件: Typora PicGo gitee账号 配置node 配置git 第二步创建gitee仓库 设置仓库名直接创建,因为这里不能直接修改开源 ...

  3. 华南理工大学 Python第2章课后小测-1

    1.(单选)"abc"的长度是3,"老师好"的长度是多少?(本题分数:4)A) 1B) 3C) 6D) 9您的答案:B  正确率:100%2.(单选)下面代码的 ...

  4. LVGL 入门使用教程

    一.准备资料 开发板:ESP32-S3 开发环境:VS Code + PlatformIO 串口屏驱动 TFT-eSPI:https://github.com/Bodmer/TFT_eSPI 触摸驱动 ...

  5. js 对象的深复制 解决不能复制undefined (递归)

    用普通的拷贝  JSON.parse和 JSON.stringify 进行对象拷贝是不会拷贝undefined //普通的拷贝   const obj = {         a: {         ...

  6. kafka的auto.offset.reset详解与测试

    1. 取值及定义 auto.offset.reset有以下三个可选值: latest (默认) earliest none 三者均有共同定义: 对于同一个消费者组,若已有提交的offset,则从提交的 ...

  7. vue项目中使用百度富文本编辑器ueditor

    第一步,安装依赖,并且把ueditor整个文件夹放入public里边 第二步,在你需要编辑的地方引入,或者main.js中全局引入 XX.vue文件中写入下面代码,创建编辑器. <vue-ued ...

  8. 谈谈对K8S CNI、CRI和CSI插件的理解

  9. Kibana:Canvas入门

  10. python-数据描述与分析(1)

    数据描述与分析 在进行数据分析之前,我们需要做的事情是对数据有初步的了解,这个了解就涉及对行业的了解和对数据本身的敏感程度,通俗来说就是对数据的分布有大概的理解,此时我们需要工具进行数据的描述,观测数 ...