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

歡迎訪問 生活随笔!

生活随笔

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

生活经验

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

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

目錄

第1題:兩數之和2-輸入有序數組

第2題:換酒問題

第3題:山脈數組的峰頂索引

第4題:矩陣中的幸運數

第5題:去掉最低工資和最高工資后的工資平均值

第6題:非遞增順序的最小子序列

第7題:獨一無二的出現次數

第8題:反轉字符串中的單詞3

第9題:玩籌碼

第10題:字母大小寫全排列


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

第1題:兩數之和2-輸入有序數組

試題要求如下:

回答(C語言):

/*** Note: The returned array must be malloced, assume caller calls free().*/
int* twoSum(int* numbers, int numbersSize, int target, int* returnSize) {int* ret = (int*)malloc(sizeof(int) * 2);*returnSize = 2;for (int i = 0; i < numbersSize; ++i) {int low = i + 1, high = numbersSize - 1;while (low <= high) {int mid = (high - low) / 2 + low;if (numbers[mid] == target - numbers[i]) {ret[0] = i + 1, ret[1] = mid + 1;return ret;} else if (numbers[mid] > target - numbers[i]) {high = mid - 1;} else {low = mid + 1;}}}ret[0] = -1, ret[1] = -1;return ret;
}

運行效率如下所示:


第2題:換酒問題

試題要求如下:

回答(C語言):

int numWaterBottles(int numBottles, int numExchange){int temp_numBottles = numBottles;int temp_num = 0;int temp_data = numBottles;while(temp_numBottles >= numExchange){temp_num = temp_numBottles/numExchange;temp_data += temp_num;temp_numBottles %= numExchange;temp_numBottles += temp_num;}return temp_data;
}

運行效率如下所示:


第3題:山脈數組的峰頂索引

試題要求如下:

回答(C語言):

int peakIndexInMountainArray(int* A, int ASize){int i=0;while(A[i]<A[i+1]) i++;return i;
}

運行效率如下所示:


第4題:矩陣中的幸運數

試題要求如下:

解答思路:

注意:題目有說數字都不同,那返回數組的size用行數或者列數都行。

第1次遍歷:存下每行的最小值到數組;

第2次遍歷:存下每列的最大值到數組;

第3次遍歷:滿足條件的加入要返回的結果數組。

回答(C語言):

int* luckyNumbers (int** matrix, int matrixSize, int* matrixColSize, int* returnSize){int i, j;int *ret = (int*)malloc(sizeof(int) * matrixSize);int minRow[matrixSize], maxCol[*matrixColSize];for (i = 0; i < matrixSize; i++) {minRow[i] = INT_MAX;for (j = 0; j < *matrixColSize; j++) {if (matrix[i][j] <= minRow[i]) {minRow[i] = matrix[i][j];}}}for (i = 0; i < *matrixColSize; i++) {maxCol[i] = INT_MIN;for (j = 0; j < matrixSize; j++) {if (matrix[j][i] >= maxCol[i]) {maxCol[i] = matrix[j][i];}}}*returnSize = 0;for (i = 0; i < matrixSize; i++) {for (j = 0; j < *matrixColSize; j++) {if (matrix[i][j] == minRow[i] && matrix[i][j] == maxCol[j]) {ret[*returnSize] = matrix[i][j];(*returnSize)++;}}}return ret;
}

運行效率如下所示:


第5題:去掉最低工資和最高工資后的工資平均值

試題要求如下:

解答思路:

一次遍歷找出最大max、最小min和總和sum,平均值average = (sum - max - min) / (salarySize - 2),沒有難度,只需要注意數據類型即可。

回答(C語言):

double average(int* salary, int salarySize){int max = salary[0];int min = salary[0];int sum = 0;double average = 0;if(salarySize <= 2)return 0;for(int i = 0; i < salarySize; i++){if(max < salary[i])max = salary[i];else if(min > salary[i])min = salary[i];sum += salary[i];}average = (double)(sum - max - min) / (double)(salarySize - 2);return average;
}

運行效率如下所示:


第6題:非遞增順序的最小子序列

試題要求如下:

回答(C語言):

/*** Note: The returned array must be malloced, assume caller calls free().*/
int cmp(int *a,int *b)
{return *b - *a;
}int* minSubsequence(int* nums, int numsSize, int* returnSize)
{qsort(nums,numsSize,sizeof(int),cmp);int left = 0,right = numsSize-1,leftsum = nums[left],rightsum = nums[right];while(left < right){if(leftsum > rightsum){right--;rightsum += nums[right];}else{left++;leftsum +=nums[left];}}*returnSize = left+1;return nums;
}

運行效率如下所示:


第7題:獨一無二的出現次數

試題要求如下:

回答(C語言):

bool uniqueOccurrences(int* arr, int arrSize){int result[2001];int result_nums[2001];memset(result, 0, 2001 * sizeof(int));memset(result_nums, 0, 2001 * sizeof(int));for(int i=0; i < arrSize;++i){if(arr[i] < 0){result[arr[i]*(-1)+1000] += 1;}else{result[arr[i]] += 1;}   }for(int j=0;j < 2001 ;++j){if(result[j]>0){result_nums[result[j]] += 1;}if(result_nums[result[j]]>1){return false;}}return true;
}

運行效率如下所示:


第8題:反轉字符串中的單詞3

試題要求如下:

解答思路:

1、用i和j鎖定單詞的首尾;

2、用revers對s[i]到s[j]進行翻轉;

3、反復執行1、2直到遍歷完字符串結束。

回答(C語言):

void revers(char *s,int i,int j){char temp;while(i<j){temp=s[i];s[i]=s[j];s[j]=temp;i++;j--;}
}char * reverseWords(char * s){int i=0,j=0;int slen=strlen(s);for(int n=0;n<slen;n++){if(s[n]!=' '){i=n;n++;while(s[n]!='\0'&&s[n]!=' '){n++;}j=n-1;revers(s,i,j);}}return s;
}

運行效率如下所示:


第9題:玩籌碼

試題要求如下:

解答思路:

1、首先分析發現:偶數位置轉移到任意偶數位置代價為0,同理奇數位置轉移到任意奇數位置代價也為0;

2、其次,我們簡化籌碼位置,將所有偶數集中到2X位置,所有奇數集中到2X+1(或2X-1)位置;

3、要想代價最小,就是移動數量最小的集合。

4、綜合分析,發現實際上就是統計奇數和偶數的個數,取小者。

回答(C語言):

int minCostToMoveChips(int* chips, int chipsSize){int odd =0, even = 0;for(int i = 0; i < chipsSize; i++){if(chips[i]%2)odd++;elseeven++;}return (odd <= even)? odd: even;
}

運行效率如下所示:


第10題:字母大小寫全排列

試題要求如下:

回答(C語言):

/*** Note: The returned array must be malloced, assume caller calls free().*/
char ** letterCasePermutation(char * S, int* returnSize){int len = strlen(S), size = 1;char **res = (char**)malloc(sizeof(char*)*pow(2, len));*res = (char*)calloc(len + 1, sizeof(char));strcpy(*res, S);for (int i = 0; i < len; i++){if (S[i]>'9'){int k = size;for (int j = 0; j < k; j++){res[k + j] = (char*)calloc(len + 1, sizeof(char));strcpy(res[k + j], res[j]);res[k + j][i] = S[i] < 'a' ? S[i] + 32 : S[i] - 32;size++;}}}*returnSize = size;return res;
}

運行效率如下所示:

總結

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

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