目录

1、成绩排序

1.1、题目描述

1.2、解题

Ⅰ思路:

Ⅲ常规代码:

2、给气球分类

1.1、题目描述

1.2、解题

Ⅰ思路:

Ⅲ常规代码:

3、最短排序

3.1、题目描述

1.2、解题

Ⅰ思路:

Ⅲ常规代码:

总结

1、成绩排序

1.1、题目描述

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

python将学生的专业课成绩总成绩及排名写入表格中 怎样用python把给成绩排序_子数组

1.2、解题

Ⅰ思路:

主要利用嵌套列表套取用户及成绩信息和sorted函数

Ⅲ常规代码:

while True:
    try:
        n,sign = int(input()),int(input())
        lis =[]
        for i in range(n):
            a,b = input().split(' ')
            lis.append([a,int(b)])
        if sign == 0:
            res = sorted(lis,key=lambda x:x[1],reverse=True)
        if sign == 1:
            res = sorted(lis,key=lambda x:x[1])#默认升序
        for i in lis:
            print(lis[0],lis[1],sep=' ')
    except:
        break

2、给气球分类

1.1、题目描述

牛牛今天带来了一排气球,气球有n个,然后每一个气球里面都包含一个数字,牛牛是一个善于思考的人,于是他就想到了一个问题,

牛牛随便给你一个值K,这个值在这些气球中不一定存在,聪明的你需要把气球中包含的数字是小于K的放到这排气球的左边,大于K的放到气球的右边,

等于K的放到这排气球的中间,最终返回一个整数数组,其中只有两个值,分别是气球中包含的数字等于K的部分的左右两个下标值,如果气球中没有K这个数字就输出-1,-1。 

python将学生的专业课成绩总成绩及排名写入表格中 怎样用python把给成绩排序_排序算法_02

 

python将学生的专业课成绩总成绩及排名写入表格中 怎样用python把给成绩排序_算法_03

python将学生的专业课成绩总成绩及排名写入表格中 怎样用python把给成绩排序_数组_04

1.2、解题

Ⅰ思路:

解题关键在于指针i,left和right初始取值值得思考,如果lis[i] > k,i不移动,直到lis[i] <= k,i进一位,目的是将大于k的值替换到i位置的右边,小于k的值替换到i位置的左边,直到i=right,此时循环替换结束。
若不存在k,i不会单独进一位,那么left=i-1=right-1,此时(left+1)>(right-1),输出'-1 -1'
若存在1个k,i一次单独进一位,那么left+1=i-1=right-1,此时(left+1)=(right-1),输出'i-1 i-1'
若存在2个k,i二次单独进一位,那么left+2=i-1=right-1,此时(left+1)+1=(right-1),输出'i-2 i-1'
注意:i为结束循环后的i,不同数组i值不一

Ⅲ常规代码:

n,k = map(int,input().split(' '))
lis = list(map(int,input().split(' ')))
left = -1
right = n
i = 0
while i < right: #假如元素均大于k,i恒等于0,right = 1时,还可循环,0位置自我替换,i=right=0,循环停止
    if lis[i] > k:
        lis[i],lis[right-1]=lis[right-1],lis[i]
        right -= 1
    elif lis[i] < k:
        lis[i],lis[left+1]=lis[left+1],lis[i]
        left += 1
        i += 1
    else: #该元素等于目标值时,跳过该元素
        i += 1
if (left+1) <= (right-1):
    print(left+1,right-1)
else:
    print('-1 -1')

3、最短排序

3.1、题目描述

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

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

python将学生的专业课成绩总成绩及排名写入表格中 怎样用python把给成绩排序_leetcode_05

1.2、解题

Ⅰ思路:

比如一个无序数组lis = [1,5,3,4,2,6,7] 返回 4,因为只有 [5,3,4,2] 需要排序,那我们就可以分别从左往右和从右往左遍历,找出左右两边失效的位置,则这两个失效位置中间的数组即为需要排序的最短子数组。

Ⅲ常规代码:

# -*- coding:utf-8 -*-
class ShortSubsequence:
    def findShortest(self, A, n):
        # write code here
        i = 0
        k = n-1
        lis_sort = sorted(A)
        if A == lis_sort:
            return 0
        while A[i] == lis_sort[i]:
            i+=1
        while A[k] == lis_sort[k]:
            k-=1
        return k-i+1