力扣(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期)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在1分钟内CSDN收益1000万,走
- 下一篇: 基于Struts2框架的名片管理系统