力扣(LeetCode)刷题,简单题+中等题(第20期)
目錄
第1題:判斷能否形成等差數(shù)列
第2題:整數(shù)拆分
第3題:魔術(shù)索引
第4題:連續(xù)數(shù)列
第5題:字符串相加
第6題:數(shù)組拆分1
第7題:找出數(shù)組中的幸運(yùn)數(shù)
第8題:期望個(gè)數(shù)統(tǒng)計(jì)
第9題:檢查單詞是否為句中其他單詞的前綴
第10題:"氣球”的最大數(shù)量
力扣(LeetCode)定期刷題,每期10道題,業(yè)務(wù)繁重的同志可以看看我分享的思路,不是最高效解決方案,只求互相提升。
第1題:判斷能否形成等差數(shù)列
試題要求如下:
回答(C語(yǔ)言):
int cmp(const void *a, const void *b)
{return *((int*)a) - *((int*)b);
}bool canMakeArithmeticProgression(int* arr, int arrSize){qsort(arr, arrSize, sizeof(int), cmp);int minus = arr[1] - arr[0];for (int i = 0; i < arrSize; i++) {if (arr[i] != (arr[0] + i * minus)) {return false;}}return true;
}
運(yùn)行效率如下所示:
第2題:整數(shù)拆分
試題要求如下:
解答思路:
1、當(dāng)n <= 3的時(shí)候,由提議n >=2 ,因此當(dāng)n = 2的時(shí)候,只有 1 + 1,因此返回1,當(dāng)n = 3的時(shí)候,2 + 1 ,則返回2,所以n <= 3的時(shí)候直接返回n - 1;
2、當(dāng)n > 3的時(shí)候,我們用動(dòng)態(tài)規(guī)劃,dp[n] = Max(dp[n - 1] * 1, dp[n - 2] * 2,dp[n - 3] * 3 ....,dp[1] * (n - 1))
這里面對(duì)dp中1,2,3的初始化很重要,比如dp[4] = Max(dp[3] * 1, dp[2] * 2, dp[1] * 3),顯然這里面的dp[1],dp[2],dp[3]分別對(duì)應(yīng)的是值1,2,3,所以初始值就是這樣子;
再后面的比如dp[5] = Max(dp[4] * 1, dp[3] * 2, dp[2] * 3, dp[1] * 4),4以及之后的由于都是根據(jù)前面正確計(jì)算得到的,因此不用再初始化,直接在公式里面循環(huán)即可。
回答(C語(yǔ)言):
int integerBreak(int n){if (n <= 3) return n - 1;int* dp = (int*) malloc(sizeof(int) * (n + 1));memset(dp, 0, sizeof(int) * (n + 1));dp[1] = 1;dp[2] = 2;dp[3] = 3;for (int i = 2; i <= n; i++) {for (int j = 1; j < i ; j++) {dp[i] = fmax(dp[i], dp[i - j] * j);}}return dp[n];
}
運(yùn)行效率如下所示:
第3題:魔術(shù)索引
試題要求如下:
回答(C語(yǔ)言):
int findMagicIndex(int* nums, int numsSize){for(int i = 0; i < numsSize; i++){if(nums[i] == i){return i;}}return -1;
}
運(yùn)行效率如下所示:
第4題:連續(xù)數(shù)列
試題要求如下:
回答(C語(yǔ)言):
int maxSubArray(int* nums, int numsSize){int sum = 0;int max = nums[0];if (numsSize < 1)return 0;for (int i = 0; i < numsSize; i++) {sum += nums[i];if (max < sum)max = sum;if (sum < 0)sum = 0; //為負(fù)數(shù)時(shí)忽略其的奉獻(xiàn)為0}return max;
}
運(yùn)行效率如下所示:
第5題:字符串相加
試題要求如下:
解答思路:
回答(C語(yǔ)言):
char* addStrings(char* num1, char* num2) {int i = strlen(num1) - 1, j = strlen(num2) - 1, add = 0;char* ans = (char*)malloc(sizeof(char) * (fmax(i, j) + 3));int len = 0;while (i >= 0 || j >= 0 || add != 0) {int x = i >= 0 ? num1[i] - '0' : 0;int y = j >= 0 ? num2[j] - '0' : 0;int result = x + y + add;ans[len++] = '0' + result % 10;add = result / 10;i--, j--;}// 計(jì)算完以后的答案需要翻轉(zhuǎn)過(guò)來(lái)for (int i = 0; 2 * i < len; i++) {int t = ans[i];ans[i] = ans[len - i - 1], ans[len - i - 1] = t;}ans[len++] = 0;return ans;
}
運(yùn)行效率如下所示:
第6題:數(shù)組拆分1
試題要求如下:
回答(C語(yǔ)言):
int cmp(int *a, int *b) {return *(int *)a > *(int *)b;
}int arrayPairSum(int* nums, int numsSize){int i, j;int sum = 0;if (numsSize < 2) {return 0;}qsort(nums, numsSize, sizeof(int), cmp);for (sum = nums[0], i = 2; i < numsSize; i = i + 2) {sum += nums[i];}return sum;
}
運(yùn)行效率如下所示:
第7題:找出數(shù)組中的幸運(yùn)數(shù)
試題要求如下:
回答(C語(yǔ)言):
int findLucky(int* arr, int arrSize){int ret = -1;int temp[501] = {0};int i = 0;for(; i < arrSize; i++){temp[arr[i]]++;}i = 500; for(; i > 0; i--){if(temp[i] == i)return i;} return ret;
}
運(yùn)行效率如下所示:
第8題:期望個(gè)數(shù)統(tǒng)計(jì)
試題要求如下:
解答思路:
1、如果數(shù)組的長(zhǎng)度scoresSize?<=?0,返回0;
2、利用快速排序?qū)cores進(jìn)行排序;
3、遍歷數(shù)組scores,統(tǒng)計(jì)不相同的元素的個(gè)數(shù)count;
4、返回count。
回答(C語(yǔ)言):
int cmp( const void * a , const void * b ){return *( int * )a - *( int * )b;}int expectNumber( int * scores , int scoresSize ){if( scoresSize <= 0 ){return 0;}qsort( scores , scoresSize , sizeof( int ) , cmp );int count = 1;for( int i = 1 ; i < scoresSize ; i++ ){if( *( scores + i ) != *( scores + i - 1 ) ){count++;}}return count;
}
運(yùn)行效率如下所示:
第9題:檢查單詞是否為句中其他單詞的前綴
試題要求如下:
回答(C語(yǔ)言):
int isPrefixOfWord(char *sentence, char *searchWord)
{int cnt = 1;char *token = NULL;const char space[2] = " ";/* 獲取第一個(gè)子字符串,使用空格分隔 */token = strtok(sentence, space);/* 繼續(xù)獲取其他的子字符串 */while (token != NULL ) {if (strstr(token, searchWord) == token) {return cnt;}cnt++;token = strtok(NULL, space);}return -1;
}
運(yùn)行效率如下所示:
第10題:"氣球”的最大數(shù)量
試題要求如下:
回答(C語(yǔ)言):
#define MIN(a, b) (((a) < (b)) ? (a) : (b))int maxNumberOfBalloons(char * text){int charCount[26] = {0};int i, len, ret;len = strlen(text);for (i = 0; i < len; i++) {charCount[text[i] - 'a']++;}charCount['l' - 'a'] /= 2;charCount['o' - 'a'] /= 2;ret = INT_MAX;ret = MIN(ret, charCount['b' - 'a']);ret = MIN(ret, charCount['a' - 'a']);ret = MIN(ret, charCount['l' - 'a']);ret = MIN(ret, charCount['o' - 'a']);ret = MIN(ret, charCount['n' - 'a']);return ret;
}
運(yùn)行效率如下所示:
總結(jié)
以上是生活随笔為你收集整理的力扣(LeetCode)刷题,简单题+中等题(第20期)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: GitHub开源的超逼真俄罗斯方块游戏
- 下一篇: 10行Python代码实现Web自动化管