天元建設(shè)集團有限公司招聘信息seo成功的案例和分析
注:本文學(xué)習(xí)借鑒于《代碼隨想錄》
一.介紹數(shù)組
數(shù)組是儲存在連續(xù)內(nèi)存空間中的相同類型數(shù)據(jù)的集合
數(shù)組名的理解:
二.數(shù)組解題法
1.二分查找
適用類型:對于數(shù)組中在范圍查找元素的位置,求解平方根,以及插入元素等。
使用前提:二分查找使用前一定要觀察元素是否已排好位置
二分查找主要有以下兩種寫法:
1.1.左閉右閉[left,right]
對于leedcode這題:力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長平臺
就是典型的第一類寫法
下面是我對于該題的C語言解法代碼:
int search(int* nums, int numsSize, int target)
{int left=0;int right=numsSize-1;while(left<=right){int mid=(left+right)/2;if(nums[mid]<target){left=mid+1;}else if(nums[mid]>target){right=mid-1;}else{return mid;}}return -1;
}
1.2.左閉右開[left,right)
注意點:
int search(int* nums, int numsSize, int target)
{int left=0;int right=numsSize;//注意right現(xiàn)在是被賦值為numsSizewhile(left<right){int mid=(left+right)/2;if(nums[mid]<target){left=mid+1;}else if(nums[mid]>target){right=mid;//由于用邊界為空,所以right=mid,而不是right=mid-1}else{return mid;}}return -1;
}
補充:如果你想問有沒有左開右閉的二分查找,我想說的是有,當(dāng)使用的意義不大,所以作者這里就不講了。
下面是推薦的練習(xí)題:
力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長平臺? ?(69.x 的平?根)
力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長平臺? ? ? ? (367.有效的完全平?數(shù))
這些題可能對你有點難,請加油,我相信你一定可以的。
2.雙指針法(重點)
解釋:雙指針法是定義兩個有關(guān)聯(lián)的變量,可能是指針,也可能是整數(shù),通過他們實現(xiàn)對數(shù)組的操作,使得高效,快捷。
具體的我們來在題目中去感受吧!
力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長平臺
int removeElement(int* nums, int numsSize, int val)
{//雙指針法int src=0;int dest=0;while(src<numsSize){if(nums[src]!=val){nums[dest++]=nums[src++];}else{src++;}}return dest;
}
是不是大呼學(xué)到了。
關(guān)于雙指針的使用場景,大家需要多做題,自己把握,這樣慢慢可能就能感受的啥題目是考察雙指針了。
來再帶著大家看一題:
力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長平臺
對于這題,我們就直接開始雙指針吧!
這題比較特殊,它是有序的,又是問平方,只需要比較負(fù)數(shù)的平方與整數(shù)平方關(guān)系即可,大家想想,如果我們定義兩個指針,一個指向頭,一個指向尾,是不是就可以最快的進行排好序。
看代碼實現(xiàn)
/*** Note: The returned array must be malloced, assume caller calls free().*/
int* sortedSquares(int* nums, int numsSize, int* returnSize)
{*returnSize = numsSize;int* arr=(int*)malloc(numsSize*sizeof(int));int n=0;int m=numsSize-1;int c=numsSize-1;while(n<=m){int i=nums[n]*nums[n];int j=nums[m]*nums[m];if(i>j){arr[c--]=i;n++;}else//j>=i{arr[c--]=j;m--;}}return arr;
}
力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長平臺
力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長平臺
力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長平臺
刷完絕對對于雙指針有一定的使用感覺了。
3.滑動窗口
int minSubArrayLen(int target, int* nums, int numsSize)
{int size=0;int result=INT_MAX;int left=0;int sum=0;for(int right=0;right<numsSize;right++){sum+=nums[right];while(sum>=target){size=right-left+1;result=result<=size?result:size;sum-=nums[left++];}}return result==INT_MAX?0:result;
}
時間復(fù)雜度直接從O(N*N)降到了O(N),可見這種方法的強大。
推薦大家去B站看代碼隨想錄視頻,可能理解更加深入。
下面給大家推薦題目吧:
力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長平臺