zoukankan      html  css  js  c++  java
  • python实现:输出整数数组前半段非递减、后半段非递增并且从小到大不重复打印数字

    字节跳动算法第一题

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

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

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

    参考大佬的解题思路

    原文链接:https://blog.csdn.net/weixin_42521211/article/details/89101219

    我的python代码

     1 class Solution():
     2     def print_sort_arr(self,lst):
     3         left = 0
     4         right = len(lst)-1
     5         # 先比较一下最左边和最右边确定第一个打印的
     6         if lst[left]<= lst[right]:
     7             tmp = lst[left]
     8         else:
     9             tmp = lst[right]
    10         print(tmp)
    11         # tmp记录刚打印的那个值,如果要打印的值和刚打印的值相同则不打印,否则打印
    12         while left <= right:
    13             if lst[left]<=lst[right]:
    14                 if lst[left] != tmp:
    15                     print(lst[left])
    16                     tmp = lst[left]
    17                 left += 1
    18             else:
    19                 if lst[right] != tmp:
    20                     print(lst[right])
    21                     tmp = lst[right]
    22                 right -= 1
    23 
    24 if __name__ == '__main__':
    25     s = Solution()
    26     s.print_sort_arr([1,1,1,2,3,4,9,10,9,5,4,3,2,2,2])
  • 相关阅读:
    hdu 1009 贪心算法
    hdu10007
    HDU1005 数列找规律
    HDU1004 (数组元素出现最多)
    HDU1003 dp 动态规划解析
    活字格Web应用平台学习笔记4
    活字格学习
    活字格Web应用平台学习笔记3-显示数据列表
    活字格Web应用平台学习笔记2-基础教程-开始
    活字格Web应用平台学习笔记1
  • 原文地址:https://www.cnblogs.com/shuangcao/p/13345775.html
Copyright © 2011-2022 走看看