HackerRank Piling Up!

2024-01-11 06:18
文章标签 hackerrank piling

本文主要是介绍HackerRank Piling Up!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

###题意:多组输入一个n个数字,灭个数字代表正方体的边长,要求每次从这给定的n个正方体中的最左边或者最右边拿一个正方体放置将他们摞起来,要保证下面的正方体时钟比上面的大。

###思路:题目告诉要每次从最左或者最右拿,那么我们用两个指针分别指向列表头和列表尾部,每次从头和尾两个中选取一个大的,若选中的头则头指针+1,若选中的尾尾指针-1,当然每次应该将选出来的与当前已经摞好的最小值比较若大于最小值结束游戏,否则直到选取结束即可,有点像快排的思想但实际不是快排,毕竟不用交换没有涉及到递归,比较简单。(唉!学了一个月python了感觉写代码总是跟写c++代码一样,没有体现出python代码的短小精悍,难受继续努力)

if __name__ in '__main__':t = int(input())for i in range(0, t):n = int(input())lst = list(map(int, input().split()))l = 0r = len(lst) - 1minn = max(lst[0], lst[r])find = 0for i in lst:if lst[l] > lst[r]:if lst[l] > minn:find = 1breakminn = min(minn, lst[l])l += 1else:if lst[r] > minn:find = 1breakminn = min(minn, lst[r])r -= 1if find == 0:print("Yes")elif find == 1:print("No")

###下面和上面思路差不多,但是比较短:

if __name__ in '__main__':t = int(input())for i in range(0, t):n = int(input())lst = list(map(int, input().split()))min_index = lst.index(min(lst))left = lst[ : min_index]right = lst[min_index : ]if left == sorted(left, reverse = True) and right == sorted(right, reverse = False):print("Yes")else:print("No")

这篇关于HackerRank Piling Up!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/593413

相关文章

HackerRank Triangle Quest 2

###给你一个正整数n,例如n=5,则输出: 1121123211234321123454321 ###思路:这就是1,11,111,1111...的平方,题目不让用字符串做,或者代码不能超过一行见代码: for i in range(1,int(input())+1): #More than 2 lines will result in 0 score. Do not le

HackerRank Compress the String!

###题意:给你一个由数字组成的串,输出每段连续出现的字符,及其出现次数,最少出现次数可以是1次 ###思路:记录第一次出现下标,每次将当前的和之前一个字符比较看是否一样,一样+1,不一样初始化为1.(这里还是沿用c++的思路,所以代码比较长),见代码: if __name__ in '__main__':str = input()#由于有重复的键不能申请dict,目前能想到的只有list#l

hackerrank Project Euler #210: Obtuse Angled Triangles

传送门 做出一个好几个星期屯下来的题目的感觉就是一个字: 爽! 上图的黄点部分就是我们需要求的点 两边的部分很好算 求圆的地方有一个优化,由于圆心是整数点,我们可以把圆分为下面几个部分,阴影部分最难算,最后乘就好了 代码如下所示 #include <bits/stdc++.h>using namespace std;const int MAXN = 2005;const int INF