python实现:输出整数数组前半段非递减、后半段非递增并且从小到大不重复打印数字

问题

        给定一个正整数数组,前半段非递减、后半段非递增,要求从小到大不重复打印数字。给定时间复杂度O(n),空间复杂度O(1) 


解题思路

        分析:这道题,可以理解为合并两个有序数组,并且合并后的数组中,无相等的元素即可。基于时间复杂度和空间复杂度的要求,用双指针实现,即可达到目标。

        ”正整数数组,前半段非递减、后半段非递增”。也就是说,前半段从小到大,后半段从大到小。一个不恰当的比喻就是金字塔状。中间大,两边小。因此,开始和结尾各设置一个变量(指针),分别为left和right,指向第一个元素和最后一个元素,然后比较对应位置处的元素对象,并且比较的较小的元素,当前位置邻近的元素不相等,即可输出,下标变化。注意:最后的一个元素输出。


python实现代码

'''
给定一个正整数数组,前半段非递减、后半段非递增,要求从小到大不重复打印数字。给定时间复杂度O(n),空间复杂度O(1) 
'''
def printSortArr(numArr):
    right = len(numArr)-1
    left = 0
    while left <= right:
        if numArr[left]<numArr[right] and numArr[left] < numArr[left+1]:  # 左侧不重复输出
            print(numArr[left])
            left += 1
        elif numArr[left] < numArr[right] and numArr[left] == numArr[left+1]: 
            left += 1
        elif numArr[left] > numArr[right]  and numArr[right] < numArr[right-1]: # 右侧不重复输出
            print(numArr[right])
            right -=1
        elif numArr[left] > numArr[right]  and numArr[right] == numArr[right-1]: 
            right -=1
        else:
            left += 1 
    print(numArr[right])  # 输出最后一个标记元素
        

'''
主程序
'''
numArr = [1,1,1,2,3,4,9,10,9,5,4,3,2,2,2]
# numArr = [1,4,3,2,2]
printSortArr(numArr)

程序测试输出结果:

发布了68 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42521211/article/details/89101219