C++程序 找到旋转 K 个索引的数组的范围和查询

C++程序 找到旋转 K 个索引的数组的范围和查询

在编写C++程序过程中,我们经常需要解决数组旋转问题。比如,我们可能要找到旋转K个索引后的数组范围或提供一种查询方式。本文将介绍如何使用C++编写代码解决这个问题。

找到旋转K个索引后的数组范围

首先,我们需要定义一个旋转函数rotate()来旋转被输入的数组。该函数将数组的前k个元素移动到数组的末尾。

#include <algorithm> //需要引用该标准库提供的rotate函数
void rotate(int k, int* arr, int n) 
{
   k %= n;
   std::rotate(arr, arr + k, arr + n);
}

rotate函数该怎么使用呢?我们可以根据需要旋转的元素个数k来调用rotate函数。

#include<iostream>
int main()
{
    int arr[6] = {1, 2, 3, 4, 5, 6};
    rotate(2, arr, 6);
    for(int i=0;i<6;i++)
        std::cout << arr[i] << " "; //输出 3 4 5 6 1 2
    return 0;
}

在该示例中,我们将数组arr旋转了2个位置,输出为3 4 5 6 1 2。

但是,如果我们在旋转后需要查找数组中的某个值呢?我们必须找到旋转后该值在数组中的位置。我们可以这样做:

#include<iostream>
int findElement(int arr[], int n, int val) 
{
    for(int i=0;i<n;i++)
    {
        if(arr[i]==val)
            return i;
    }
    return -1;
}
int main()
{
    int arr[6] = {1, 2, 3, 4, 5, 6};
    rotate(2, arr, 6);
    int index = findElement(arr,6,4);
    std::cout << index; //输出 3
    return 0;
}

在该示例中,我们找到旋转后该值在数组中的位置,输出为3。

但是,如果我们不确定旋转了多少元素,我们该怎么办?我们可以编写另一个函数findK()来找到旋转了k个元素。

#include<iostream>
int findElement(int arr[], int n, int val) 
{
    for(int i=0;i<n;i++)
    {
        if(arr[i]==val)
            return i;
    }
    return -1;
}
int findK(int* arr, int n) {
    for(int i=0;i<n-1;i++)
    {
        if(arr[i]>arr[i+1])
            return i+1;
    }
    return 0;
}
int main()
{
    int arr[6] = {1, 2, 3, 4, 5, 6};
    rotate(2, arr, 6);
    int k = findK(arr,6);
    std::cout << k << " "; //输出 2
    int index = findElement(arr,6,4);
    std::cout << index; //输出 3
    return 0;
}

在该示例中,我们找到旋转了k个元素并执行查找操作。

查询操作

假设我们有一个排好序的数组,其中包含5个数字:2、4、6、8和10。我们要确保能够快速查找单个数字在数组中是否存在。因此,我们可以使用二分查找算法。

二分算法需要首先将数组排序。我们可以使用C++提供的标准库函数sort()来排序数组:

#include<iostream>
#include <algorithm>
int main()
{
    int arr[5] = {2, 4, 6, 8, 10};
    std::sort(arr, arr + 5); //使用std::sort函数排序
    bool res = std::binary_search(arr, arr + 5, 6); //使用std::binary_search函数查找元素6是否在数组中
    std::cout << res; //输出 1
    return 0;
}

在该示例中,我们使用了std::sort函数将数组进行排序,并使用std::binary_search函数通过二分查找算法快速查找元素6是否在数组中。最终输出结果为1,表示元素6在数组中存在。

结论

在本文中,我们学习了如何使用C++编写程序解决数组旋转和查询问题。我们定义了旋转函数rotate()和查找函数findElement()、findK()。通过使用C++提供的标准库函数sort()和binary_search(),我们能够快速地对一个排好序的数组进行查找。希望这篇文章对C++学习者有所帮助。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 示例