【刷题】20230318

HJ5 进制转换

while True:
    try:
        s=input()
        #print(s)
        print(int(s,16))
    except:
        break

NC61 两数之和

class Solution:
    def twoSum(self , numbers: List[int], target: int) -> List[int]:
        re=[]
        hash={}#创建哈希表,两元组分别表示值、下标
        for i in range(len(numbers)):
            temp=target-numbers[i]#在哈希表中查找target-numbers[i]
            if temp not in hash:#若是没找到,将此信息计入哈希表
                hash[numbers[i]]=i
            else:
                re.append(hash[temp]+1)#哈希表中记录的是之前的数字,所以该索引比当前小
                re.append(i+1)
                break
        return re

HJ3 明明的随机数 (快速排序)

data=[]
while True:
    try:
        n=input()#指定为N个数,输入
        #print(n)
        lst=[]#指定为N个数,输入
        for i in range(int(n)):#循环N次
            lst.append(int(input()))#空集合中追加一个N个数中的某一个随机数
        uniq=set(lst)#列表去重,但是会变成无序
        for j in sorted(uniq):
            print(j)
    except:
        break

HJ10 字符个数统计

while True:
    try:
        s=input()
        #print(s)
        str=''.join(set(s))# 去重后以字符串的形式
        count=0# 开始计数
        for i in str:
            if ord(i)>=0 and ord(i)<=127:
                count+=1# 计数
        print(count)
    except:
        break
#哈希的方式
while True:
    try:
        s=input()
        #print(s)
        dst={}
        l=list(s)# str转为list
        count=0# 开始计数
        for i in l:
            if ord(i)>=0 and ord(i)<=127 and i not in dst:
                dst[i]=1
                count+=1# 计数
        print(count)
    except:
        break

NC68 跳台阶

# 斐波拉契数列 递归 动态规划
class Solution:
    def jumpFloor(self, number):
        f1=1
        f2=2
        if number==1:return f1
        elif number==2:return f2
        for _ in range(number-2):
            f2,f1=f1+f2,f2
        return f2

HJ17 坐标移动

alist = input().split(';')
#line=input()
#alist = line.split(';')  
init=[0,0] #初始位置
for i in alist:
    if not 2<=len(i)<=3:
        continue
    try:
        direction=i[0]
        step=int(i[1:])
        if direction in ['A','D','W','S']:
            if 1<=step<=99:
                if direction=='A':
                    init[0]-=step
                elif direction=='D':
                    init[0]+=step
                elif direction=='S':
                    init[1]-=step
                elif direction=='W':
                    init[1]+=step
    except:
        continue
print(str(init[0])+','+str(init[1]))

HJ20 密码验证合格程序

def check(s):
    if len(s)<=9: #条件一:长度判断
        return 'NG'
    a,b,c,d=0,0,0,0 #定义四种大小写字母.数字.其它符号,以上四种至少三种
    for i in s:#条件二:四种大小写字母.数字.其它符号,四种至少三种
        if ord('a')<=ord(i)<=ord('z'):
            a=1
        elif ord('A')<=ord(i)<=ord('Z'):
            b=1
        elif ord('0')<=ord(i)<=ord('9'):
            c=1
        else:
            d=1
    if a+b+c+d<3:
        return 'NG'
    for i in range(len(s)-3):#条件三:
        if len(s.split(s[i:i+3]))>=3:
            return 'NG'
    return 'ok'

while True:
    try:
        p=input()
        if check(p)=='NG':
            print('NG')
        else:
            print('OK')
    except:
        break

7/45

HJ23 删除字符串中出现次数最少的字符

s=input()
d={}#输入一组字符串s,同时创建一个新的字典dic;
for i in s:
    if i in d:d[i]+=1
    else:d[i]=1 #遍历字符串s,如果元素在字典里,dic[i]累加次数,否则,dic[i]为1;
MIN=min(d.values())#使得MIN为出现最小次数的值;
for j in s:
    if d[j]==MIN:
        s=s.replace(j,'')#重新遍历s,如果i在字典中记录的次数等于MIN,则在原字符串s中用空字符替换;
print(s)

HJ33 整数与IP地址间的转换

分两部分

iplist=input().split('.')
num=input()
ipnum=''
#ip2num 
for i in iplist:
    a=bin(int(i,10))[2:]#转化为2进制
    if len(a)<8:
        a=('0'*(8-len(a)))+a
    else:
        a=a
    ipnum+=a
print(int(ipnum,2))#将ipnum这个2进制数转化为十进制
#num2ip
num2ip=[]
num2=bin(int(num,10))[2:]#是将num这个10进制数转化为2进制
if len(num2)<32:
    num2=('0'*(32-len(num2)))+num2#二进制数长度不够32位用0补齐
else:
    num2=num2
for i in range(4):
    b=num2[8*i:8*i+8]#8位分别为一个数
    b=str(int(b,2))#将这个8位的二进制数转化为10进制字符串
    num2ip.append(b)
print('.'.join(num2ip))#将4个数的列表用.拼成字符串

9/45

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

## list(map(int,l))  # 先使用map把l映射成整型,在使用 list() 转换为列表

n=input()
l=input().split(' ')
l=list(map(int,l))
srt=int(input())

if srt==0:
    l.sort()
    l=map(str,l)
    print(' '.join(l))
elif srt==1:
    l.sort(reverse=True)
    l=map(str,l)
    print(' '.join(l))


1839. 所有元音按顺序排布的最长子字符串

#暂时记不住
class Solution:
    def longestBeautifulSubstring(self, word: str) -> int:
        window=list()#定义滑动窗口
        cnt=set()
        left,right=0,0#窗口左右指针
        res=0
        while right<len(word):
            if not window or word[right]>=window[-1]:
                window.append(word[right])
                cnt.add(word[right])
                if len(cnt)==5:
                    res=max(res,len(window))
            else:
                window=list()
                cnt=set()
                left=right
                window.append(word[left])
                cnt.add(word[left])
            right+=1
        return res

HJ46 截取字符串

s=input()
k=int(input())
print(s[:k])

NC149 kmp算法

给你一个文本串 T ,一个非空模板串 S ,问 S 在 T 中出现了多少次

NC100 把字符串转换成整数(atoi)

#通过50%
class Solution:
    def StrToInt(self , s: str) -> int:
        # write code here
        s = s.strip()#去掉前导空格
        if not s:
            return 0
        if s[0]=='-': #去掉空格就什么都没有了
            sign=-1
        else:
            sign=1
        num=0
        for i in s:
            if i.isdigit():
                num *= 10
                num+= ord(i)- 48
            else:
                return 0
        return min(max(sign*num,-2**31),2**31-1)

HJ70 矩阵乘法计算量估算(中)

n=int(input())
arr=[]#存矩阵的行列信息
order=[]#栈,用来计算栈顶部的两个矩阵
re=0
for i in range(n):
    arr.append(list(map(int,input().split())))#处理矩阵行列的数据
f=input()#最后为相乘顺序
for i in f:
    if i.isalpha():#作用是检查一个字符串中所有的字符是否都是由字母构成的,并且至少有1个字符
        temp=ord(i)-65#将A转化为0,B转化为1,C转化为2,依次。temp作为第temp个矩阵的index
        order.append(arr[temp])
    elif i==')' and len(order)>=2:
        b=order.pop()
        a=order.pop()
        re+=a[1]*b[1]*a[0]
        order.append([a[0],b[1]])
print(re)

HJ8 合并表记录(简单)

n=int(input())
arr=[]
d={}
for i in range(n):
    s=input().split()
    #s=s.split(' ')
    key=int(s[0])
    value=int(s[1])
    d[key]=d.get(key, 0) +value#get(key, 0) 作用是获取字典中key的值,如果没有就置为默认的0
for j in sorted(d):# 最后的键值对按照升值排序
    print(j,d[j])

HJ14 字符串排序(简单)

n=int(input())
l=[]
for i in range(n):
    l.append(input())

l.sort()
for i in l:
    print(i)

HJ27 查找兄弟单词(中等)

#读取输入数据,并且转换为列表
data1 = input().split()
#获取单词的个数
n1 = data1[0]
#按字典排序的第几个兄弟词
n2 = data1[-1]
#获取输入的n个单词
data2 = data1[1:-2]
#获取兄弟词
data3 = data1[-2]
#用于存储兄弟词的数量
n3 = 0
#用于存储兄弟词
data4 = []
for word in data2:
    if word == data3:
        continue
    elif sorted(word) == sorted(data3):
        n3 = n3 + 1
        data4.append(word)
print(n3)
data5 = sorted(data4)#将兄弟词按照字典排序
print(data5[int(n2)-1])

NC37 合并区间

from functools import cmp_to_key
 
class Solution:
    def merge(self , intervals: List[Interval]) -> List[Interval]:
        intervals.sort(key = (lambda x:x.start))
        res = []
        for i in range(len(intervals)):
            if not res:
                res.append(intervals[i])
            else:
                if res[-1].end >= intervals[i].start:
                    res[-1].end = max(res[-1].end,intervals[i].end)
                else:
                    res.append(intervals[i])
        return res

HJ68 成绩排序(较难)

#仅通过30%
import sys
n=int(input())
func=int(input())
arr=[]
d={}
if func==0:
    flag=True
else:
    flag=False
for i in range(n):
    s=input().split(' ')
    s=list(map(str,s))
    #print(s)
    arr.append(s)
   #print(arr)
    arr.sort(key=lambda x:x[1],reverse=flag)
for j in arr:
    print(*j)
    

HJ65 查找两个字符串a,b中的最长公共子串(中等)


a, b = input(), input() # a保存短,b保存长
if len(a) > len(b):
    a, b = b, a
res = ''
for i in range(0, len(a)):#遍历短的字符串
    for j in range(i+1, len(a)):#把短的字符串作为滑动窗口,滑动窗口减小
        if a[i:j+1] in b and j+1-i > len(res):#如果a的子串在b里 并且指针合法
            res = a[i:j+1]
print(res)

JZ4 二维数组中的查找(中等)

NC52 有效括号序列(简单)

class Solution:
    def isValid(self, s: str) -> bool:
        re=False
        dd={'(':')','[':']','?':'?','{':'}'}
        d=['?']
        for i in s:
            if i in dd: #如果是左括号,加入堆栈
                d.append(i) 
            elif dd[d.pop()]!=i:#如果是右括号,且不是栈顶的左括号对应的右括号,返回False
                re=False
                break
            else:#如果是右括号,且是栈顶的左括号对应的右括号,返回False
                re=True
        if len(d)//2==1 :re=False#最后堆栈长度为奇数,没有对应括号
        return re

NC175 合法的括号字符串

#通过50%
class Solution:
    def isValidString(self , s: str) -> bool:
        # write code hereclass Solution:
        re=False
        dd={'(':')','[':']','?':'?','{':'}','*':'*'}
        d=['?']
        for i in s:
            if i in dd:
                if i=='*':d.pop()
                else:d.append(i)
            elif dd[d.pop()]!=i :
                re=False
                break
            else:
                re=True
        if len(d)==1 and d[0]=='?':return True
        elif len(d)//2==1 :re=False#最后堆栈长度为奇数,没有对应括号
        return re

leetcode674. 最长连续递增序列

#通过23/35
class Solution:
    def findLengthOfLCIS(self, nums: List[int]) -> int:
        max=1
        l0=nums[0]
        for i in range(1,len(nums)):
            #i+=1
            #max=1
            print(nums[i])
            if nums[i]>l0:
                max+=1
                l0=nums[i]
            else:return max
        return max

NC17 最长回文子串(简单)

贪心算法
step 1:遍历字符串每个字符。
step 2:以每次遍历到的字符为中心(分奇数长度和偶数长度两种情况),不断向两边扩展。
step 3:如果两边都是相同的就是回文,不断扩大到最大长度即是以这个字符(或偶数两个)为中心的最长回文子串。
step 4:我们比较完每个字符为中心的最长回文子串,取最大值即可。

class Solution:
    def getLongestPalindrome(self , A: str) -> int:
        # write code here
        maxlen=1
        for i in range(len(A)-1):
            maxlen=max(maxlen,max(self.fun(A,i,i),self.fun(A,i,i+1)))
        return maxlen
    def fun(self, s: str, begin: int, end: int) -> int:
        while begin >=0 and end<len(s) and s[begin]==s[end]:
            begin-=1
            end+=1
        return end-begin-1

NC28 最小覆盖子串(较难)

HJ41 称砝码(中等)

n = int(input())
m = list(map(int,input().split()))#各个砝码重量
x = list(map(int,input().split()))#对应数量

amount = []
weights = {0,}
for i in range(n):
    for j in range(x[i]):
        amount.append(m[i])
print(amount)

for i in amount:
    for j in list(weights):
        weights.add(i+j)
        print(list(weights))
print(len(weights))

HJ48 从单向链表中删除指定值的节点(中等)

while True:
    try:
        l = input().split()
        head = l[1]
        rm = l[-1]
        l = l[2:-1]
        res = [head]
        for i in range(0, len(l), 2):
 
            # i = i*2
            # if i>len(l):
            #     break
            a = l[i]
            b = l[i+1]
            res.insert(res.index(b)+1, a)
 
        res.remove(rm)
        print(' '.join(res)+" ")
    except:
        break
avatar
2590 浏览

HJ25 数据分类处理(较难)

while True:
    try:
        a=input().split()[1:]
        b=map(str,sorted(map(int,set(input().split()[1:]))))
        totalNum=0
        res=""
        for num in b:
            singleRes,count="",0
            for i,v in enumerate(a):
                if num in v:
                    singleRes+=str(i)+" "+v+" "
                    totalNum+=2
                    count+=1
            if count:
                singleRes=num+" "+str(count)+" "+singleRes
                totalNum+=2
            res+=singleRes
        print((str(totalNum)+" "+res).rstrip())
 
    except:
        break

HJ29 字符串加解密(中等)

a = input()
a = list(a) #需要加密的字符串
b = input()
b = list(b) #需要解密的字符串
for i in range(len(a)):#加密过程
    if(a[i].isupper()): #如果字符是大写字母
        if(a[i] == 'Z'): #首先如果是Z的话变为a,若z的ascll+1的值是‘{’
            a[i] = 'a'
        else:
            a[i] = a[i].lower() #先变为小写
            c = ord(a[i]) + 1 #ascll码+1
            a[i] = chr(c) #转为字符
    elif(a[i].islower()): #小写同理
        if(a[i] == 'z'):
            a[i] = 'A'
        else:
            a[i] = a[i].upper()
            c = ord(a[i]) + 1
            a[i] = chr(c)
    elif(a[i].isdigit()): #若是数字则+1,9需要单独处理
        if(a[i] == '9'):
            a[i] = '0'
        else:
            a[i] = int(a[i]) + 1
            a[i] = str(a[i])
    else: #若是其他字符则保持不变
        a[i] = a[i]
for i in range(len(b)): #解密过程
    if(b[i].isupper()): #若为大写则先变为小写,再ascll减一,A要单独处理
        if(b[i] == 'A'):
            b[i] = 'z'
        else:
            b[i] = b[i].lower()
            c = ord(b[i]) - 1
            b[i] = chr(c)
    elif(b[i].islower()): #若是小写要先变为大写,再ascll减一,a要单独处理
        if(b[i] == 'a'):
            b[i] = 'Z'
        else:
            b[i] = b[i].upper()
            c = ord(b[i]) - 1
            b[i] = chr(c)
    elif(b[i].isdigit()):#若是数字需要减一,0要单独处理
        if(b[i] == '0'):
            b[i] = '9'
        else:
            b[i] = int(b[i]) - 1
            b[i] = str(b[i])
    else:
        b[i] = b[i]
print(''.join(a)) #按要求输出
print(''.join(b))

leetcode322 零钱兑换(中等)

https://leetcode.cn/problems/coin-change/discussion/

HJ43 迷宫问题(中等)

dfs深度优先本质递归回溯

m, n = list(map(int, input().split()))
maze = []
for _  in range(m):
    maze.append(list(map(int, input().split())))
def walk(i, j, pos=[(0, 0)]):
    if j+1 < n and maze[i][j+1] == 0: # 向右
        if (i, j+1) not in pos:
            walk(i, j+1, pos + [(i, j+1)])
    if j-1 >= 0 and maze[i][j-1] == 0: # 向左
        if (i, j-1) not in pos:
            walk(i, j-1, pos + [(i, j-1)])
    if i+1 < m and maze[i+1][j] == 0: # 向下
        if (i+1, j) not in pos:
            walk(i+1, j, pos + [(i+1, j)])
    if i-1 >= 0 and maze[i-1][j] == 0: # 向上
        if (i-1, j) not in pos:
            walk(i-1, j, pos + [(i-1, j)])
    if (i, j) == (m-1, n-1): # 到达出口
        for p in pos:
            print('(' + str(p[0]) + ',' + str(p[1]) + ')')
                
walk(0, 0)

leetcode200 岛屿问题(中等)

经典题目,深度优先搜索
https://leetcode.cn/problems/number-of-islands/

HJ22 汽水瓶

def f(n):
    if n == 0: return 0
    if n == 1: return 0
    if n >=2: return f(n-2) + 1

while True:
    n=int(input())
    if n != 0:
        print(f(n))
    else:
        break

HJ2 计算某字符出现次数

#通过12/13
a = input().strip()
b=input().split()
#print(a)
re=0

for i in a:
    #print((ord(i)-ord(b[0])))
    #print( (ord(b[0])-ord(i)))
    if i==b[0] or abs(ord(i)-ord(b[0]))==32:
       # print(i)
        re+=1
print(re)
#print(ord('a'),ord('A'))

HJ4 字符串分隔

s=input().strip()
if len(s)<8:
    print(s+('0'*(8-len(s))))
elif len(s)==8:
    print(s)
else:
    #print(int(len(s)//8))
    for i in range(int(len(s)//8)+1):
        #print(i)
        if (len(s)%8)!=0:
            #print((len(s)%8))
            #print(len(s))
            #print(s[8*(i+1):])
            if i<int(len(s)//8):
                print(s[i*8:8*(i+1)])
            elif i==(len(s)//8):
                print(s[8*(i):]+('0'*(8-(len(s)%8))))
        else:
            print(s[i*8:8*(i+1)])

HJ108 求最小公倍数

#通过7/12
a,b=list(map(int, input().split()))
if a < b:
    a,b=b,a
for i in range(b):
   # print('x',i)
    if (a*(i+1))%b==0:
        print(a*(i+1))

HJ6 质数因子

import math
n = int(input())
for i in range(2, int(math.sqrt(n))+1):#sqrt ()函数返回x的平方根 (x > 0)
    while n % i == 0:
        print(i, end=' ')
        n = n // i
if n > 2:
    print(n)

将数组分成和相等的多个子数组,求子数组的最大个数

一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1;
{3,6}{2,4,3} m=2
{3,3}{2,4}{6} m=3 所以m的最大值为3
https://developer.aliyun.com/article/387843

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值