欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > LintCode第1334题-旋转数组,146题-大小写转换II,353题-最大字母

LintCode第1334题-旋转数组,146题-大小写转换II,353题-最大字母

2025/11/6 7:03:37 来源:https://blog.csdn.net/softstarhhy/article/details/147777052  浏览:    关键词:LintCode第1334题-旋转数组,146题-大小写转换II,353题-最大字母

第1334题:

描述

给定一个数组,将数组向右移动k步,其中k为非负数.

样例 1:

输入: [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右旋转1步: [7,1,2,3,4,5,6]
向右旋转2步: [6,7,1,2,3,4,5]
向右旋转3步: [5,6,7,1,2,3,4]

样例 2:

输入: [-1,-100,3,99], k = 2
输出: [3,99,-1,-100]
解释: 
向右旋转1步: [99,-1,-100,3]
向右旋转2步: [3,99,-1,-100]

本题易错点:

  k = k % n; // 易错点: 因为题目中的k可能会超出整个数组的取值范围 所以要保证 k 在有效范围内

代码如下:

public class Solution {

    /**

     * @param nums: an array

     * @param k: an integer

     * @return: rotate the array to the right by k steps

     */

    public int[] rotate(int[] nums, int k) {

        // Write your code here

        int n=nums.length;

        int[] returnNums=new int[n];

        k = k % n; // 易错点:保证 k 在有效范围内

        for(int i=0;i<n;i++)

        {

            if((k+i)<n)

            {

                returnNums[k+i]=nums[i];

            }else

            {  

                returnNums[(k+i)-n]=nums[i];

            }

        }

        return returnNums;

    }

}

 第146题:

描述

将一个字符串中的小写字母转换为大写字母。不是字母的字符不需要做改变.

样例 1:

输入: str = "abc"
输出: "ABC"

样例 2:

输入: str = "aBc"
输出: "ABC"

样例 3:

输入: str = "abC12"
输出: "ABC12"

代码如下:

public class Solution {

    /**

     * @param letters: A string

     * @return: A string

     */

    public String lowercaseToUppercase2(String letters) {

        // 使用 StringBuilder 更高效

        StringBuilder stringBuilder = new StringBuilder();

       

        // 直接遍历字符串,转换并拼接

        for (int i = 0; i < letters.length(); i++) {

            char c = letters.charAt(i);

            if (c >= 'a' && c <= 'z') {

                stringBuilder.append((char) (c - 32));

            } else {

                stringBuilder.append(c);

            }

        }

       

        return stringBuilder.toString();

    }

}

第353题:

描述

给定字符串S,找到一个字母字符,其大写和小写字母均出现在S中,则返回此字母的大写,若存在多个答案,返回最大的字母,不存在则返回"NO".

本题易错点:               

if(lowercaseSet.contains((char)(currentChar+32))&&currentChar>largestChar)

该句中currentChar+32必须先用括号括起来,否则计算的char值就会发生错误

同理也适用于下一句               

if(uppercaseSet.contains((char)(currentChar - 32))&&(char)(currentChar-32)>largestChar)

样例

输入: S = "admeDCAB"
输出: "D"输入: S = "adme"
输出: "NO"

 1<=len(s)<=106

代码如下:

import java.util.HashSet;

import java.util.Set;

public class Solution {

    /**

     * @param s: a string

     * @return: a string

     */

    public String largestLetter(String s) {

        Set<Character> lowercaseSet=new HashSet<>();

        Set<Character> uppercaseSet=new HashSet<>();

        char largestChar='\0';

        int n=s.length();

        boolean existFlag=false;

        for(int i=0;i<n;i++)

        {

            char currentChar=s.charAt(i);

            if(currentChar>='a'&&currentChar<='z')//是小写字母

            {

               lowercaseSet.add(s.charAt(i));

             

                if(uppercaseSet.contains((char)(currentChar - 32))&&(char)(currentChar-32)>largestChar)

                {

                       largestChar=(char)(currentChar-32);

                        existFlag=true;

                }

            }

           if(currentChar>='A'&&currentChar<='Z')//是大写字母

            {

               uppercaseSet.add(s.charAt(i));

                if(lowercaseSet.contains((char)(currentChar+32))&&currentChar>largestChar)

                {

                    largestChar=currentChar;

                    existFlag=true;

                }

            }

        }

       return largestChar == '\0' ? "NO" : largestChar + "";

       

    }

}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词