日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

力扣(LeetCode)刷题,简单题(第13期)

發布時間:2023/11/27 生活经验 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 力扣(LeetCode)刷题,简单题(第13期) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

第1題:字符的最短距離

第2題:棒球比賽

第3題:判定是否互為字符重排

第4題:島嶼的周長

第5題:兩個數組的交集

第6題:計算質數

第7題:旋轉數組

第8題:二叉樹的層平均數

第9題:修建二叉搜索樹

第10題:分糖果


力扣(LeetCode)定期刷題,每期10道題,業務繁重的同志可以看看我分享的思路,不是最高效解決方案,只求互相提升。

第1題:字符的最短距離

試題要求如下:

解答思路:

從左向右遍歷,記錄上一個字符 C 出現的位置 prev,那么答案就是 i - prev。

從右想做遍歷,記錄上一個字符 C 出現的位置 prev,那么答案就是 prev - i。

這兩個值取最小就是答案。

回答(C語言):

/*** Note: The returned array must be malloced, assume caller calls free().*/
int* shortestToChar(char * S, char C, int* returnSize){int tmp1,tmp2;int len = strlen(S);int* ret = (int *)malloc(len * sizeof(int));for(int i = 0; i < len; i++){tmp1 = 0;for(int j = i; j >= 0; j--){if (S[j] != C) {if (j == 0) {tmp1 = len;} else {tmp1++;}} else {break;}}tmp2 = 0;for(int j = i; j < len; j++){if (S[j] != C) {if (j == len-1) {tmp2 = len;} else {tmp2++;}} else {break;}}ret[i] = tmp1 < tmp2 ? tmp1 : tmp2;}*returnSize = len;return ret;
}

運行效率如下所示:


第2題:棒球比賽

試題要求如下:

解答思路:

堆棧思想。

回答(C語言):

int calPoints(char ** ops, int opsSize){int arr[1000]={0};int score = 0,i = 0,j = 0;while(i < opsSize){switch(ops[i][0]){case 'C':arr[j-1]=0;j-=2;break;case 'D':arr[j]=arr[j-1]*2;break;case '+':arr[j]=arr[j-1]+arr[j-2];break;default://字符串類型轉整數類型arr[j]=atoi(ops[i]);break;}j++;i++;}for(int i=0;i<j;i++){score+=arr[i];}return score;
}

運行效率如下所示:


第3題:判定是否互為字符重排

試題要求如下:

回答(C語言):

bool CheckPermutation(char* s1, char* s2){int i = 0,j = 0,s1Len = 0,s2Len = 0;s1Len=strlen(s1);s2Len=strlen(s2);if(s1Len != s2Len){return false;}char letter[26]={0};for(i=0;i<s1Len;i++){letter[s1[i]-'a']++;}for(i=0;i<s2Len;i++){letter[s2[i]-'a']--;}for(i=0;i<26;i++){if(letter[i]!=0){return false;}}return true;
}

運行效率如下所示:


第4題:島嶼的周長

試題要求如下:

解答思路:

每個島+4周圍四個方向有島嶼則-1。

回答(C語言):

int islandPerimeter(int** grid, int gridSize, int* gridColSize){int circle = 0;for (int i = 0; i < gridSize; i++) {for (int j = 0; j < (*gridColSize); j++) {if (grid[i][j] == 1) {circle +=4;if (i > 0 && grid[i-1][j] == 1) {circle--;}if ((i + 1) < gridSize && grid[i + 1][j] == 1){circle--;}if (j > 0 && grid[i][j - 1] == 1) {circle--;}if ((j + 1) < (*gridColSize) && grid[i][j + 1] == 1){circle--;}}}        }return circle;
}

運行效率如下所示:


第5題:兩個數組的交集

試題要求如下:

解答思路:

使用哈希表查詢:對數組1進行映射,將數組元素作為下標,對散列表相應元素++;遍歷數組2,同樣將數組元素作為下標,判斷該下標處元素是否有數值(在數組1中是否存在)。

回答(C語言):

運行效率如下所示:


第6題:計算質數

試題要求如下:

解答思路:

質數是指在大于1的自然數中,除了1和它本身以外不再有其他因數的自然數。

厄拉多塞篩法:

回答(C語言):

int countPrimes(int n)
{int *isPrime = (int*)malloc(sizeof(int) * n);memset(isPrime, 0, sizeof(int) * n);int cnt = 0;for(int i = 2; i < n; i++){if(isPrime[i] == 0){cnt++;for(int j = i + i; j < n; j += i){  //篩去i的倍數isPrime[j] = 1;}}}return cnt;
}

運行效率如下所示:


第7題:旋轉數組

試題要求如下:

解答思路:

使用反轉數組的方法,例如k為3時:

原始數組 : 1 2 3 4 5 6 7

反轉所有數字后 : 7 6 5 4 3 2 1

反轉前 k 個數字后 : 5 6 7 4 3 2 1

反轉后 n-k 個數字后 : 5 6 7 1 2 3 4 --> 結果

回答(C語言):

static void reverse(int* nums, int numsSize, int start, int end)
{int temp = 0;while (start < end){temp = nums[start];nums[start] = nums[end];nums[end] = temp;start++, end--;}
}void rotate(int* nums, int numsSize, int k){k = k % numsSize;reverse(nums, numsSize, 0, numsSize - 1);reverse(nums, numsSize, 0, k - 1);reverse(nums, numsSize, k, numsSize - 1);
}

運行效率如下所示:


第8題:二叉樹的層平均數

試題要求如下:

回答(C語言):

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*//*** Note: The returned array must be malloced, assume caller calls free().*/void helper(struct TreeNode* root, double* sum, double* count, int index, int* head){if(root==NULL){return;}sum[index] += root->val;count[index]++;(*head) = fmax(*head, index);helper(root->left, sum, count, index+1, head);helper(root->right, sum, count, index+1, head);}double* averageOfLevels(struct TreeNode* root, int* returnSize){int NUM = 10000;double* sum = (double*)calloc(NUM, sizeof(double));double* count = (double*)calloc(NUM, sizeof(double));int head = 0;helper(root, sum, count, 0, &head);double* ret = (double*)malloc((head+1)*sizeof(double));for(int i=0; i<head+1; i++) {ret[i] = sum[i]/count[i];}*returnSize = head+1;return ret;
}

運行效率如下所示:


第9題:修建二叉搜索樹

試題要求如下:

回答(C語言):

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/struct TreeNode* trimBST(struct TreeNode* root, int L, int R){if (NULL == root){return NULL;}if (root->val < L){return trimBST(root->right, L, R);}if (R < root->val){return trimBST(root->left, L, R);}root->left = trimBST(root->left, L, R);root->right = trimBST(root->right, L, R);return root;
}

運行效率如下所示:


第10題:分糖果

試題要求如下:

回答(C語言):

int cmpfunc (const void * a, const void * b)
{return ( *(int*)a - *(int*)b );
}int distributeCandies(int* candies, int candiesSize){int cou = 0;qsort(candies, candiesSize, sizeof(int), cmpfunc);for(int i = 0,j = 1;i < candiesSize-1;i++,j = i+1){if(candies[i] != candies[j]){cou++;}}cou++;if(cou < candiesSize/2){return cou;}return candiesSize/2;
}

運行效率如下所示:

總結

以上是生活随笔為你收集整理的力扣(LeetCode)刷题,简单题(第13期)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。