2020-12-30

写一个博客

在刷题网站找了一个感兴趣的编程题目,简化了题目。
题目的数学描述:给定一个一维的有限长度的序列,寻找出序列中的严格极大值点(在此,严格极大值点定义为:序列中的一个数要比距离它1个位置的数都要严格大)。
程序语言描述:给定一个一维矩阵1×n尺寸,1 ≤ n ≤ 100 ,寻找矩阵中比邻居都严格大的点。返回一个同样大小的矩阵,如果一个数比邻居都严格大,则改位置记1,否则记0
样例 输入input 1 2 2,输出output 0 0 0;
输入input 1 2 3,输出output 0 0 1;
输入input 3 9 5,输出output 0 1 0;
输入input 6,4,4,5,输出output 1,0,0,1;
使用Python工具算了一下。
前面几行,使用随机数构造输入序列(矩阵),后面就开始计算,输出测测结果。

#Python3,手机在浏览器线上编写
#网站"陆陆的小破站"

import random

print('hello world')

b=list(range(1,5)) # 更改以试验不同的测试数据

c=[ random.randint(-9,9)  for i in b]
# 构造一维有限整数序列(也就是输入input)

#c =  [random.randint(-9,9)]*3+[5]
#print(c)  # 构造一些特殊序列测试算法(方法)

#print('the value of b',b)

#print('the value of c',c)

# 下面开始计算输出output

a = len(c)

i = 0

d = [0 for i in range(0,a)]

if a==1 :
    
    d[0] = 1 
    
if a>1:
    
    for i in range(0,a):
        
        if i==0 and c[i]>c[i+1] or i==a-1 and c[i]>c[i-1] or (i>0 and i<a-1 and c[i]>c[i-1] and c[i]>c[i+1]): 

            d[i] = 1

print('input :',c)

print('output:',d)


测试用例

# 1*1的矩阵不论输入什么,我这里输出都定义为1
c = [random.randint(-9,9)]  
# 1*2矩阵
c = [random.randint(-9,9)]*2 # 输出0 0  
c = [-9,9] #输出0 1
c = [7, 9] #输出0 1
c = [-9,-4] #输出1 0
c = [7, -9] #输出1 0
#1*3矩阵
c = [random.randint(-9,9)]*3 #输出0 0 0
c = [random.randint(-9,9)]*2+[-10] #输出0 0 0
c = [-10]+[random.randint(-9,9)] #输出0 0 0
c = [random.randint(-9,9)]*2+[11] #输出0 0 1
c = [10]+[random.randint(-9,9)] #输出1 0 0
t = [random.randint(-9,9)]
c = t.append(10) #输出0 1 0
c = t.append(-11) #输出1 0 1

对数学的解题和研究,基于输出(结果序列)的观察,我得到一些猜测:(在数学上,序列的位置从1开始计算)
1.任意一个极大值点(1),它两侧必定不是极大值点;
2.严格增序列和严格减序列都只有一个极大值点,两种序列的极大值点分别是在序列最后一个数字,第一个数字;
3.任意两个极大值点在序列中的位置的差最小是2(中间隔着一个数);
4.一个长度为n的序列,n为偶数时,序列最多有n/2个极大值点,并且此时极大值点都在奇数位置上或者偶数位置上,其他位置都不是极大值点。n是奇数的时候,序列最多有(n+1)/2个极大值点,并且此时极大值点都在序列的奇数位置上。

博客结束

你可能感兴趣的:(笔记)