算法班1、2节-习题代码

第一周

1-成绩排序

题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩都按先录入排列在前的规则处理。

输入描述:

输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开。

输出描述:

按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开

示例1

输入
3
0
fang 90
yang 50
ning 70
输出
fang 90
ning 70
yang 50
import sys
while True:
    try:
        n = int(input()) 
        flag = int(input()) 
        student = [] 
        for i in range (n):
            student.append(input().split())
        res = sorted(student,key = lambda x : int(x[1]),reverse = 1 - flag)
        for r in res:
            print(r[0]+' '+r[1])
    except:
        break

2-二维数组中的查找

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

示例1

输入
7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]
输出
true
class Solution:
    # array 
    def Find(self, target, array):
        # write code here
        s = 0
        e = len(array) - 1
        while (e>=0) and (s<= len(array[0]) - 1):
            if array[e][s] < target: s += 1
            elif array[e][s] > target : e -= 1
            else: return True

        return False

3-斐波那契数列

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n<39

示例1

输入
4
输出
3
# -*- coding:utf-8 -*-
class Solution:
    def Fibonacci(self, n):
        # write code here
        if n <= 1: return n
        res,n1,n2 = 0,0,1
        for i in range(2,n+1):
            res = n1 + n2
            n1 = n2
            n2 = res

        return res

第二周

1-输入整型数组和排序标识,对其元素按照升序或降序进行排序

输入整型数组和排序标识,对其元素按照升序或降序进行排序(一组测试用例可能会有多组数据)

本题有多组输入,请使用while(cin>>)处理

输入描述:

第一行输入数组元素个数
第二行输入待排序的数组,每个数用空格隔开
第三行输入一个整数0或1。0代表升序排序,1代表降序排序

输出描述:

输出排好序的数字

示例1

输入
8
1 2 4 9 3 55 64 25
0
5
1 2 3 4 5
1
输出
1 2 3 4 9 25 55 64
5 4 3 2 1
import sys
while True:
    try:
        n = int(input())
        arr = list(map(int, input().split()))
        flag = int(input())
        arr.sort()
        if flag == 1: #从小到大输出,就把排序好后的数组倒置
            arr.reverse()
        print(" ".join(map(str,arr)))
    except:
        break

2-字符串排序

编写一个程序,将输入字符串中的字符按如下规则排序。

规则 1 :英文字母从 A 到 Z 排列,不区分大小写。

如,输入: Type 输出: epTy

规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。

如,输入: BabA 输出: aABb

规则 3 :非英文字母的其它字符保持原来的位置。

如,输入: By?e 输出: Be?y

注意有多组测试数据,即输入有多行,每一行单独处理(换行符隔开的表示不同行)

输入描述:

输入字符串

输出描述:

输出字符串

示例1

输入
A Famous Saying: Much Ado About Nothing (2012/8).
输出
A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
# -*- coding:utf-8 -*-
while True:
    try:
        s = input()
        tmp = list(s)#将字符串变为list方便操作
        s1 = list(filter(lambda x:x.isalpha(),list(s))) #把非字母全部过滤保存到s1
        s1.sort(key = str.upper) #排序
        cnt = 0
        for i in range(len(tmp)):
            if tmp[i].isalpha():#如果是字母就在tmp对应位置替换一下
                tmp[i] = s1[cnt]
                cnt += 1
        print("".join(tmp))
    except:
        break

3-最短排序

对于一个无序数组A,请设计一个算法,求出需要排序的最短子数组的长度。

给定一个整数数组A及它的大小n,请返回最短子数组的长度。

测试样例:

[1,5,3,4,2,6,7],7
返回:4
# -*- coding:utf-8 -*-

class ShortSubsequence:
    def findShortest(self, A, n):
        # write code here
        B = sorted(A)
        l,r = 0,n-1
        while l < n and A[l] == B[l]:
            l += 1
        while r >= l and A[r] == B[r]:
            r -= 1
        return r - l + 1
全部评论

相关推荐

不愿透露姓名的神秘牛友
2024-12-30 18:02
程序员牛肉:1.可以标记一下自己的学校是985,有一些hr可能没想到你这个院校是985的。 2.简历所呈现出来的能力还是有点差的,苍穹外卖+黑马点评。这在java技术域里面也就是刚学三四个月的样子,大厂现在招人少,小厂又更加希望你能直接过来干活。就你简历上呈现出来的能力,确实是有点难找,肉眼可见的不懂技术。 第一个项目中:简单的使用redis也算是亮点嘛?使用jwt,threadlocal也算是亮点?你不就是调了几个包嘛?Nginx作为服务器也能写出来,这不是前端的活嘛? 第二个项目中:分布式锁+mq消息队列+Lua队列。真没啥好问的。属于面试官看一眼就阳痿的简历,没有任何想提问的欲望。 我给你建议是好好的挖一挖这个项目吧,其实苍穹外卖和黑马点评这两个项目很不错了,只不过是太烂大街了导致面试官没啥问的兴趣,所以不太推荐写简历上。
点赞 评论 收藏
分享
coffrar:全都是已读😅沟通一千五百多个了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务