欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語(yǔ)言超詳細(xì)講解輪轉(zhuǎn)數(shù)組

 更新時(shí)間:2022年04月01日 14:10:23   作者:_奇奇  
這篇文章主要給大家講解輪轉(zhuǎn)數(shù)組的問(wèn)題,一個(gè)問(wèn)題不局限于一種解法,希望你看了本文的解決方法以后可以舉一反三自己編寫(xiě),這樣你的技術(shù)水平會(huì)有質(zhì)的提高

題目描述

給你一個(gè)數(shù)組,將數(shù)組中的元素向右輪轉(zhuǎn) k 個(gè)位置,其中 k 是非負(fù)數(shù)。OJ鏈接

實(shí)例

1.實(shí)例1

輸入: nums = [1,2,3,4,5,6,7], k = 3
輸出: [5,6,7,1,2,3,4]
解釋:
向右輪轉(zhuǎn) 1 步: [7,1,2,3,4,5,6]
向右輪轉(zhuǎn) 2 步: [6,7,1,2,3,4,5]
向右輪轉(zhuǎn) 3 步: [5,6,7,1,2,3,4]

2.實(shí)例2

輸入:nums = [-1,-100,3,99], k = 2
輸出:[3,99,-1,-100]
解釋: 
向右輪轉(zhuǎn) 1 步: [99,-1,-100,3]
向右輪轉(zhuǎn) 2 步: [3,99,-1,-100]

解題思路

為了使算法空間復(fù)雜度為O(1),原地旋轉(zhuǎn),所以不能額外創(chuàng)建數(shù)組。

以實(shí)例1為例子。使用三次逆轉(zhuǎn)法,讓數(shù)組旋轉(zhuǎn)k次

  • 先整體逆轉(zhuǎn) 變?yōu)?code>(7,6,5,4,3,2,1)
  • 逆轉(zhuǎn)子數(shù)組[0, k - 1] 變?yōu)?code>(5,6,7,4,3,2,1)
  • 逆轉(zhuǎn)子數(shù)組[k, numsSize - 1] 變?yōu)?code>(5,6,7,1,2,3,4)

1. 先整體逆轉(zhuǎn)

設(shè)置兩個(gè)指針變量分別指向頭部和尾部。當(dāng) begin<end 時(shí),交換兩個(gè)位置上的值。綠色的數(shù)字為交換的位置。

在這里插入圖片描述

2.逆轉(zhuǎn)子數(shù)組[0, k - 1]

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

3.逆轉(zhuǎn)子數(shù)組[k, numsSize - 1]

此處不贅述、同上面兩個(gè)步驟的思路。這樣就完成了對(duì)數(shù)組的輪轉(zhuǎn)。

易錯(cuò)點(diǎn)

假如需要輪轉(zhuǎn)的個(gè)數(shù)k大于數(shù)組numsSize的長(zhǎng)度呢?

假如k為10,那么本題的結(jié)果是什么呢?

假如右旋10個(gè)數(shù),那么先旋7個(gè)后將又回到了原來(lái)的樣子。 然后再旋3個(gè)的話那么將和本題的旋3個(gè)一模一樣。

  • 本題的精髓就是題目,叫做輪轉(zhuǎn)數(shù)組。果然天道好輪回。輪轉(zhuǎn)7次又回到了起點(diǎn)。輪轉(zhuǎn)14次,21次…,只要七的倍數(shù)都回返回原地。
  • 所以在題目中要加入是否為k的倍數(shù)的判斷代碼
	if (k > numsSize)
	{
		k %= numsSize;
	}

代碼

此代碼帶主函數(shù)。LeetCode題目中是接口類(lèi)型的不帶主函數(shù)。因?yàn)橐嗈D(zhuǎn)三次。所以把while循環(huán)寫(xiě)成一個(gè)函數(shù),方便復(fù)用。

 LeetCode189. 輪轉(zhuǎn)數(shù)組
#include<stdio.h>

void rotate1(int* begin, int* end)
{
	while (begin < end)
	{
		int t = 0;
		t = *begin;
		*begin = *end;
		*end = t;
		++begin;
		--end;
	}
}
void rotate(int* nums, int numsSize, int k) 
{
	//假如右旋10個(gè)數(shù),先旋7個(gè)后又回到了原來(lái)的樣子。然后再旋3次的話和本題再旋3次一模一樣。
	if (k > numsSize)
	{
		k %= numsSize;
	}
	int* begin = nums;
	int* end = nums + numsSize - 1;
	rotate1(begin, end);
	rotate1(begin, begin+k-1);
	rotate1(begin + k, end);

}
int main()
{
	int nums[] = { 1,2,3,4,5,6,7 };
	int sz = sizeof(nums) / sizeof(nums[0]);
	rotate(nums, sz, 3);

	for (int i = 0; i < sz; i++)
	{
		printf("%d ", nums[i]);
	}
	return 0;
}

到此這篇關(guān)于C語(yǔ)言超詳細(xì)講解輪轉(zhuǎn)數(shù)組的文章就介紹到這了,更多相關(guān)C語(yǔ)言 輪轉(zhuǎn)數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C/C++獲取目錄下的文件列表信息

    C/C++獲取目錄下的文件列表信息

    在C/C++編程時(shí),需要獲取目錄下面的文件列表信息,下面把代碼分享一下
    2014-02-02
  • 詳解C語(yǔ)言中strcpy函數(shù)與memcpy函數(shù)的區(qū)別與實(shí)現(xiàn)

    詳解C語(yǔ)言中strcpy函數(shù)與memcpy函數(shù)的區(qū)別與實(shí)現(xiàn)

    這篇文章主要介紹了C語(yǔ)言中字符串拷貝函數(shù)(strcpy)與內(nèi)存拷貝函數(shù)(memcpy)的不同及內(nèi)存拷貝函數(shù)的模擬實(shí)現(xiàn),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-12-12
  • C語(yǔ)言詳細(xì)分析不同類(lèi)型數(shù)據(jù)在內(nèi)存中的存儲(chǔ)

    C語(yǔ)言詳細(xì)分析不同類(lèi)型數(shù)據(jù)在內(nèi)存中的存儲(chǔ)

    使用編程語(yǔ)言進(jìn)行編程時(shí),需要用到各種變量來(lái)存儲(chǔ)各種信息。變量保留的是它所存儲(chǔ)的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個(gè)變量時(shí),就會(huì)在內(nèi)存中保留一些空間。您可能需要存儲(chǔ)各種數(shù)據(jù)類(lèi)型的信息,操作系統(tǒng)會(huì)根據(jù)變量的數(shù)據(jù)類(lèi)型,來(lái)分配內(nèi)存和決定在保留內(nèi)存中存儲(chǔ)什么
    2022-08-08
  • VScode中添加頭文件和源文件(C/C++)的方法

    VScode中添加頭文件和源文件(C/C++)的方法

    使用VSCode編譯C/C++時(shí),會(huì)存在找不到頭文件的情況,下面這篇文章主要給大家介紹了關(guān)于VScode中添加頭文件和源文件(C/C++)的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單通訊錄功能

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單通訊錄功能

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單通訊錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Qt編寫(xiě)地圖綜合應(yīng)用之繪制覆蓋物折線

    Qt編寫(xiě)地圖綜合應(yīng)用之繪制覆蓋物折線

    折線圖目前應(yīng)用最廣的也是用來(lái)繪制各種軌跡,折線圖其實(shí)就是后面動(dòng)態(tài)軌跡圖、飛機(jī)航線圖的前身,公用的一個(gè)方法addPolyline。本文將教大家如何通過(guò)QT實(shí)現(xiàn)覆蓋物折線圖,快來(lái)學(xué)習(xí)吧
    2021-12-12
  • C語(yǔ)言算法的時(shí)間復(fù)雜度和空間復(fù)雜度

    C語(yǔ)言算法的時(shí)間復(fù)雜度和空間復(fù)雜度

    這篇文章主要介紹了C語(yǔ)言算法的時(shí)間復(fù)雜度和空間復(fù)雜度,算法在編寫(xiě)成可執(zhí)行程序后,運(yùn)行時(shí)需要耗費(fèi)時(shí)間資源和空間(內(nèi)存)資源,更多相關(guān)需要的朋友可以參考一下
    2022-07-07
  • 詳解C語(yǔ)言如何計(jì)算結(jié)構(gòu)體大小(結(jié)構(gòu)體的內(nèi)存對(duì)齊)

    詳解C語(yǔ)言如何計(jì)算結(jié)構(gòu)體大小(結(jié)構(gòu)體的內(nèi)存對(duì)齊)

    結(jié)構(gòu)體的內(nèi)存對(duì)齊是有關(guān)結(jié)構(gòu)體內(nèi)容的很重要一個(gè)知識(shí)點(diǎn),主要考察方式是計(jì)算結(jié)構(gòu)體的字節(jié)大小,所以本文就給大家詳細(xì)介紹一下C語(yǔ)言如何計(jì)算結(jié)構(gòu)體大小,文中的代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • C語(yǔ)言詳細(xì)分析常見(jiàn)字符串函數(shù)與模擬實(shí)現(xiàn)

    C語(yǔ)言詳細(xì)分析常見(jiàn)字符串函數(shù)與模擬實(shí)現(xiàn)

    字符串函數(shù)(String?processing?function)也叫字符串處理函數(shù),指的是編程語(yǔ)言中用來(lái)進(jìn)行字符串處理的函數(shù),如C,pascal,Visual以及LotusScript中進(jìn)行字符串拷貝,計(jì)算長(zhǎng)度,字符查找等的函數(shù)
    2022-03-03
  • C++文件IO流及stringstream流讀寫(xiě)文件和字符串操作詳解

    C++文件IO流及stringstream流讀寫(xiě)文件和字符串操作詳解

    本文詳細(xì)介紹C++中的文件IO流和stringstream流的使用方法,包括文件的打開(kāi)、讀寫(xiě)操作,以及字符串的輸入輸出、轉(zhuǎn)換等操作。同時(shí)提供實(shí)用的示例代碼和技巧,幫助讀者更好地掌握這兩種流的使用
    2023-04-04

最新評(píng)論