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