zoukankan      html  css  js  c++  java
  • 506. 相对名次『简单』

    题目来源于力扣(LeetCode

    一、题目

    506. 相对名次

    说明:

    • N 是一个正整数并且不会超过 10000。
    • 所有运动员的成绩都不相同。

    二、解题思路

    1. 通过创建哈希数组方式,在哈希数组的对应索引上记录下 nums 数组中元素是否出现

    2. 倒序遍历哈希数组,同时定义变量 j 用于记录排名(从 1 开始)

    3. 前 3 名与前 3 名之前的分开操作

    4. 前 3 名需要判断是第 1,第 2 或第 3 名,再记录相应的字符串结果表示

    5. 前 3 名之后的排名只需要记录变量 j(即排名)

    三、代码实现

    public static String[] findRelativeRanks(int[] nums) {
        // 创建与 nums 数组长度相同的 String 数组,用于返回结果
        String[] strs = new String[nums.length];
    
        int maxNum = nums[0];
        // 找到 nums 数组中的最大值
        for (int i : nums) {
            maxNum = Math.max(maxNum, i);
        }
        // 创建哈希映射数组
        int[] bucket = new int[maxNum + 1];
        // 遍历 nums 数组,bucket 索引为 nums 元素,索引上的值为是否出现的标志
        for (int i : nums) {
            bucket[i] = 1;
        }
        // 变量 j 定义名次
        int j = 1;
        // 在 bucket 数组中对出现的元素进行排序,从 1 开始
        for (int i = bucket.length - 1; i >= 0; i--) {
            if (bucket[i] > 0) {
                bucket[i] = j++;
            }
        }
        // 遍历 nums 数组,根据元素值在 bucket 数组中取值,数值即为名次
        for (int i = 0; i < nums.length; i++) {
            int k = bucket[nums[i]];
            if (k > 3) {
                // 前 3 名之后的直接赋值名次
                strs[i] = Integer.toString(k);
            } else {
                // 前 3 名需要单独赋值特殊字符串
                if (k == 1) {
                    strs[i] = "Gold Medal";
                } else if (k == 2) {
                    strs[i] = "Silver Medal";
                } else {
                    strs[i] = "Bronze Medal";
                }
            }
        }
        return strs;
    }
    

    四、执行用时

    五、部分测试用例

    public static void main(String[] args) {
        int[] nums = {5, 4, 3, 2, 1};
        // output:{"Gold Medal", "Silver Medal", "Bronze Medal", "4", "5"}
        String[] result = findRelativeRanks(nums);
        System.out.println(Arrays.toString(result));
    }
    
  • 相关阅读:
    编译原理语法分析程序(最左推导)
    剑指offer:02
    剑指offer:01二维数组中的查找
    pthread编译选项(命令行,codeblocks)
    学习apue的pthread synchronize之condition variables
    pthreads之joinable和detach函数
    c++指针空间大小的决定因素
    2.3.1引用
    2.2.1变量定义
    扫描PDF417崩溃的原因找到:手机摄像头分辨率低
  • 原文地址:https://www.cnblogs.com/zhiyin1209/p/12906754.html
Copyright © 2011-2022 走看看