前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >恢复旋转排序数组

恢复旋转排序数组

作者头像
一份执着✘
发布2018-06-04 16:37:09
3400
发布2018-06-04 16:37:09
举报
文章被收录于专栏:赵俊的Java专栏赵俊的Java专栏

题意

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

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

样例

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

思路

遍历数组,首先找到当前数大于下一个数的位置,也就是样例中的 5,然后将数组开头的元素到 5 进行翻转,结果是 [5, 4, 1, 2, 3],然后将后面的元素进行翻转,结果是 [5, 4, 3, 2, 1],再将整个数组翻转,就得到了最终结果。

代码实现

代码语言:javascript
复制
public class Solution {
    /**
     * @param nums: The rotated sorted array
     * @return: The recovered sorted array
     */
    public void recoverRotatedSortedArray(List<Integer> nums) {
        for (int i = 0; i < nums.size() - 1; i++) {
            if (nums.get(i) > nums.get(i + 1)) {
                reverse(nums, 0, i);
                reverse(nums, i + 1, nums.size() - 1);
                reverse(nums, 0, nums.size() - 1);
                return;
            }
        }
    }
    
    public void reverse(List<Integer> list, int start, int end) {
        for (int i = start, j = end; i < j; i++, j--) {
            int temp = list.get(i);
            list.set(i, list.get(j));
            list.set(j, temp);
        }
    }
};

原题地址

LintCode:恢复旋转排序数组

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-08-012,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题意
  • 样例
  • 思路
  • 代码实现
  • 原题地址
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档