牛客巅峰赛S1第9场 - 青铜&白银

牛牛的字符反转

牛客巅峰赛S1第9场 - 青铜&白银_第1张图片

 牛客巅峰赛S1第9场 - 青铜&白银_第2张图片

神仙题目 做的时候1000多发就十几个人过  自己做的时候也没想全所有情况,老菜狗了

题解 

  • 1234567->6543217->7123456 先在[1,6]之间反转,最后整体[1,7]反转。至少2次
  • 1234567->6543217->6712345 先在[1,6]之间反转,最后在[2,7]之间反转。至少2次
  • 1234567->4321567->4321765->5671234 先在[1,4]反转,再[5,7]反转,最后整体反转。至少3次
  • 1234567->3214567->3217654->4567123 先在[1,3]反转,再[4,7]反转,最后整体反转。至少3次
  • 1234567->1765432->2345671 先在[2,7]之间反转,最后整体反转。至少2次
  • 1234567->1765432->3456712 先在[2,7]之间反转,最后在[1,6]之间反转。至少2次
  • 1234567->1234567 无需区间反转。至少0次    

 由上面可知最多只需要翻转3次,最少是0次,两次的情况是最大的或者最大的和第二大的在头的位置(那时候真的没考虑到第二大的在最前面时候还能这样转,果然还是得写的细一点 )还需要特判一下n==1或者n==2的情况 剩下的看上面应该都能懂了。

class Solution {
public:
    /**
     * 
     * @param n int整型 字符串长度n
     * @param k int整型 循环右移次数k
     * @return int整型
     */
    int solve(int n, int k) {
        // write code here
        int f;
        f=k%n;
        if (n == 1)return 0;
        if(n==2&&f==1)return 1;
        else if(f==1||f==2||f==n-1||f==n-2)return 2;
        else if(f>1)return 3;
        else if(f==0)return 0;
       
    }
};

 

 

 

你可能感兴趣的:(牛客巅峰赛S1第9场 - 青铜&白银)