image.png

使用反转

image.png

  1. public void rotate(int[] nums, int k) {
  2. //对长度取模
  3. k %= nums.length;
  4. //整体反转
  5. reverse(nums, 0, nums.length-1);
  6. reverse(nums, 0,k-1); //反转前面的
  7. reverse(nums, k, nums.length-1); //反转后面的
  8. }
  9. public void reverse(int[] nums,int start,int end){
  10. while(start<end){
  11. int temp = nums[start];
  12. nums[start] = nums[end];
  13. nums[end] = temp;
  14. start++;
  15. end--;
  16. }
  17. }
  18. //时间复杂度:O(n) 。 n 个元素被反转了总共 3 次。
  19. //空间复杂度:O(1) 。 没有使用额外的空间