python(牛客)试题解析1 - 简单
导航:
六、数组内取出下标相同的元素求和从小到大排序,并取第k小的和值
- - - - - - - - - - 分-割-线 - - - - - - - - - - -
一、NC103 反转字符串
描述:写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)
示例:输入:"abcd",输出返回值:"dcba"
解析1:转出字符串中的元素组成列表,并反转列表,再次输出为字符串
class Solution:
def solve(self , str: str) -> str:
# write code here
list1 = []
for i in str:
list1.append(i)
list1.reverse()
s =""
for i in list1:
s = s+i
return s
解析2:利用字符串的切片倒序输出
class Solution:
def solve(self , str: str) -> str:
str1 = str[::-1]
return str1
二、NC141 判断是否为回文字符串
描述:给定一个长度为 n 的字符串,请编写一个函数判断该字符串是否回文。如果是回文请返回true,否则返回false。字符串回文指该字符串正序与其逆序逐字符一致。
示例:输入:"absba",返回值:true;输入:"ranko",返回值:false
解析1:反转字符串,并增加判断
class Solution:
def judge(self , str: str) -> bool:
str1 = str[::-1]
if str1 == str:
return True
else:
return False
解析2:使用三母表达式简化输出
class Solution:
def judge(self , str: str) -> bool:
return True if str[::-1]==str[:] else False
三、NC151 最大公约数
描述:如果有一个自然数 a 能被自然数 b 整除,则称 a 为 b 的倍数, b 为 a 的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数。输入 a 和 b , 请返回 a 和 b 的最大公约数。
示例:输入3,6,返回3;输入8,12,返回4
解析1:通过因式分解取出每个数字的质因数,然后遍历找到两组质因数里面相同的质因数,最后通过相乘得到最大公约数
class Solution:
def gcd(self , a: int, b: int) -> int:
#a = 30
#b = 40
res1 = []
res2 = []
res3 = []
# 因式分解
while a > 1:
for i in range(a - 1):
k = i + 2
if a % k == 0:
res1.append(k)
a = int(a / k)
break
#print(res1)
while b > 1:
for i in range(2, b + 1):
if b % i == 0:
res2.append(i)
b = int(b / i)
break
#print(res2)
for i in range(0, len(res1)):
if res1[i] in res2:
res3.append(res1[i])
res2.remove(res1[i])
res = 1
for i in res3:
res = res * i
#print(res)
return res
解析2:辗转相减法,运算起来很简洁:出自《九章算术》的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合,以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。则第一步中约掉的若干个2的积与第二步中等数的乘积就是所求的最大公约数
class Solution:
def gcd(self , a: int, b: int) -> int:
t=0
m=0
n=0
# 辗转相减减法
if a == b:
t = a
else:
m = max(a, b)
n = min(a, b)
t = m - n
while n != t:
m, n = max(n, t), min(n, t)
t = m - n
return t
四、NC65 斐波那契数列
描述:要求输入一个正整数 n ,请你输出斐波那契数列的第 n 项,且第一个和第二个数字均为1
示例:输入4,根据斐波那契数列的定义可知,fib(1)=1,fib(2)=1,fib(3)=fib(3-1)+fib(3-2)=2,fib(4)=fib(4-1)+fib(4-2)=3,所以答案为3。
解析1:使用递归的方式,但是由于算法复杂度较高,当数据较大的,运行的时间较长
class Solution:
def Fibonacci(self , n: int) -> int:
if n == 1 or n == 2:
return 1
elif n == 3:
return 2
else:
return self.Fibonacci(n-1) + self.Fibonacci(n-2)
解析2:使用for循环的方式,利用记录中间变量temp避免了重复计算
class Solution:
def Fibonacci(self , n: int) -> int:
a, b = 1, 1
if n <= 1:
return 1
else:
for i in range(2, n):
tmp = a + b
a = b
b = tmp
return b
五、输入一个由n个大小写字母组成的字符,按Ascii码值从小到大排序,查找字符串中第k个最小Ascii码值的字母
输入要求:
第一行输入大小写组成的字符串
第二行输入k, k必须大于0,k可以大于字符串长度
输出要求:
输出该字母所在字符串的位置索引,字符串第一个位置索引是为0,
k如果大于字符串长度,则输出最大值的怎么所在字符串的位置索引,
如果第k个最小Ascii码值的字母有重复,则输出该字母的最小位置索引。
示例:
输入:
AbCdeFG
3
输出:
5
解析:字符串排序默认即使用Ascii码,所以直接使用sorted方法处理
l1 = input()
k = int(input())
if k > len(l1):
k = len(l1)
l2 =sorted(l1)
letter = l2[k-1]
print(l1.index(letter))
六、数组内取出下标相同的元素求和从小到大排序,并取第k小的和值
给定两个整数数组,arr1、arr2,数组元素按升序排列;
假设从arr1、arr2中分别取出一个元素,可构成一对元素;
现在需要取出k对元素,并对取出的所有元素求和,计算和的最小值;
注意:两对元素对应arr1、arr2的下标是相同的,视为同一对元素。
描述:
输入两行数组arr1、arr2
每行首个数字为数组大小size, 0 < size <= 100
arr1,arr2中的每个元素e, 0< e <1000
接下来一行,正整数k 0 < k <= arr1.size * arr2.size
输出描述
满足要求的最小值
示例:
输入
3 1 1 2
3 1 2 3
2
输出
4
解析:推导式进行求和后从小到大排序,并取得第k小的和值
a = list(map(int,input().split()))[1:]
b = list(map(int,input().split()))[1:]
k = int(input())
sum_ = [x+y for x in a for y in b]
sum2 = sorted(sum_)
print(sum(sum2[:k]))
python(牛客)试题解析1 - 简单的更多相关文章
- python(牛客)试题解析1 - 入门级
导航: 一.NC103 反转字符串 二.NC141 判断是否为回文字符串 三.NC151 最大公约数 四.NC65 斐波那契数列 - - - - - - - - - - 分-割-线 - - - - - ...
- 牛客网练习赛26B(简单的dp)
题目链接:https://www.nowcoder.com/acm/contest/180/B 链接:https://www.nowcoder.com/acm/contest/180/B来源:牛客网 ...
- 牛客练习赛22 C 简单瞎搞题
//位运算 // & 都是1 才是 1 // | 都是0 才是0 // ^ 不一样才是1 #include <iostream> #include <cstdio> # ...
- 牛客练习赛43-F(简单容斥)
题目链接:https://ac.nowcoder.com/acm/contest/548/F 题意:简化题意之后就是求[1,n]中不能被[2,m]中的数整除的数的个数. 思路:简单容斥题,求[1,n] ...
- python 牛客网 你的输出为:空。请检查一下你的代码,有没有循环输入处理多个case。问题解决
你的输出为:空.请检查一下你的代码,有没有循环输入处理多个case.点击查看如何处理多个case 核心:他这个程序测试正确与否的流程是 连续输入多组测试数据进行测试,只有每组数据都对才行 所以必须使用 ...
- 笔试题——C++开发简单记录错误模块
题目:链接:https://www.nowcoder.com/questionTerminal/67df1d7889cf4c529576383c2e647c48 来源:牛客网 解析及代码来源:http ...
- Python -- Json 数据编码及解析
Python -- Json 数据编码及解析 Json 简单介绍 JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本 ...
- 牛客网华为机试题之Python解法
牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...
- Python 最常见的 170 道面试题解析:2019 最新
Python 最常见的 170 道面试题解析:2019 最新 2019年06月03日 23:30:10 GitChat的博客 阅读数 21329 文章标签: PythonPython入门Python面 ...
- 【Java笔试】OYO校招Java工程师|牛客平台,算法:字符串翻转。附选择题解析
文章目录 1.Java笔试算法题:字符串翻转 2.单选题: 2.1.同一进程下的多个线程可以共享哪一种资源:data section 2.2.一个树形的叶结点在前序遍历和后序遍历下,可以相同的相对位置 ...
随机推荐
- 变废为宝: 使用废旧手机实现实时监控方案(RTSP/RTMP方案)
随着手机淘汰的速度越来越快,大多数手机功能性能很强劲就不再使用了,以大牛直播SDK现有方案为例,本文探讨下,如何用废旧手机实现实时监控方案(把手机当摄像头做监控之用): 本方案需要准备一个手机作为采集 ...
- 【短道速滑九】仿halcon中gauss_filter小半径高斯模糊优化的实现
通常,我们谈的高斯模糊,都知道其是可以行列分离的算法,现在也有着各种优化算法实现,而且其速度基本是和参数大小无关的.但是,在我们实际的应用中,我们可能会发现,有至少50%以上的场景中,我们并不需要大半 ...
- [LeetCode]-217.存在重复元素-简单
217. 存在重复元素 给定一个整数数组,判断是否存在重复元素. 如果存在一值在数组中出现至少两次,函数返回 true .如果数组中每个元素都不相同,则返回 false . 示例 1: 输入: [1, ...
- ProxySQL(7):详述ProxySQL的路由规则
文章转载自:https://www.cnblogs.com/f-ck-need-u/p/9300829.html 关于ProxySQL路由的简述 当ProxySQL收到前端app发送的SQL语句后,它 ...
- Elasticsearch: Ngrams, edge ngrams, and shingles
Ngrams和edge ngrams是在Elasticsearch中标记文本的两种更独特的方式. Ngrams是一种将一个标记分成一个单词的每个部分的多个子字符的方法. ngram和edge ngra ...
- Elasticsearch的ETL利器——Ingest节点
文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484473&idx=1&sn=1b3b07b ...
- elk使用微信ElartAlert企业微信告警,自定义告警内容
第一种方式 alert: - "elastalert_modules.wechat_qiye_alert.WeChatAlerter" alert_text: " === ...
- .NET 反向代理 YARP 自定义配置提供程序(Configuration Providers)
介绍 基本 Yarp 示例显示从 appsettings.json 加载的代理配置.相反,代理配置可以从您选择的源以编程方式加载.您可以通过提供几个实现 IProxyConfigProvider 和 ...
- DevExpress弹框、右键菜单、Grid的使用
很重要!!!Dev为了区分winform的命名,会把一些新添加的属性放在Properties对象里!!找不到想要的属性,记得到里面找找哦! 一.下拉框 在这里假设我们的数据源是db.List(),在这 ...
- PAT (Basic Level) Practice 1008 数组元素循环右移问题 分数 20
一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN−1A0A1⋯AN ...