鱼C论坛

 找回密码
 立即注册
查看: 2947|回复: 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
不知道是不是这个意思
  1. def fun348(lst):
  2.     result=[]
  3.     lst.sort()
  4.     length=len(lst)//2
  5.     Min,Max=lst[:length],lst[length:2*length]
  6.     for i,j in zip(Max,Min):
  7.         result.extend([i,j])
  8.     if len(lst)%2:
  9.         result.append(lst[-1])
  10.     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 编辑
  1. def f348(arr):
  2.     result = []
  3.     arr.sort()
  4.     i = 0
  5.     length = len(arr)
  6.     if length % 2 == 0:  
  7.         while(2*i+2 <= length):
  8.             result.extend([arr[-1-i],arr[i]])
  9.             i += 1
  10.     else:
  11.         while(2*i+3 <= length):
  12.             result.extend([arr[-1-i],arr[i]])
  13.             i += 1
  14.         result.append(arr[i])
  15.     return result
复制代码

评分

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

查看全部评分

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

使用道具 举报

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

是不是这个意思?
  1. def f348(lst):
  2.     for i in range(1, len(lst)):
  3.         if i % 2:
  4.             if lst[i] > lst[i-1]:
  5.                 tmp = lst[i]
  6.                 lst[i] = lst[i-1]
  7.                 lst[i-1] = tmp
  8.         else:
  9.             if lst[i] < lst[i-1]:
  10.                 tmp = lst[i]
  11.                 lst[i] = lst[i-1]
  12.                 lst[i-1] = tmp

  13.     return lst
复制代码

评分

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

查看全部评分

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

使用道具 举报

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

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-10 14:43:00 | 显示全部楼层
  1. from matplotlib.cbook import flatten
  2. def f348(s:list)->list:
  3.     s1,s2=sorted(s)[:int(len(s)/2)],sorted(s)[int(len(s)/2):]
  4.     return list(flatten(zip(s2,s1)))+[s2[-1]] if len(s)%2!=0 else list(flatten(zip(s2,s1)))
  5.               
  6. 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 编辑
  1. def f348(list1):
  2.     list1.sort(reverse=True)
  3.     new_list=[]
  4.     lenth=len(list1)
  5.     if lenth%2:
  6.         for i in range(len(list1)):
  7.             if i ==len(list1)//2+1:
  8.                 break
  9.             new_list.append(list1[i])
  10.             if i ==len(list1)//2:
  11.                 break
  12.             new_list.append(list1[-(i+1)])
  13.         return new_list
  14.     else:
  15.         for i in range(len(list1)):
  16.             if i ==len(list1)//2:
  17.                 break
  18.             new_list.append(list1[i])
  19.             new_list.append(list1[-(i+1)])
  20.         return new_list
复制代码

评分

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

查看全部评分

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

使用道具 举报

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

  9. print(f_348([5, 8, 6, 2, 3, 4, 6]))
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-10 15:12:36 | 显示全部楼层
  1. a = [5, 3, 1, 2, 3, 4, 7]
  2. a0 = a[:]
  3. a0.sort()
  4. L = len(a)
  5. b = []
  6. if L % 2 == 0:
  7.     for i in range(0, L//2):
  8.         b.append(a0[L - 1 - i])
  9.         b.append(a0[i])
  10. if L % 2 != 0:
  11.     b.append(a0[L - 1])
  12.     for i in range(0, L//2):
  13.         b.append(a0[i])
  14.         b.append(a0[L - 2 - i])
  15. 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 编辑
  1. class Solution:
  2.     def wiggleSort(self, nums: List[int]) -> None:
  3.         """
  4.         Do not return anything, modify nums in-place instead.
  5.         """
  6.         flag=0
  7.         for i in range(1,len(nums)):
  8.             if (flag and nums[i - 1] > nums[i]) or (not flag and nums[i - 1] < nums[i]):
  9.                 nums[i],nums[i - 1]=nums[i - 1],nums[i]
  10.             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 | 显示全部楼层    本楼为最佳答案   
不知道是不是这个意思
  1. def fun348(lst):
  2.     result=[]
  3.     lst.sort()
  4.     length=len(lst)//2
  5.     Min,Max=lst[:length],lst[length:2*length]
  6.     for i,j in zip(Max,Min):
  7.         result.extend([i,j])
  8.     if len(lst)%2:
  9.         result.append(lst[-1])
  10.     return result
复制代码

评分

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

查看全部评分

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

使用道具 举报

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

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 20:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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