(Google)谷歌笔试算法题:要求相邻的两个数都不小于或者不大于其自己的排序

2021年11月22日 阅读数:2
这篇文章主要向大家介绍(Google)谷歌笔试算法题:要求相邻的两个数都不小于或者不大于其自己的排序,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

如题,要求相邻的两个数都不小于或者不大于其自己的排序, 那么也就是说每一个数字必须同时大于等于或者小于等于它左右两边的数字,例如   3>=2<=6,那么这里2就是同时同于等于3且小于等于6,那么若是多来点数据就是    3>=2<=6>=5<=10>=2<=6python

题目描述可能自己比较模糊,咱们举例来看:算法

一组数据,好比已经排序好了(排序好的数据看着比较方便)app

1,2,3,4,5,6,7ide

咱们如今须要变成每一个数字都大于等于或者小于等于它相邻的两个数函数

1 <= 3 >= 2 <= 5> =4 < =7 >= 6        code

如今排序的方法有不少,咱们能够先求出中位数,而后开始补,也能够先排序,而后倒数第二和倒数第一换位等等,可是这些都是须要先排序,而这里咱们用一种一次排好的方法,即O(n),blog

上图:排序

(Google)谷歌笔试算法题:要求相邻的两个数都不小于或者不大于其自己的排序_python

看清楚了吗?咱们这里一次排序,直接写入列表,由于全部数字他不是 不小于 就是 不大于utf-8

先把1 写入,input

而后写入2,

而后写入3,这时候不知足条件了交换2和3的位置

而后写入4,

而后写入5,交换

写入6........

这里由于我用的是已经排好序的例子,其实你们能够想一下,乱序的也无所谓,只要知足条件,直接排序,没有影响

上代码:

#!D:/workplace/python
# -*- coding: utf-8 -*-
# @File  : 大小大小排序.py
# @Author: WangYe
# @Date  : 2019/5/21
# @Software: PyCharm

in_data = input()
data = in_data.split(',')
out = []   #输出列表

def compare(num1,num2):  #比较函数
    if num1 > num2:
        return 0
    if num1 < num2:
        return 1
    if num1 == num2:
        return 2

for k in range(len(data)):

    if (k - 1) < 0:  #存入首位
        out.append(int(data[0]))
    else:
        num1 = int(data[k-1])
        num2 = int(data[k])

        if (k%2) == 0:                    #区分基数仍是偶数,也其实就是为了相邻的符号判断不一样而已
            if compare(num1,num2) == 1:
                out.append(num2)
                out[k-1],out[k] = out[k],out[k-1]   #元素交换
            else:
                out.append(num2)
        else:
            if compare(num1, num2) == 0:
                out.append(num2)

                out[k - 1], out[k] = out[k], out[k - 1]  # 元素交换
            else:
                out.append(num2)

print(out)

截图:

(Google)谷歌笔试算法题:要求相邻的两个数都不小于或者不大于其自己的排序_数据_02

或者乱序的

(Google)谷歌笔试算法题:要求相邻的两个数都不小于或者不大于其自己的排序_中位数_03

再来几个或者等于号的

(Google)谷歌笔试算法题:要求相邻的两个数都不小于或者不大于其自己的排序_python_04

ok,大功告成