• leetcode Top100(14)轮转数组


    给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

    示例 1:

    输入: nums = [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]
    1. package TOP11_20;
    2. import java.util.ArrayList;
    3. import java.util.Arrays;
    4. import java.util.List;
    5. import java.util.stream.Collectors;
    6. /**
    7. * 示例 1:
    8. *

    9. * 输入: nums = [1,2,3,4,5,6,7], k = 3
    10. * 输出: [5,6,7,1,2,3,4]
    11. * 解释:
    12. * 向右轮转 1 步: [7,1,2,3,4,5,6]
    13. * 向右轮转 2 步: [6,7,1,2,3,4,5]
    14. * 向右轮转 3 步: [5,6,7,1,2,3,4]
    15. */
    16. public class Top14 {
    17. public static int[] rotate(int[] nums, int k) {
    18. int length = nums.length;
    19. if (length == 0 || k == 0) {
    20. return nums;
    21. }
    22. int t = 0;
    23. if (k < length) {
    24. t = k;
    25. }
    26. if (k >= length) {
    27. t = k % length;
    28. }
    29. if (t == 0) {
    30. return nums;
    31. }
    32. int[] b = new int[t];
    33. int[] c = new int[length - t];
    34. for (int i = 0; i < t; i++) {
    35. b[t - i - 1] = nums[length - 1 - i];
    36. }
    37. for (int i = 0; i < length - t; i++) {
    38. c[i] = nums[i];
    39. }
    40. List result = new ArrayList<>();
    41. result.addAll(Arrays.stream(b).boxed().collect(Collectors.toList()));
    42. result.addAll(Arrays.stream(c).boxed().collect(Collectors.toList()));
    43. int[] ress = result.stream().mapToInt(Integer::valueOf).toArray();
    44. for (int i = 0; i < length; i++) {
    45. nums[i] = ress[i];
    46. }
    47. return ress;
    48. }
    49. //用新的数组
    50. private static void rotate2(int[] nums, int k) {
    51. int length = nums.length;
    52. k = k % nums.length;
    53. int[] newArray = new int[length];
    54. if (length == 0 || k == 0) {
    55. return;
    56. }
    57. for (int i = 0; i < length; i++) {
    58. newArray[(i + k) % length] = nums[i];
    59. }
    60. System.arraycopy(newArray, 0, nums, 0, length);
    61. }
    62. //翻转 这个想法有点牛
    63. public static void rotate3(int[] nums, int k) {
    64. k %= nums.length;
    65. reverse(nums, 0, nums.length - 1);
    66. reverse(nums, 0, k - 1);
    67. reverse(nums, k, nums.length - 1);
    68. }
    69. public static void reverse(int[] nums, int start, int end) {
    70. while (start < end) {
    71. int temp = nums[start];
    72. nums[start] = nums[end];
    73. nums[end] = temp;
    74. start += 1;
    75. end -= 1;
    76. }
    77. }
    78. public static void main(String[] args) {
    79. int[] nums = {1, 2, 3, 4, 5, 6, 7};
    80. int[] res = rotate(nums, 3);
    81. System.out.println(res);
    82. }
    83. }

  • 相关阅读:
    JDBC+Servlet综合练习
    这才是真正的Spring全家桶:Spring+SpringData+MVC+Boot+Cloud
    网络安全(黑客)自学
    线程安全,,Maven基本介绍,220822,,
    杰理之关于提升 BLE 传输速率说明【篇】
    SpringBoot+若依+图片导出
    全面理解DAO-Web3.0基本组织形式
    等级保护定级之备案!
    kubernetes镜像下载页,离线安装k8s的资源
    Linux常用基本命令
  • 原文地址:https://blog.csdn.net/harryptter/article/details/133179075