Leetcode刷题指南-恢复旋转排序数组(4)--(不熟悉)

本文介绍了如何解决LeetCode上的恢复旋转排序数组问题。解释了旋转数组的定义,提供了样例输入和输出,并讲解了使用C++的思路及代码实现,通过寻找数组中第一个升序对的位置来恢复排序。
摘要由CSDN通过智能技术生成

1)题目

恢复旋转排序数组

要求:

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

样例:

输入:
[4, 5, 1, 2, 3]
输出:
[1, 2, 3, 4, 5]

2)补充知识

旋转数组定义:

原始数组为[1,2,3,4], 则其旋转数组可以是[1,2,3,4], [2,3,4,1], [3,4,1,2], [4,1,2,3]。
vector有内部函数实现排序(升序或降序),注意 sort 需要头文件 #include

升序:

 sort(obj.begin(),obj.end());//从小到大

降序:

reverse(obj.begin(),obj.end());//从大到小 将排序好的逆序

vector常用操作总结
在这里插入图片描述

3)思路

需要求第一个后者比前者小时,后者的下标,即offset。然后即可使用旋转vector的方法来做了。

4)代码

class Solution {
public:
	/**
	 * @param nums: An integer array
	 * @return: nothing
	 */

	 //利用offset实现
	void recoverRotatedSortedArray(vector<int> &nums) {
		// write your code here
		int offset = getOffset(nums);
		reverse(nums.begin(), nums.begin() + offset);//将前半部分逆序
		reverse(nums.begin() + offset, nums.end());//将后半部分逆序
		reverse(nums.begin(), nums.end());//将整体逆序
	}
	//利用vector内部函数实现
	void recoverRotatedSortedArray_vector(vector<int> &nums)
	{
		sort(nums.begin(), nums.end());//升序
		reverse(nums.begin(), nums.end());//降序
	}

private:
	int getOffset(vector<int> & nums) {
		for (int i = 1; i < nums.size(); ++i) {
			if (nums[i] < nums[i - 1]) {
				return i;
			}
		}
		return 0;
	}
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值