力扣刷题记录——496. 下一个更大元素 I、500. 键盘行、506. 相对名次

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

本专栏主要记录力扣的刷题记录备战蓝桥杯供复盘和优化算法使用也希望给大家带来帮助博主是算法小白希望各位大佬不要见笑今天要分享的是——《496. 下一个更大元素 I、500. 键盘行、506. 相对名次》。

目录

496. 下一个更大元素 I

        题目描述

        解题思路

        解题代码

500. 键盘行

        题目描述

        解题思路

        解题代码

506. 相对名次

        题目描述

        解题思路

        解题代码


496. 下一个更大元素 I

题目描述

 

nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。

给你两个 没有重复元素 的数组 nums1 和 nums2 下标从 0 开始计数其中nums1 是 nums2 的子集。

对于每个 0 <= i < nums1.length 找出满足 nums1[i] == nums2[j] 的下标 j 并且在 nums2 确定 nums2[j] 的 下一个更大元素 。如果不存在下一个更大元素那么本次查询的答案是 -1 。

返回一个长度为 nums1.length 的数组 ans 作为答案满足 ans[i] 是如上所述的 下一个更大元素 。

示例 1

输入nums1 = [4,1,2], nums2 = [1,3,4,2].
输出[-1,3,-1]
解释nums1 中每个值的下一个更大元素如下所述
- 4 用加粗斜体标识nums2 = [1,3,4,2]。不存在下一个更大元素所以答案是 -1 。
- 1 用加粗斜体标识nums2 = [1,3,4,2]。下一个更大元素是 3 。
- 2 用加粗斜体标识nums2 = [1,3,4,2]。不存在下一个更大元素所以答案是 -1 。

示例 2

输入nums1 = [2,4], nums2 = [1,2,3,4].
输出[3,-1]
解释nums1 中每个值的下一个更大元素如下所述
- 2 用加粗斜体标识nums2 = [1,2,3,4]。下一个更大元素是 3 。
- 4 用加粗斜体标识nums2 = [1,2,3,4]。不存在下一个更大元素所以答案是 -1 。

解题思路

遍历整个num1取出num1中每一个元素i以i的索引将nums2分割在分割完的列表中找出第一个比i大的元素如果没有找到那么返回-1。

解题代码

def nextGreaterElement(nums1,nums2):
    fin_list = []
    for i in nums1:
        for j in nums2[nums2.index(i)::]:
            if j > i :
                fin_list.append(j)
                break
            elif nums2.index(j) == len(nums2)-1:
                fin_list.append(-1)
    return fin_list

500. 键盘行

题目描述

给你一个字符串数组 words 只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。

美式键盘 中

  • 第一行由字符 "qwertyuiop" 组成。
  • 第二行由字符 "asdfghjkl" 组成。
  • 第三行由字符 "zxcvbnm" 组成。

示例 1

输入words = ["Hello","Alaska","Dad","Peace"]
输出["Alaska","Dad"]

示例 2

输入words = ["omk"]
输出[]

示例 3

输入words = ["adsdf","sfd"]
输出["adsdf","sfd"]

 

解题思路

首先遍历整个words根据word的第一个字母判断是哪一行构成的然后遍历word如果有一个不在目标行的话那么直接退出如果到最后一个了说明全部在目标杭那么把它添加到目标列表中最终返回这个目标列表。

解题代码

def findWords(words):
    str_1 = "qwertyuiopQWERTYUIOP"
    str_2 = "asdfghjklASDFGHJKL"
    str_3 = "zxcvbnmZXCVBNM"
    fin_target = []
    for word in words:
        first = word[0]
        if first in str_1:
            target_str = str_1
        elif first in str_2:
            target_str = str_2
        else:
            target_str = str_3
        for i in range(0,len(word)):
            if word[i] not in target_str:
                break
            # 已经到最后一个了
            if i == len(word)-1:
                fin_target.append(word)
    return fin_target

506. 相对名次

题目描述

给你一个长度为 n 的整数数组 score 其中 score[i] 是第 i 位运动员在比赛中的得分。所有得分都 互不相同 。

运动员将根据得分 决定名次 其中名次第 1 的运动员得分最高名次第 2 的运动员得分第 2 高依此类推。运动员的名次决定了他们的获奖情况

  • 名次第 1 的运动员获金牌 "Gold Medal" 。
  • 名次第 2 的运动员获银牌 "Silver Medal" 。
  • 名次第 3 的运动员获铜牌 "Bronze Medal" 。
  • 从名次第 4 到第 n 的运动员只能获得他们的名次编号即名次第 x 的运动员获得编号 "x"

使用长度为 n 的数组 answer 返回获奖其中 answer[i] 是第 i 位运动员的获奖情况。

示例 1

输入score = [5,4,3,2,1]
输出["Gold Medal","Silver Medal","Bronze Medal","4","5"]
解释名次为 [1st, 2nd, 3rd, 4th, 5th] 。

示例 2

输入score = [10,3,8,9,4]
输出["Gold Medal","5","Bronze Medal","Silver Medal","4"]
解释名次为 [1st, 5th, 3rd, 2nd, 4th] 。

解题思路

首先想到的是字典字典的查询速度非常快用列表排序的方式将键和值关联起来再利用切片对列表拷贝一份用拷贝之后的列表遍历查询字典中的值将查询到的值添加到目标列表中最后将目标列表返回。

解题代码

def findRelativeRanks(score):
    score_copy = score[::]
    fin_score = []
    fin_dic = {}
    result = []
    score.sort(reverse=-1)
    for i in range(1,len(score)+1):
        if i == 1:
            fin_score.append("Gold Medal")
        elif i == 2:
            fin_score.append("Silver Medal")
        elif i == 3:
            fin_score.append("Bronze Medal")
        else:
            fin_score.append(str(i))
    for i in range(0,len(score)):
        fin_dic[score[i]] = fin_score[i]
    for i in score_copy:
        result.append(fin_dic[i])
    return result

 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6