爽歪歪666
不以物喜,不以己悲,努力才是永恒的主题。

字节跳动算法第一题

给定一个正整数数组,前半段非递减、后半段非递增,要求从小到大不重复打印数字。给定时间复杂度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])

 

posted on 2020-07-20 16:25  爽歪歪666  阅读(419)  评论(0编辑  收藏  举报