PYTHON 牛客刷题记录

PYTHON 牛客刷题记录,第1张

文章目录
  • 一、牛客-简单类
    • 1、HJ81 字符串字符匹配--SET使用
    • 2、二维数组 *** 作--map(),split()使用
    • 3、HJ8 合并表记录--sorted()、字典输出
    • 4、HJ80 整型数组合并--join()、set()、多input写一行、列表转字符串
    • 5、HJ6 质数因子--while与if、math.sqrt、end=" "、整除//
    • 6、HJ51 输出单向链表中倒数第k个结点


一、牛客-简单类 1、HJ81 字符串字符匹配–SET使用

描述
判断短字符串S中的所有字符是否在长字符串T中全部出现。
请注意本题有多组样例输入。
数据范围:1\le len(S),len(T)\le200\1≤len(S),len(T)≤200
进阶:时间复杂度:O(n)\O(n) ,空间复杂度:O(n)\O(n)
输入描述:
输入两个字符串。第一个为短字符串,第二个为长字符串。两个字符串均由小写字母组成。

输出描述:
如果短字符串的所有字符均在长字符串中出现过,则输出字符串"true"。否则输出字符串"false"。

示例1
输入:
bc
abc
复制
输出:
true
复制
说明:
其中abc含有bc,输出"true"

while True:
    try:
        s1=input()
        s2=input()
        if set(s1)<=set(s2):
            print("true")
        else:
            print("false")
    except:
        break

set():创建一个无序不重复元素集,能够进行交集、并集、差集计算。

2、二维数组 *** 作–map(),split()使用

map():根据提供的函数,对指定序列进行转换,返回迭代器。一般转换为list。
split():通过分隔符对字符串进行分隔,第二个参数num默认为-1,代表分隔所有,否则则分隔为num+1个元素。返回值为列表。
描述
有一个mn\m∗n 大小的数据表,你会依次进行以下5种 *** 作:
1.输入m\m 和n\n ,初始化m
n\m∗n 大小的表格。
2.输入x_1x1​、y_1y1​、x_2x2​、y_2y2​,交换坐标在(x_1,y_1)(x1​,y1​)和(x_2,y_2)(x2​,y2​)的两个数。
3.输入x\x ,在第x\x 行上方添加一行。
4.输入y\y ,在第y\y 列左边添加一列。
5.输入x\x 、y\y ,查找坐标为(x,y)(x,y) 的单元格的值。
请编写程序,判断对表格的各种 *** 作是否合法。

详细要求:

1.数据表的最大规格为9行9列,对表格进行 *** 作时遇到超出规格应该返回错误。
2.对于插入 *** 作,如果插入后行数或列数超过9了则应返回错误。如果插入成功了则将数据表恢复至初始化的m
n\m∗n 大小,多出的数据则应舍弃。
3.所有输入坐标 *** 作,对m*n\m∗n 大小的表格,行号坐标只允许0m-1,列号坐标只允许0n-1。超出范围应该返回错误。

本题含有多组样例输入!行列从0开始标号
数据范围:数据组数:1\le t\le 5\1≤t≤5
进阶:时间复杂度:O(1)\O(1) ,空间复杂度:O(1)\O(1)
输入描述:
输入数据按下列顺序输入:
1 表格的行列值
2 要交换的两个单元格的行列值
3 输入要插入的行的数值
4 输入要插入的列的数值
5 输入要查询的单元格的坐标

输出描述:
输出按下列顺序输出:
1 初始化表格是否成功,若成功则返回0, 否则返回-1
2 输出交换单元格是否成功
3 输出插入行是否成功
4 输出插入列是否成功
5 输出查询单元格数据是否成功

示例1
输入:
4 9
5 1 2 6
0
8
2 3
4 7
4 2 3 2
3
3
4 7
复制
输出:
0
-1
0
-1
0
0
-1
0
0
-1
复制
说明:
本组样例共有2组样例输入。
第一组样例:
1.初始化数据表为4行9列,成功
2.交换第5行1列和第2行6列的数据,失败。因为行的范围应该是(0,3),不存在第5行。
3.在第0行上方添加一行,成功。
4.在第8列左边添加一列,失败。因为列的总数已经达到了9的上限。
5.查询第2行第3列的值,成功。
第二组样例:
1.初始化数据表为4行7列,成功
2.交换第4行2列和第3行2列的数据,失败。因为行的范围应该是(0,3),不存在第4行。
3.在第3行上方添加一行,成功。
4.在第3列左边添加一列,成功。
5.查询第4行7列的值,失败。因为虽然添加了一行一列,但数据表会在添加后恢复成4行7列的形态,所以行的区间仍然在[0,3],列的区间仍然在[0,6],无法查询到(4,7)坐标。

while True:
    try:
        m,n=map(int,input().split())
        x,y,z,t=map(int,input().split())
        insert_x=int(input())
        insert_y=int(input())
        i,j=map(int,input().split())
        if 0
3、HJ8 合并表记录–sorted()、字典输出

sorted():针对可遍历对象进行排序,生成新的列表。
sort():只可针对列表排序。

# 针对字典,则根据key进行默认的升序,然后输出key的升序列表
a={'0':'5','1':'7'}
sorted(a)
>>>[0,1]
# 第二个参数:key
a=[{'age':25,'name':'Jack'},{'age':20,'name':'Mack'}]
sorted(a,key=lambda x:x['age'])
>>>[{'age':20,'name':'Mack'}{'age':25,'name':'Jack'}]
# 第三个参数:reserve=False,默认Falue为升序,True为倒序。
a=[3,2,6,7,1]
sorted(a,reserve=True)
>>>[7,6,3,2,1]

描述
数据表记录包含表索引index和数值value(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照index值升序进行输出。
提示:
0 <= index <= 11111111
1 <= value <= 100000

输入描述:
先输入键值对的个数n(1 <= n <= 500)
接下来n行每行输入成对的index和value值,以空格隔开

输出描述:
输出合并后的键值对(多行)
输入:
4
0 1
0 2
1 2
3 4
复制
输出:
0 3
1 2
3 4

while True:
    try:
        n=int(input())
        dct={}
        for i in range(n):
            key,value=map(int,input().split())
            if key not in dct:
                dct[key]=value
            else:
                dct[key]+=value
        for i in sorted(dct):
            print(i,dct[i])
    except:
        break
4、HJ80 整型数组合并–join()、set()、多input写一行、列表转字符串

join():将序列(可以是字符串,不能是int)以指定的字符进行拼接,形成字符串。
列表变成字符串map(str,lst)
描述
题目标题:

将两个整型数组按照升序合并,并且过滤掉重复数组元素。
输出时相邻两数之间没有空格。

输入描述:
输入说明,按下列顺序输入:
1 输入第一个数组的个数
2 输入第一个数组的数值
3 输入第二个数组的个数
4 输入第二个数组的数值

输出描述:
输出合并之后的数组

示例1
输入:
3
1 2 5
4
-1 0 3 2
复制
输出:
-101235

while True:
    try:
        m,x,n,y=input(),input().split(),input(),input().split()
        res=map(str,sorted(map(int,set(x+y))))
        print(''.join(res))
    except:
        break
5、HJ6 质数因子–while与if、math.sqrt、end=" "、整除//

描述
功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )
数据范围: 1 \le n \le 2 \times 10^{9} + 14 \1≤n≤2×10
9
+14
输入描述:
输入一个整数
输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。

示例1
输入:
180
复制
输出:
2 2 3 3 5

import math
while True:
    try:
        n=int(input())
        for i in range(2,int(math.sqrt(n))+1):
                while n%i==0:
                    print(i,end=" ")
                    n=n//i
        if n>2:
            print(n)
    except:
        break
# 可能质数因子是本身
# 可能剩下来的质数大于n^1/2
# math.sqrt()的使用,这是求质数时减少算法的必用方法
# 最好的办法:每次能被除的时候,直接输出,结尾带上end=" "
# n=n//i,每次被除完,n需要更新值。且//代表整除,/有1位小数。
# while 和 if的区别:if循环语句只执行1次,成功就不回来。while条件判断,遇到FALSE才退出循环
6、HJ51 输出单向链表中倒数第k个结点

解题思路:创建节点类,创建链表类(包含判断是否为空、元素添加、输出第N个节点值)。目标函数:创建实例,再调用添加、输出的方法。
描述
输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。

链表结点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
正常返回倒数第k个结点指针,异常返回空指针.
要求:
(1)正序构建链表;
(2)构建后要忘记链表长度。
数据范围:链表长度满足 1 \le n \le 1000 \1≤n≤1000 , k \le n \k≤n ,链表中数据满足 0 \le val \le 10000 \0≤val≤10000

本题有多组样例输入。

输入描述:
输入说明
1 输入链表结点个数
2 输入链表的值
3 输入k的值

输出描述:
输出一个整数

示例1
输入:
8
1 2 3 4 5 6 7 8
4
复制
输出:
5

# 定义一个结点类
class Node(object):
    # 初始化类的属性
    def __init__(self,data):
        self.data=data
        self.next=None # 用来保存下一个结点对象,初始化为None
# 定义一个链表类
class LinkList(object):
    def __init__(self,node=None):
        self.head=node
        
    # 判断链表是否为空
    def is_empty(self):
        if self.head is None:
            return True
        else:
            return False
    
    # 链表尾部添加对象,首先一定得判断链表是否为空
    def append(self,item):
        node=Node(item) # 用item的值,创建链表
        
        if self.is_empty():
            self.head=node
        
        else:
            cur=self.head 
            
            while cur.next is not None:
                cur=cur.next 
            cur.next=node
            
    # 输出打印第N个节点的值
    def print_node(self,num):
        cur=self.head
        for i in range(0,num-1):
            cur=cur.next 
        print(cur.data)

if __name__=='__main__':
    while True:
        try:
            n,lst,k=int(input()),input().split(),int(input())
            if k==0:
                print(0)
            else:
                # 注意给单链表添加元素的方法
                link_lst=LinkList()
                for i in lst:
                    link_lst.append(i)
            link_lst.print_node(n-k+1)  # 此处可直接输出结果
        except:
            break
                

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/904889.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-15
下一篇2022-05-15

发表评论

登录后才能评论

评论列表(0条)