[容易]恢复旋转排序数组

题目来源:http://www.lintcode.com/zh-cn/problem/recover-rotated-sorted-array/

可以accept的程序如下:

1 class Solution {
2 public:
3     void recoverRotatedSortedArray(vector<int> &nums) {
4         // write your code here
5         sort(nums.begin(),nums.end());
6     }
7 };

可以accept的程序2:

 1 class Solution {
 2 public:
 3     int getGCD(int a, int b) {
 4         if (a % b == 0) {
 5             return b;
 6         }
 7         return getGCD(b, a % b);
 8     }
 9
10     void recoverRotatedSortedArray(vector<int> &nums) {
11         int offset = 0;
12         for (int i = 1; i < nums.size(); i++) {
13             if (nums[i - 1] > nums[i]) {
14                 offset = i;
15             }
16         }
17         if (offset == 0) {
18             return;
19         }
20         offset = nums.size() - offset;
21
22         int gcd = getGCD(offset, nums.size());
23         for (int i = 0; i < gcd; i++) {
24             int next = (i + offset) % nums.size();
25             while (next != i) {
26                 int temp = nums[i]; nums[i] = nums[next]; nums[next] = temp;
27                 next = (next + offset) % nums.size();
28             }
29         }
30     }
31 };

完整的测试程序如下:

 1 #include <iostream>
 2 #include <vector>
 3 #include <algorithm>
 4 using namespace std;
 5
 6 class Solution {
 7 public:
 8     void recoverRotatedSortedArray(vector<int> &nums) {
 9         // write your code here
10         sort(nums.begin(),nums.end());
11     }
12 };
13
14 int main()
15 {
16     Solution solu;
17     vector<int> n;
18     n.push_back(4);
19     n.push_back(5);
20     n.push_back(1);
21     n.push_back(2);
22     n.push_back(3);
23     solu.recoverRotatedSortedArray(n);
24     for(int i=0;i<n.size();i++)
25         cout<<n.at(i)<<" ";
26 }
时间: 2024-10-12 14:02:12

[容易]恢复旋转排序数组的相关文章

lintcode 容易题:Recover Rotated Sorted Array恢复旋转排序数组

题目: 恢复旋转排序数组 给定一个旋转排序数组,在原地恢复其排序. 样例 [4, 5, 1, 2, 3] -> [1, 2, 3, 4, 5] 挑战 使用O(1)的额外空间和O(n)时间复杂度 说明 什么是旋转数组? 比如,原始数组为[1,2,3,4], 则其旋转数组可以是[1,2,3,4], [2,3,4,1], [3,4,1,2], [4,1,2,3] 解题: 开始我想,先找到中间的临界点,然后在排序,临界点找到了,排序不知道怎么搞了,在这里,看到了很好的方法,前半部分逆序,后半部分逆序,整

恢复旋转排序数组

给定一个旋转排序数组,在原地恢复其排序. Yes 说明 什么是旋转数组? 比如,原始数组为[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] 挑战 使用O(1)的额外空间和O(n)时间复杂度

LintCode Python 简单级题目 39.恢复旋转排序数组

题目描述: 给定一个旋转排序数组,在原地恢复其排序. 您在真实的面试中是否遇到过这个题? Yes 说明 什么是旋转数组? 比如,原始数组为[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] 挑战 使用O(1)的额外空间和O(n)时间复杂度 标签 数组 排序数组 题目分析: 挑战 使用O(1)的额外空间和O(n)时间复杂度 1.不建立新数组,在原数组

在旋转排序数组之后的数组中找到目标值的位置(很多遍 ,总是晕)

33. Search in Rotated Sorted Array在旋转排序数组中找目标值的位置 int search(vector<int>& nums, int target) { int len=nums.size(); int low=0,high=len-1; while(low<=high){ int mid=(low+high)/2; if(nums[mid]==target){ return mid; } //mid在旋转点左侧 if(nums[mid]<

算法与数据结构总结1 二分查找与旋转排序数组

一. 二分搜索(Binary Search)模板及其理解 1.通用模板,解决start, end, mid, <(<=), >(>=)等问题 http://www.lintcode.com/en/problem/binary-search/ class Solution { public: /** * @param nums: The integer array. * @param target: Target number to find. * @return: The firs

LintCode-搜索旋转排序数组 II

跟进"搜索旋转排序数组",假如有重复元素又将如何? 是否会影响运行时间复杂度? 如何影响? 为何会影响? 写出一个函数判断给定的目标值是否出现在数组中. 您在真实的面试中是否遇到过这个题? Yes 样例 给出[3,4,4,5,7,0,1,2]和target=4,返回 true 标签 Expand 分析:有重复数据还是很蛋疼的,重点在于消重,要使得A[l]严格大于A[r],这样就可以继续判断区间的单调性,从而二分 代码: class Solution { /** * param A :

leetcode题解:Search in Rotated Sorted Array(旋转排序数组查找)

题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). You are given a target value to search. If found in the array return its index, otherwise return -1. You may assume no du

lintcode:寻找旋转排序数组中的最小值 II

寻找旋转排序数组中的最小值 II 假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2). 你需要找到其中最小的元素. 数组中可能存在重复的元素. 解题 暴力直接线性查找 或者,线性找到第一个开始降序的位置对应的数 应该考虑二分法 递归 + 二分 public class Solution { /** * @param num: a rotated sorted array * @return: the minimum number in

寻找旋转排序数组中的最小值

寻找旋转排序数组中的最小值 假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2). 你需要找到其中最小的元素. 你可以假设数组中不存在重复的元素. 注意事项 You may assume no duplicate exists in the array. 样例 给出[4,5,6,7,0,1,2]  返回 0 标签 二分法 1 class Solution { 2 public: 3 /** 4 * @param nums: a rota