一.石头
题目描述:
沙滩按照线型摆放着n个大小不一的球形石头,已知第i个石头的半径为ri,且不存在两个石头有相同的半径。为了使石头的摆放更加美观,现要求摆放的石头的半径从左往右依次递增。因此,需要对一些石头进行移动,每次操作可以选择一个石头,并把它放在剩下n−1个石头在最左边或最右边。问最少需要操作多少次才能将这n个石头的半径变成升序?
输入描述
第一行一个整数n,表示石头的个数。(1 <= n <= 100000) 第二行n个整数,表示从左往右石头的半径r1,r2,...,rn。(1 <= ri <= n),且保证不存在两个不同的石头拥有相同的半径。
输出描述
最少操作次数
样例输入
5
4 1 2 5 3
样例输出
2
通过了73%
cd = int(input())
cc = list(map(int,input().split()))
def lengthOfLIS(nums):
ls=sorted(nums)
stack=[]
res=[]
for i in ls:
cur=nums.index(i)
if not stack:
stack.append(cur)
else:
if cur>stack[-1]:
stack.append(cur)
else:
res.append(len(stack))
stack=[cur]
return max(res)
print(cd-lengthOfLIS(cc))二.01交替
题目描述:
给你一个长度为n的01串。现在想让你找出最长的01交替子串(子串可以不连续)比如:1010,0101是01交替的串,1101则不是。现在你可以把某一个连续的区间进行翻转,即0变1,1变0。问修改之后的最大01交替子串的长度是多少。
输入描述
输入第一行包含一个整数n (1 <= n <= 100000) 表示01串的长度。 第二行包含一个01串。
输出描述
输出一个数表示符合题意的子串长度
样例输入
8
10000011
样例输出
5
AC
n = int(input())
arr = input()
cnt = 1
for i in range(n-1):
if arr[i] != arr[i+1]:
cnt += 1
if cnt < n-1:
print(cnt+2)
else:
print(n)
京公网安备 11010502036488号