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

歡迎訪問 生活随笔!

生活随笔

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

生活经验

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

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

目錄

第1題:二叉搜索樹的范圍和

第2題:綴點成線

第3題:刪除回文子序列

第4題:奇數值單元格的數目

第5題:重新排列字符串

第6題:方陣中戰斗力最弱的 K 行

第7題:檢查整數及其兩倍數是否存在

第8題:統計最大組的數目

第9題:存在連續三個奇數的數組

第10題:替換所有的問號


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

第1題:二叉搜索樹的范圍和

試題要求如下:

?

回答(C語言):

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

運行效率如下所示:


第2題:綴點成線

試題要求如下:

解答思路:

直線的兩點式方程(y-y2)/(y1-y2) = (x-x2)/(x1-x2),取前兩個點組成直線,判斷后面的點是否在直線上。

回答(C語言):

bool checkStraightLine(int** coordinates, int coordinatesSize, int* coordinatesColSize){if(coordinatesSize==2) return true;for(int i=2;i<coordinatesSize;i++){if((coordinates[i][0]-coordinates[1][0])*(coordinates[0][1]-coordinates[1][1])!=(coordinates[i][1]-coordinates[1][1])*(coordinates[0][0]-coordinates[1][0])){return false;}}return true;
}

運行效率如下所示:


第3題:刪除回文子序列

試題要求如下:

解答思路:

因為是刪除回文子序列(就是順序不變的情況下,可以算隔開的字符),所以只有三種情況。

1、當字符串為空時,返回0。

2、當整字符串為回文序列時,刪一次,返回1。

3、當整字符串不為回文序列時,最多是刪除兩次,一次刪除所有a,一次刪除所有b,返回2。

回答(C語言):

int removePalindromeSub(char * s){if(strlen(s) == 0)return 0;int low = 0,high = strlen(s)-1;while(low < high)if(s[low++] != s[high--])return 2;return 1;
}

運行效率如下所示:


第4題:奇數值單元格的數目

試題要求如下:

回答(C語言):

int oddCells(int n, int m, int** indices, int indicesSize, int* indicesColSize){int arr[n][m];*indicesColSize=2;int count=0;for(int i=0;i<n;i++){//數組初始化for(int j=0;j<m;j++){arr[i][j]=0;}}for(int i=0;i<indicesSize;i++){//橫向加1for(int j=0;j<m;j++){arr[indices[i][0]][j]++;}    }for(int i=0;i<indicesSize;i++){//縱向加1for(int j=0;j<n;j++){arr[j][indices[i][1]]++;}    }for(int i=0;i<n;i++){//遍歷奇數for(int j=0;j<m;j++){if(arr[i][j]%2==1)count++;}}   return count;
}

運行效率如下所示:


第5題:重新排列字符串

試題要求如下:

回答(C語言):

char * restoreString(char * s, int* indices, int indicesSize){char* temp = (char*)malloc(sizeof(char)*(indicesSize+1));for(int i=0; i<indicesSize; i++)temp[indices[i]] = s[i];temp[indicesSize] = '\0';return temp;
}

運行效率如下所示:


第6題:方陣中戰斗力最弱的 K 行

試題要求如下:

回答(C語言):

/*** Note: The returned array must be malloced, assume caller calls free().*/int cmp(const void *a, const void *b){return *(int*)a - *(int*)b;}int* kWeakestRows(int** mat, int matSize, int* matColSize, int k, int* returnSize){int *result = (int*)malloc(matSize * sizeof(int));*returnSize = k;int *res = (int*)malloc(k * sizeof(int));for(int i = 0; i < matSize; i++){//統計1的個數result[i] = 0;for(int j = 0; j < matColSize[i]; j++){if(mat[i][j] == 1){result[i] += matSize;}else{break;}}result[i] += i;}qsort(result, matSize, sizeof(result[0]), cmp);for(int i = 0; i < k; i++){res[i] = result[i] % matSize;}return res;
}

運行效率如下所示:


第7題:檢查整數及其兩倍數是否存在

試題要求如下:

解答思路:

暴力破解。遍歷數組,找出數組中的偶數,只有偶數才能是其它數的兩倍,然后在這個條件下,給這個偶數除以2,以temp變量保存,然后再次遍歷數組,找到是否數組中有值與temp相等。

回答(C語言):

bool checkIfExist(int* arr, int arrSize){int temp;for(int i = 0;i<arrSize;i++){if(arr[i]%2 == 0){temp = arr[i]/2;for(int j=0;j<arrSize;j++){if(temp == arr[j] && i!=j)return true;}}}return false;
}

運行效率如下所示:


第8題:統計最大組的數目

試題要求如下:

解答思路:

1、定義數組,并依據求出某個和值出現的次數(按照題意,定義46個數組大小就可以了);

2、一次遍歷求得的數組,統計鍵值最大時出現的次數。

回答(C語言):

#define MAXSIZE 100int IntergerSum(int n) {int res = 0;while (n) {res += n % 10;n = n / 10;}return res;
}int countLargestGroup(int n){int arr[MAXSIZE] = {0};int cnt, val;for (int i = 1; i <= n; i++) {arr[IntergerSum(i)]++;}val = arr[1];cnt = 1;for (int i = 2; i < MAXSIZE; i++) {if (arr[i] == val) {cnt++;} else if (arr[i] > val) {val = arr[i];cnt = 1;}}return cnt;
}

運行效率如下所示:


第9題:存在連續三個奇數的數組

試題要求如下:

回答(C語言):

bool threeConsecutiveOdds(int* arr, int arrSize){for(int i=0;i<arrSize-2;i++){if(arr[i]%2==1&&arr[i+1]%2==1&&arr[i+2]%2==1)return true;}return false;
}

運行效率如下所示:


第10題:替換所有的問號

試題要求如下:

解答思路:

遍歷字符串,如果當前字符為'?',用'a'開始嘗試,直到找到一個字符,滿足前后字符都與當前字符不同,進行替換。

回答(C語言):

char * modifyString( char * s ){for( int i = 0 ; s[i] != '\0' ; i++ ) {if( s[i] == '?' ) {char ch = 'a';while(( i > 0 && ch == s[ i - 1 ]) || (s[ i +1 ] != '\0' && ch == s[ i + 1 ])) {ch++;}s[i] = ch;}}return s;
}

運行效率如下所示:

總結

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

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