Love丶FFC's Blog

LintCode_easy:恢复旋转排序数组

2019-08-24 18:20:26
阅读:7539   •   评论:102
标签:,

描述

给定一个旋转排序数组,在原地恢复其排序。

说明

什么是旋转数组?

比如,原始数组为[1,2,3,4], 则其旋转数组可以是[1,2,3,4], [2,3,4,1], [3,4,1,2], [4,1,2,3]

样例

Example1:

[4, 5, 1, 2, 3] -> [1, 2, 3, 4, 5]

Example2:

[6,8,9,1,2] -> [1,2,6,8,9]

挑战

使用O(1)的额外空间和O(n)时间复杂度

编程语言:Java

解题思想:

1.因为数组从某个节点分开,左右两边都是有序的,所以首先使用比较大小的方法找到该节点的索引。

2.创建另外一个数组或泛型,承载右边的元素集合。

3.将左边的元素集合紧随其后进行覆盖。

时间复杂度:O(n)

IDE代码如下:

  1. package LintCode_Easy;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. public class _39 {
  7.  
  8. public static void main(String[] args) {
  9. /* 数组解法 */
  10. int[] nums = new int[] {6,8,9,1,2}; //初始化
  11. int[] changenums = new int[nums.length];
  12. int minnum=nums[0];
  13. int minnumindex=0;
  14. for(int i=0;i<nums.length;i++) //找到最小元素的索引
  15. {
  16. if(nums[i]<minnum)
  17. {
  18. minnum=nums[i];
  19. minnumindex=i;
  20. }
  21. }
  22. for(int i=minnumindex,j=0;i<nums.length;i++,j++) //(索引-长度)的覆盖
  23. {
  24. changenums[j]=nums[i];
  25. }
  26. for(int i=0,j=nums.length-minnumindex;i<minnumindex;i++,j++) //(0-索引)的覆盖
  27. {
  28. changenums[j]=nums[i];
  29. }
  30. nums=changenums; //覆盖
  31. System.out.println(Arrays.toString(nums));
  32.  
  33.  
  34. /*泛型解法*/
  35. //泛型中的get方法用于其中指定位置的值,set方法用于赋给指定位置值
  36. List<Integer> nums = new ArrayList<Integer>();
  37. nums.add(5);
  38. nums.add(6);
  39. nums.add(1);
  40. nums.add(2);
  41. nums.add(3);
  42. nums.add(4);
  43. int minnum = nums.get(0);
  44. int minnumindex = 0;
  45. for(int i=0;i<nums.size();i++)
  46. {
  47. if(nums.get(i)<minnum)
  48. {
  49. minnum=nums.get(i);
  50. minnumindex=i;
  51. }
  52. }
  53. List<Integer> savenums = new ArrayList<Integer>();
  54. for(int i=0;i<minnumindex;i++)
  55. {
  56. savenums.add(nums.get(i));
  57. }
  58. for(int i=0,j=minnumindex;j<nums.size();i++,j++)
  59. {
  60. nums.set(i, nums.get(j));
  61. }
  62. for(int i=0,j=nums.size()-minnumindex;j<nums.size();i++,j++)
  63. {
  64. nums.set(j, savenums.get(i));
  65. }
  66. System.out.println(nums);
  67. }
  68.  
  69. }
  70.  

LintCode编辑器代码如下:

  1. public class Solution {
  2. public void recoverRotatedSortedArray(List<Integer> nums) {
  3. int minnum = nums.get(0);
  4. int minnumindex = 0;
  5. for(int i=0;i<nums.size();i++)
  6. {
  7. if(nums.get(i)<minnum)
  8. {
  9. minnum=nums.get(i);
  10. minnumindex=i;
  11. }
  12. }
  13. List<Integer> savenums = new ArrayList<Integer>();
  14. for(int i=0;i<minnumindex;i++)
  15. {
  16. savenums.add(nums.get(i));
  17. }
  18. for(int i=0,j=minnumindex;j<nums.size();i++,j++)
  19. {
  20. nums.set(i, nums.get(j));
  21. }
  22. for(int i=0,j=nums.size()-minnumindex;j<nums.size();i++,j++)
  23. {
  24. nums.set(j, savenums.get(i));
  25. }
  26. }
  27. }

评论板

共有 102 条评论

  1. Gealpaste

    cheapest cialis generic online This systematic review aims to address these questions by examining the role of bacteria in low back pain and the relationship between bacteria and Modic change

  2. intuido

    At this early point after induction, clusters of rGFP Cre NSCs were also located next to the rGFP Dcx neuroblasts Fig cheap levitra

--------查看该分类下最新文章--------
^
新版博客正在完善中!域名:http://www.loveffc:8080,点击跳转,完全移植后将去除端口号。

Copyright © 2018 - 2021 FFC的小站 - 滇 ICP 备 18010780 号 - 1

- Powered by WordPress & AliYun · Theme by FFC -

- Environment by Windows & XAMPP · Designed by WebStorm & VSCode -

已运行:

访问量:510752