题解 | #向左移动牛群#

向左移动牛群

https://www.nowcoder.com/practice/e70fc604c3684ce294e6af5e97feff04?tpId=354&tqId=10595860&ru=/exam/oj/ta&qru=/ta/interview-202-top/question-ranking&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D354

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型一维数组
     * @param k int整型
     * @return int整型一维数组
     */
  /**
  三次翻转即可做到向左移动牛群
  */
    public int[] rotateCows (int[] nums, int k) {
	  // k要进行取余,因为如果k>数组长度,就是移动了一圈之后向左k%num.length
        k %= nums.length;
	  // 先反转整体
        reverse(nums, 0, nums.length - 1);
	  // 再反转目标k的左边
        reverse(nums, 0, k - 1);
	  // 再反转目标k的右边
        reverse(nums, k, nums.length - 1);
        return nums;
    }
  // 翻转的函数,没啥好说的,字符替换而已
    public void reverse(int[] nums, int start, int end) {
        while (start < end) {
            int temp = nums[start];
            nums[start] = nums[end];
            nums[end] = temp;
            start += 1;
            end -= 1;
        }
    }
}

本题知识点分析:

1.字符串翻转

2.如何才能向左移动字符,并在原地进行修改

本题解题思路分析:

1.先翻转整体

2.再翻转开头到k-1个字符串

3.然后翻转k+1个到结尾的字符串

4.最后返回字符串即可

关键点:注意K要取余,不然会做多余的操作。

本题使用编程语言:Java

如果你觉得本题对您有帮助的话,可以点个赞!

高频面试算法题解 文章被收录于专栏

高频面试算法题解,每天一小步,人生一大步,跟着一起刷起来!

全部评论

相关推荐

牛客刘北:如果暑期实习是27届的话,你要晚一年才会毕业,企业为什么会等你呢?要搞清时间逻辑呀!27届现在实习只能是在暑假实习,这是日常实习,不是暑期实习。所以多去投日常实习吧,暑期实习肯定不会要你的
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务