鱼C论坛

 找回密码
 立即注册
查看: 5098|回复: 47

[已解决]Python:每日一题 348

[复制链接]
发表于 2020-3-10 13:28:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
今天的题目:


在一个整数数组中,“峰” 是大于或等于相邻整数的元素,“谷” 是小于或等于相邻整数的元素。

例如,在数组 [5, 8, 6, 2, 3, 4, 6] 中,[8, 6] 是峰,[5, 2] 是谷。

给定一个整数数组,将该数组按峰与谷的交替顺序排序。

示例:

输入:[5, 3, 1, 2, 3]
输出:[5, 1, 3, 2, 3]


欢迎大家一起答题!
最佳答案
2020-3-10 17:00:47
不知道是不是这个意思
def fun348(lst):
    result=[]
    lst.sort()
    length=len(lst)//2
    Min,Max=lst[:length],lst[length:2*length]
    for i,j in zip(Max,Min):
        result.extend([i,j])
    if len(lst)%2:
        result.append(lst[-1])
    return result

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-10 13:50:20 | 显示全部楼层
本帖最后由 TJBEST 于 2020-3-10 13:54 编辑

先是谷也可以吗?第一个必须是峰?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 13:52:15 | 显示全部楼层
能不能给多点示例
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 13:56:41 | 显示全部楼层
次序 “ 峰---谷---峰---谷---” 这样对吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 14:02:01 | 显示全部楼层
本帖最后由 flamezyy 于 2020-3-10 15:30 编辑
def f348(arr):
    result = []
    arr.sort()
    i = 0
    length = len(arr)
    if length % 2 == 0:  
        while(2*i+2 <= length):
            result.extend([arr[-1-i],arr[i]])
            i += 1
    else:
        while(2*i+3 <= length):
            result.extend([arr[-1-i],arr[i]])
            i += 1
        result.append(arr[i])
    return result

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 14:03:03 | 显示全部楼层
本帖最后由 kinkon 于 2020-3-10 14:13 编辑

是不是这个意思?
def f348(lst):
    for i in range(1, len(lst)):
        if i % 2:
            if lst[i] > lst[i-1]:
                tmp = lst[i]
                lst[i] = lst[i-1]
                lst[i-1] = tmp
        else:
            if lst[i] < lst[i-1]:
                tmp = lst[i]
                lst[i] = lst[i-1]
                lst[i-1] = tmp

    return lst 

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 14:04:05 | 显示全部楼层
算了 不管了 这题目交代的本身就不清楚 随便写一个完了 对了就对了,错了就错了。
def fun348(arr):
    temp = sorted(arr)
    temp.sort(reverse = True)
    result = []
    M = len(temp)
    div = M // 2
    res = M % 2
    for index in range(0,div):
        result.append(temp[index])
        result.append(temp[M-1-index])
    if res == 1:
        result.append(temp[div])
    return result

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
zltzlt + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-3-10 14:43:00 | 显示全部楼层
from matplotlib.cbook import flatten
def f348(s:list)->list:
    s1,s2=sorted(s)[:int(len(s)/2)],sorted(s)[int(len(s)/2):]
    return list(flatten(zip(s2,s1)))+[s2[-1]] if len(s)%2!=0 else list(flatten(zip(s2,s1)))
              
print(f348([5, 3, 1, 2, 3]))

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
zltzlt + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 15:00:04 | 显示全部楼层
本帖最后由 l0stparadise 于 2020-3-10 15:24 编辑
def f348(list1):
    list1.sort(reverse=True)
    new_list=[]
    lenth=len(list1)
    if lenth%2:
        for i in range(len(list1)):
            if i ==len(list1)//2+1:
                break
            new_list.append(list1[i])
            if i ==len(list1)//2:
                break
            new_list.append(list1[-(i+1)])
        return new_list
    else:
        for i in range(len(list1)):
            if i ==len(list1)//2:
                break
            new_list.append(list1[i])
            new_list.append(list1[-(i+1)])
        return new_list

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 15:09:22 | 显示全部楼层
本帖最后由 Geoffreylee 于 2020-3-10 15:23 编辑
def f_348(lst: list):
    lst.sort(reverse=True)  # 将数组从大到小排序
    # 将排序后的数组对半切分,寻找切分位置的下标
    slice_index = len(lst) // 2 if len(lst) % 2 == 0 else len(lst)//2+1 
    peak_valley = [0] * len(lst)            # 创建一个长度与原数组一样的列表
    peak_valley[0::2] = lst[:slice_index]   # 奇数位插入峰值 
    peak_valley[1::2] = lst[slice_index:]   # 偶数位插入谷值
    return peak_valley

print(f_348([5, 8, 6, 2, 3, 4, 6]))

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 15:12:36 | 显示全部楼层
a = [5, 3, 1, 2, 3, 4, 7]
a0 = a[:]
a0.sort()
L = len(a)
b = []
if L % 2 == 0:
    for i in range(0, L//2):
        b.append(a0[L - 1 - i])
        b.append(a0[i])
if L % 2 != 0:
    b.append(a0[L - 1])
    for i in range(0, L//2):
        b.append(a0[i])
        b.append(a0[L - 2 - i])
print(b)
小白无脑程序,见笑了

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
zltzlt + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 15:16:34 | 显示全部楼层

A:
输入:[3,5,2,1,6,4]
输出:[3,5,1,6,2,4]

B:
输入:[1,2,3]
输出:[1,3,2]

C:
输入:[3,2,1]
输出:[2,3,1]

D:
输入:[1,2,3,4]
输出:[1,3,2,4]

E:
输入:[1,2,4,3]
输出:[1,4,2,3]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 15:36:15 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-3-10 15:48 编辑
class Solution:
    def wiggleSort(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        flag=0
        for i in range(1,len(nums)):
            if (flag and nums[i - 1] > nums[i]) or (not flag and nums[i - 1] < nums[i]):
                nums[i],nums[i - 1]=nums[i - 1],nums[i]
            flag^=1
总感觉做过这道题?
而且我貌似和题解中用的同一种算法

看的执行最快的答案,又改了一下

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 15:49:16 | 显示全部楼层
kinkon 发表于 2020-3-10 14:03
是不是这个意思?

是的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 16:31:43 | 显示全部楼层

想不到位运算符还能这么用,学习了...貌似你的没 return
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 16:38:01 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-3-10 15:16
A:
输入:[3,5,2,1,6,4]
输出:[3,5,1,6,2,4]

它这个题目是先锋后谷还是先谷后峰哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 16:42:32 | 显示全部楼层
另外对于[5, 3, 1, 2, 3]
[5,2,3,1,3]是不是也是答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-10 16:43:59 | 显示全部楼层
fan1993423 发表于 2020-3-10 16:42
另外对于[5, 3, 1, 2, 3]
[5,2,3,1,3]是不是也是答案

是的,符合条件就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 17:00:47 | 显示全部楼层    本楼为最佳答案   
不知道是不是这个意思
def fun348(lst):
    result=[]
    lst.sort()
    length=len(lst)//2
    Min,Max=lst[:length],lst[length:2*length]
    for i,j in zip(Max,Min):
        result.extend([i,j])
    if len(lst)%2:
        result.append(lst[-1])
    return result

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 17:46:38 | 显示全部楼层
def f348(x):
    x.sort()
    r=[]
    i=-1
    while len(x)>1:
        r.append(x.pop(i))
        i=-1-i%2 
    return r+x

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 16:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表