LeetCode 1446. 连续字符 / 506. 相对名次 / 1005. K 次取反后最大化的数组和

Posted Zephyr丶J

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1446. 连续字符 / 506. 相对名次 / 1005. K 次取反后最大化的数组和相关的知识,希望对你有一定的参考价值。

1446. 连续字符

2021.12.1 每日一题,又是新的一月

题目描述

给你一个字符串 s ,字符串的「能量」定义为:只包含一种字符的最长非空子字符串的长度。

请你返回字符串的能量。

示例 1:

输入:s = “leetcode”
输出:2
解释:子字符串 “ee” 长度为 2 ,只包含字符 ‘e’ 。

示例 2:

输入:s = “abbcccddddeeeeedcba”
输出:5
解释:子字符串 “eeeee” 长度为 5 ,只包含字符 ‘e’ 。

示例 3:

输入:s = “triplepillooooow”
输出:5

示例 4:

输入:s = “hooraaaaaaaaaaay”
输出:11

示例 5:

输入:s = “tourist”
输出:1

提示:

1 <= s.length <= 500
s 只包含小写英文字母。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/consecutive-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

class Solution 
    public int maxPower(String s) 
        int l = s.length();
        int count = 1;
        int max = 1;
        for(int i = 1; i < l; i++)
            if(s.charAt(i) == s.charAt(i - 1))
                count++;
                max = Math.max(count, max);
            else
                count = 1;
            
        
        return max;
    

506. 相对名次

2021.12.2 每日一题

题目描述

给你一个长度为 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] 。

提示:

n == score.length
1 <= n <= 10^4
0 <= score[i] <= 10^6
score 中的所有值 互不相同

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/relative-ranks
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

class Solution 
    public String[] findRelativeRanks(int[] score) 
        //我能想到的就是用哈希表记录位置,然后排序,放在对应位置上
        int l = score.length;
        Map<Integer, Integer> map = new HashMap<>();
        for(int i = 0; i < l; i++)
            map.put(score[i], i);
        
        Arrays.sort(score);
        String[] three = "Gold Medal", "Silver Medal", "Bronze Medal";
        String[] res = new String[l];
        for(int i = l - 1; i >= 0; i--)
            if(i >= l - 3)
                res[map.get(score[i])] = three[l - i - 1];
            else
                res[map.get(score[i])] = l - i + "";
            
        
        return res;
    

1005. K 次取反后最大化的数组和

2021.12.3 每日一题,12月开头三个简单题

题目描述

给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:

选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。
重复这个过程恰好 k 次。可以多次选择同一个下标 i 。

以这种方式修改数组后,返回数组 可能的最大和 。

示例 1:

输入:nums = [4,2,3], k = 1
输出:5
解释:选择下标 1 ,nums 变为 [4,-2,3] 。

示例 2:

输入:nums = [3,-1,0,2], k = 3
输出:6
解释:选择下标 (1, 2, 2) ,nums 变为 [3,1,0,2] 。

示例 3:

输入:nums = [2,-3,-1,5,-4], k = 2
输出:13
解释:选择下标 (1, 4) ,nums 变为 [2,3,-1,5,4] 。

提示:

1 <= nums.length <= 10^4
-100 <= nums[i] <= 100
1 <= k <= 10^4

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximize-sum-of-array-after-k-negations
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

用了排序,复杂度高了点,不过超了100%
不用排序的话,就是用数组记录每个数出现的次数,然后再反转就行了,也不难

class Solution 
    public int largestSumAfterKNegations(int[] nums, int k) 
        //先排序,然后将开头的负数取反,然后再排序,如果还有负数,那么就直接返回总和
        //如果没有负数了,那么就对第一个数一直取反

        int l = nums.length;
        Arrays.sort(nums);
        //将负数取反
        int idx = 0;
        while(idx < k && idx < l)
            if(nums[idx] >= 0)
                break;
            nums[idx] = -nums[idx];
            idx++;
        
        Arrays.sort(nums);
        if(idx < k)
            int t = k - idx;
            nums[0] = t % 2 == 0 ? nums[0] : -nums[0];
        
        int sum = 0;
        for(int s : nums)
            sum += s;
        
        return sum;
    

以上是关于LeetCode 1446. 连续字符 / 506. 相对名次 / 1005. K 次取反后最大化的数组和的主要内容,如果未能解决你的问题,请参考以下文章

文巾解题 1446. 连续字符

LeetCode --- 1446. Consecutive Characters 解题报告

LeetCode --- 1446. Consecutive Characters 解题报告

leetcode506. Relative Ranks

leetcode-506-Relative Ranks

[LeetCode&Python] Problem 506. Relative Ranks