国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【從零開始寫博客】數(shù)組運(yùn)用:數(shù)組排序,字符串搜索和矩陣模擬(day2)

這篇具有很好參考價(jià)值的文章主要介紹了【從零開始寫博客】數(shù)組運(yùn)用:數(shù)組排序,字符串搜索和矩陣模擬(day2)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

代碼隨想錄刷題60天

【數(shù)組】Day1


目錄

代碼隨想錄刷題60天

引例一:

排序算法

直接插入(直接排序)

冒泡排序

雙指針?lè)?/p>

快速排序(遞歸法)

引例二

?編輯

滑動(dòng)窗口

引例三

總結(jié)與心得


引例一:

【從零開始寫博客】數(shù)組運(yùn)用:數(shù)組排序,字符串搜索和矩陣模擬(day2),算法,leetcode,數(shù)據(jù)結(jié)構(gòu)

該題為leetcode上一道簡(jiǎn)單難度的題,該題需要解決的問(wèn)題是對(duì)已有數(shù)組中的數(shù)據(jù)進(jìn)行平方處理后排序。其中數(shù)據(jù)的平方處理并非本體的重點(diǎn)所在,而重點(diǎn)在于對(duì)數(shù)組進(jìn)行排序。因此對(duì)數(shù)據(jù)進(jìn)行怎樣排序才是本題的關(guān)鍵所在,筆者也將在下面介紹幾種排序算法。

排序算法

直接插入(直接排序)

class Solution
 {
public:
    vector<int> sortedSquares(vector<int>& nums) 
    {
       int temp,i,j;
		nums[0] = nums[0] * nums[0];
		for (i = 1; i < nums.size(); i++)
		{
			nums[i] = nums[i] * nums[i];
			if (nums[i] < nums[i - 1])
			{
				temp = nums[i];
				for (j = i - 1; j >= 0 && temp < nums[j]; j--)
					//這里必須先判斷j是否是負(fù)數(shù),否則會(huì)造成數(shù)組角標(biāo)錯(cuò)誤
					nums[j + 1] = nums[j];
				nums[j + 1] = temp;//j超出了for循環(huán)的作用域,因此必須在開頭聲明。
			}
		}
		return nums;
    }
};

冒泡排序

class Solution
{
public:
	vector<int> sortedSquares(vector<int>& nums)
	{
		int temp,i,j;
		nums[0] = nums[0] * nums[0];
		for (i = 1; i < nums.size(); i++)
		{
			for (int j = 1; j < nums.size(); j++)
			{
				if (i == 1)
					nums[j] = nums[j] * nums[j];
				if (nums[j] < nums[j - 1])
				{
					int temp = nums[j - 1];
					nums[j - 1] = nums[j];
					nums[j] = temp;
				}
			}
			
		}
		return nums;
	}
};

以上兩種排序是最基本的兩種排序算法,也初學(xué)者最容易理解并寫出的兩種排序算法,但由于兩種算法都使用兩層for循環(huán)嵌套,所以時(shí)間復(fù)雜度都是n的平方,時(shí)間復(fù)雜度較高,所以從效率方面考慮,這兩種算法是不夠理想的。而接下來(lái)的兩種方法通過(guò)借助一些手段從而將算法的復(fù)雜度降低。

雙指針?lè)?/h4>
class Solution
{
public:
	vector<int> sortedSquares(vector<int>& nums)
	{
		vector<int> res(nums.size());
		int i = 0, j = nums.size()-1;
		int k = j;
		while (i <= j)
		{
			if ((nums[i] * nums[i]) < (nums[j] * nums[j]))
				res[k--] = (nums[j] * nums[j--]);
			else
				res[k--] = (nums[i] * nums[i++]);
		}
		return res;
	}
};

該方法利用了“原本數(shù)組元素中,成員都是有序排列”的這一條件來(lái)進(jìn)行思考,我們可以發(fā)現(xiàn)當(dāng)所有成員取平方時(shí),其最大值一定會(huì)出現(xiàn)在數(shù)組的左界或右界,利用這一特點(diǎn),每次將最大元素從左右端取出,用一個(gè)數(shù)組進(jìn)行存儲(chǔ),便得到我們需要的結(jié)果。這種利用已有條件設(shè)計(jì)的排序方法在本題中是最優(yōu)解。

快速排序(遞歸法)

int Paritition(int arr[],int low,int high){
	int pivotLoc = arr[low];//將數(shù)組的第一個(gè)元素作為基準(zhǔn)值
	int temp;

	while (low < high) {
		while (low < high && arr[high] >= pivotLoc)
			--high;//從右界開始,將第一個(gè)比基準(zhǔn)值小的元素交換到左界(基準(zhǔn)值于左界)
        temp = arr[low];
		arr[low] = arr[high];
		arr[high] = temp;//交換操作

		while (low < high && arr[low] <= pivotLoc)
			++low;//從
		temp = arr[low];
		arr[low] = arr[high];
		arr[high] = temp;//從左界開始,將第一個(gè)比基準(zhǔn)值大的元素與基準(zhǔn)值交換位置

	}
	return low;//返回此時(shí)的基準(zhǔn)值角標(biāo)
}

void QSort(int arr[], int n, int low, int hight) {
	int pivotloc;
	if (low < hight) {
		pivotloc = Paritition(arr, low, hight);
		QSort(arr, n, low, pivotloc - 1);
		QSort(arr, n, pivotloc + 1, hight);
	}
}

快速排序算法定義了兩個(gè)指針一個(gè)指向數(shù)組頭m一個(gè)指向數(shù)組尾n,然后以頭指針為基準(zhǔn)值先從尾指針開始向后找比基準(zhǔn)值小的元素,找的之后交換m,n所指向的值,此時(shí)n所指向的值就是基準(zhǔn)值,m開始向后找,找到比基準(zhǔn)值大的交換。

在數(shù)組元素本身無(wú)序的情況下,這種排序算法往往有著較高的效率。

引例二

【從零開始寫博客】數(shù)組運(yùn)用:數(shù)組排序,字符串搜索和矩陣模擬(day2),算法,leetcode,數(shù)據(jù)結(jié)構(gòu)

這道題有些類似于在字符串中尋找最長(zhǎng)的連續(xù)相似字符。這道題我們當(dāng)然可以使用暴力匹配進(jìn)行處理,但這樣處理在面對(duì)一些比較復(fù)雜的字符串時(shí),往往效率不容樂(lè)觀,因此我們可以借助一些巧妙方法來(lái)優(yōu)化復(fù)雜度。?

滑動(dòng)窗口

class Solution
{
public:
	int minSubArrayLen(int target, vector<int>& nums)
	{
		int i=0, j;
		int sum = 0;
		int len = 0;
		for (j = 0; j < nums.size(); j++)
		{
			sum += nums[j];
			while (sum >= target)
			{
				if (len == 0)len = (j - i + 1);
				len = len > (j - i + 1) ? (j - i + 1): len;
				sum -= nums[i++];
			}
		}
		return len;
	}
};

通過(guò)不斷調(diào)整子數(shù)組的起始位置和終止位置,從而得到我們想要的結(jié)果。這種方法可以理解為雙指針的一種。

引例三

【從零開始寫博客】數(shù)組運(yùn)用:數(shù)組排序,字符串搜索和矩陣模擬(day2),算法,leetcode,數(shù)據(jù)結(jié)構(gòu)

?該題不涉及算法,是一道典型的模擬題,我們需要通過(guò)模擬螺旋順序打印其過(guò)程。本題也重點(diǎn)考察做題者對(duì)矩陣邊界的理解程度。

具體實(shí)例代碼如下

class Solution 
{
public:
    vector<vector<int>> generateMatrix(int n)
    {
        vector<vector<int>> res(n, vector<int>(n, 0));
        int loop = (n - 1) / 2 + 1;
        int startX=0, startY=0;
        int count = 1;
        int offset = 0;
        
        while (loop > 0)
        {
            int i, j;
            for (i = startX; i < n - 1 - offset; i++) 
                res[startY][i] += count++;
            for (j = startY; j < n - 1 - offset; j++)
                res[j][i] += count++;
            for (; i > 0 + offset; i--)
                res[j][i] += count++;
            for (; j > 0 + offset; j--)
                res[j][i] += count++;
            startX++;
            startY++;
            offset++;
            loop--;
        }
        if (n / 2 == (n - 1) / 2)
            res[n / 2][n / 2] = n * n;
        //旋轉(zhuǎn)矩陣最內(nèi)層邊長(zhǎng)為1的矩陣由于“右開邊界”而無(wú)法被賦值。
        return res;
    }
};

總結(jié)與心得

· 在數(shù)組的各種問(wèn)題中,對(duì)于數(shù)組邊界開閉的理解會(huì)很大程度影響解決問(wèn)題的思路。

· 在做題過(guò)程中,我們可以通過(guò)一些我們已知的方法與技巧來(lái)優(yōu)化本題的思考邏輯,與此同時(shí)也需要根據(jù)題目已知信息來(lái)簡(jiǎn)化本題的思考邏輯。因此,我們需要在不斷積累各種方法的同時(shí)也要學(xué)會(huì)就題解題。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-576910.html

到了這里,關(guān)于【從零開始寫博客】數(shù)組運(yùn)用:數(shù)組排序,字符串搜索和矩陣模擬(day2)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 數(shù)組排序 sort() 方法 (映射對(duì)含有大小寫的字符串進(jìn)行排序)

    結(jié)論先行: sort() 方法: 用于對(duì)數(shù)組元素進(jìn)行 排序 ,默認(rèn)升序。如果指明了參數(shù),那數(shù)組會(huì)按照 比較函數(shù) 的返回值進(jìn)行排序。 ?? sort() 方法比較兩個(gè)值時(shí),將值發(fā)送給比較函數(shù),根據(jù)返回的(負(fù)、零、正)值對(duì)值進(jìn)行排序。 舉例,a 和 b 兩個(gè)將要被比較的元素: 如果 a-

    2024年04月25日
    瀏覽(93)
  • 【從零開始寫博客】鏈表運(yùn)用:鏈表的增刪查改及反轉(zhuǎn)(day3)

    【從零開始寫博客】鏈表運(yùn)用:鏈表的增刪查改及反轉(zhuǎn)(day3)

    【數(shù)組】day2 【數(shù)組】day1 目錄 鏈表概述 一、鏈表增刪地初次理解 二、鏈表常見六個(gè)操作 三,鏈表的轉(zhuǎn)置 總結(jié) 鏈表是通過(guò)指針將一個(gè)個(gè)節(jié)點(diǎn)串起來(lái)的數(shù)據(jù)結(jié)構(gòu),其優(yōu)點(diǎn)是增刪方便,靈活性強(qiáng)。以下將結(jié)合leetcode上的一些例題介紹鏈表的一些功能和應(yīng)用。 相比數(shù)組依靠覆蓋來(lái)

    2024年02月15日
    瀏覽(19)
  • 【LeetCode】每日一題&&兩數(shù)之和&&尋找正序數(shù)組的中位數(shù)&&找出字符串中第一個(gè)匹配項(xiàng)的下標(biāo)&&在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置

    【LeetCode】每日一題&&兩數(shù)之和&&尋找正序數(shù)組的中位數(shù)&&找出字符串中第一個(gè)匹配項(xiàng)的下標(biāo)&&在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置

    ========================================================================= 主頁(yè)點(diǎn)擊直達(dá): 個(gè)人主頁(yè) 我的小倉(cāng)庫(kù): 代碼倉(cāng)庫(kù) C語(yǔ)言偷著笑: C語(yǔ)言專欄 數(shù)據(jù)結(jié)構(gòu)挨打小記: 初階數(shù)據(jù)結(jié)構(gòu)專欄 Linux被操作記: Linux專欄 LeetCode刷題掉發(fā)記: LeetCode刷題 算法: 算法專欄? C++頭疼記: C++專欄 計(jì)算機(jī)

    2024年02月08日
    瀏覽(37)
  • mysql 解析json字符串、數(shù)組字符串、json數(shù)組字符串

    mysql 解析json字符串、數(shù)組字符串、json數(shù)組字符串

    筆者使用mysql 5.7進(jìn)行了一次json字符串的解析,因?yàn)橐恢痹诟愦髷?shù)據(jù)相關(guān)的數(shù)據(jù)庫(kù)、olap等,太久沒(méi)有用mysql5.x的版本,一些函數(shù)已經(jīng)不知道支不支持,我的同事建議我使用like、rlike模糊匹配的方式,身為數(shù)據(jù)人我不太喜歡用這種手段,因?yàn)樗麄儽容^低效。于是我想這里總結(jié)一下

    2024年02月16日
    瀏覽(31)
  • ES:字符串排序,字符串按照數(shù)字排序

    ES:字符串排序,字符串按照數(shù)字排序

    對(duì)一個(gè)字符串類型的字段進(jìn)行排序通常不準(zhǔn)確,因?yàn)橐呀?jīng)被分詞成多個(gè)詞條了 字段雖然是字符串,但是其實(shí)值是整數(shù), 排序按照字符串轉(zhuǎn)成整數(shù)排序 解決方式:對(duì)字段索引兩次,一次索引分詞(用于搜索),一次索引不分詞(用于排序) 期望按照字符串排序, 不分詞 期望按照

    2024年02月11日
    瀏覽(36)
  • JS中字符串切割為數(shù)組/數(shù)組拼接為字符串

    (1)語(yǔ)法格式: 其中所選分隔符使用雙引號(hào)(“”)或者單引號(hào)(‘’)括起來(lái); 所生成的數(shù)組會(huì)存放于前面定義的數(shù)組變量中。 (2)樣例: JS代碼: 運(yùn)行結(jié)果: (3)其他用法: ①當(dāng)所選分隔符為空時(shí),返回的數(shù)組即將每個(gè)字符分割出來(lái): JS代碼: 運(yùn)行結(jié)果: ②分隔

    2024年02月12日
    瀏覽(32)
  • 從鍵盤輸入一個(gè)字符串,將此字符串按字符的ASCII碼值從小到大排序,并顯示排序后的字符串。

    從鍵盤輸入一個(gè)字符串,將此字符串按字符的ASCII碼值從小到大排序,并顯示排序后的字符串。

    題面: 字符串排序:要求編寫程序,將給定字符串中的字符,按照ASCII碼順序從小到大排序后輸出。 輸入格式: 輸入是一個(gè)以回車結(jié)束的非空字符串。 輸出格式: 輸出排序后的結(jié)果字符串。 輸入樣例: bfh3q487ybefg734 輸出樣例: 3344778bbeffghqy 思路: Dwl同學(xué)一開始給我的代碼

    2024年02月05日
    瀏覽(96)
  • Python 從字符串開始匹配

    從字符串開始匹配單個(gè)字符串 從字符串開始匹配多個(gè)字符串,匹配字符串以 元祖 的形式存儲(chǔ) re.match() 從字符串的開始進(jìn)行匹配 Try to apply the pattern at the start of the string, returning a Match object, or None if no match was found. 注意: re.match() 的結(jié)果是對(duì)象,需要 .group() 獲得匹配結(jié)果 re.s

    2024年02月13日
    瀏覽(21)
  • vue使用split()將字符串分割數(shù)組join()將數(shù)組轉(zhuǎn)字符串reverse()將數(shù)組反轉(zhuǎn)

    1.split() 將字符串切割成數(shù)組 輸出如下 1.split()不傳參數(shù)默認(rèn)整個(gè)字符串作為數(shù)組的一個(gè)元素,返回包含原始字符串的數(shù)組 2.split(‘’)單引號(hào)不傳參數(shù)默認(rèn)將字符串拆分成一個(gè)個(gè)字符數(shù)組 如輸入?yún)?shù): const str = 123456789’ 拆分后:[‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’

    2023年04月08日
    瀏覽(22)
  • C++基礎(chǔ)容器 -- C的數(shù)組和字符串和C++的數(shù)組和字符串

    數(shù)組 概念 代表內(nèi)存里一組連續(xù)的同類型存儲(chǔ)區(qū) 可以用來(lái)把多個(gè)存儲(chǔ)區(qū)合并成一個(gè)整體 數(shù)組聲明 int arr[10]; 類型名稱int表述數(shù)組里面所有元素的類型 名稱arr是數(shù)組的名稱 整數(shù)10表示數(shù)組里面的元素個(gè)數(shù) 數(shù)組里元素個(gè)數(shù)不可以改變 使用 每個(gè)元素都有下標(biāo),通過(guò)下標(biāo)可以直接訪

    2024年02月06日
    瀏覽(48)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包