飞道的博客

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

482人阅读  评论(0)

目录

第1题:两个列表的最小索引总和

第2题:反转字符串中的元音字母

第3题:整数反转

第4题:将有序数组转换为二叉搜索树

第5题:第N个泰波那契数

第6题:数组序号转换

第7题:质数排序

第8题:日期之间隔几天

第9题:—年中的第几天

第10题:复写零


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

第1题:两个列表的最小索引总和

试题要求如下:

 

解答思路:

哎,暴力破解。

回答(C语言):


  
  1. /**
  2. * Note: The returned array must be malloced, assume caller calls free().
  3. */
  4. char ** findRestaurant(char ** list1, int list1Size, char ** list2, int list2Size, int* returnSize){
  5. int minNum = list1Size > list2Size ? list2Size : list1Size;
  6. char **res = ( char **) malloc( sizeof( char *) * minNum);
  7. int index = INT_MAX;
  8. int num = 0;
  9. for ( int i = 0; i < list1Size; i++){
  10. for ( int j = 0; j < list2Size; j++) {
  11. if ( strcmp(list1[i], list2[j]) == 0){
  12. if (i + j < index){
  13. index = i + j;
  14. res[ 0] = list1[i];
  15. num = 1;
  16. }
  17. else if (i + j == index){
  18. res[num] = list1[i];
  19. num++;
  20. }
  21. }
  22. }
  23. }
  24. *returnSize = num;
  25. return res;
  26. }

运行效率如下所示:


第2题:反转字符串中的元音字母

试题要求如下:

解答思路:

元音字母:a[ei]、e[i:]、i[ ai]、o[eu]、u[ju:]。

回答(C语言):


  
  1. bool isAEIOU(char c){
  2. return (c== 'a'||c== 'e'||c== 'i'||c== 'o'||c== 'u'||c== 'A'||c== 'E'||c== 'I'||c== 'O'||c== 'U');
  3. }
  4. char * reverseVowels(char * s){
  5. int len = strlen(s);
  6. if(len< 2) return s;
  7. int head= 0, tail=len -1;
  8. while(tail>head){
  9. if(isAEIOU(s[head])&&isAEIOU(s[tail])){
  10. char temp;
  11. temp = s[head];
  12. s[head] = s[tail];
  13. s[tail] = temp;
  14. head++, tail--;
  15. }
  16. else{
  17. if(!isAEIOU(s[head]))head++;
  18. if(!isAEIOU(s[tail]))tail--;
  19. }
  20. }
  21. return s;
  22. }

运行效率如下所示:


第3题:整数反转

试题要求如下:

回答(C语言):


  
  1. #define isOverLength 0
  2. int reverse(int x){
  3. long lRet = 0;
  4. while( 0 != x){
  5. lRet = lRet * 10 + x % 10;
  6. x = x / 10;
  7. }
  8. if(( int)lRet != lRet){
  9. return isOverLength;
  10. }
  11. return ( int)lRet;
  12. }

运行效率如下所示:


第4题:将有序数组转换为二叉搜索树

试题要求如下:

解答思路:

递归法:定位根节点、根节点左边作为左支递归处理、根节点右边作为右支递归处理。

回答(C语言):


  
  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * struct TreeNode *left;
  6. * struct TreeNode *right;
  7. * };
  8. */
  9. struct TreeNode* sortedArrayToBST(int* nums, int numsSize){
  10. int iRoot = 0;
  11. struct TreeNode* pCurNode = NULL;
  12. //1,结束条件
  13. if(( NULL == nums) || ( 0 == numsSize)) return NULL;
  14. //2,初始化
  15. pCurNode = (struct TreeNode*) malloc( sizeof(struct TreeNode));
  16. //3,定位根节点
  17. iRoot = numsSize / 2;
  18. //4,递归处理左右支
  19. pCurNode->val = nums[iRoot];
  20. pCurNode->left = sortedArrayToBST(&nums[ 0], iRoot);
  21. pCurNode->right = sortedArrayToBST(&nums[iRoot + 1], numsSize - iRoot - 1);
  22. return pCurNode;
  23. }

运行效率如下所示:


第5题:第N个泰波那契数

试题要求如下:

回答(C语言):


  
  1. int tribonacci(int n){
  2. if(n== 0) return 0;
  3. if(n== 1||n== 2) return 1;
  4. int dp[n+ 1];
  5. dp[ 0]= 0;
  6. dp[ 1]= 1;
  7. dp[ 2]= 1;
  8. for( int i= 3;i<=n;i++){
  9. dp[i]=dp[i -1]+dp[i -2]+dp[i -3];
  10. }
  11. return dp[n];
  12. }

运行效率如下所示:


第6题:数组序号转换

试题要求如下:

解答思路:

先用二维数组把arr中的数值和下标存储起来,然后对这个二维数组的第1维排序,从前往后,直接修改存储的下标对应的数值即可。

回答(C语言):


  
  1. /**
  2. * Note: The returned array must be malloced, assume caller calls free().
  3. */
  4. int cmp(const void *a, const void *b)
  5. {
  6. return (( int *) a)[ 0] - (( int *) b)[ 0];
  7. }
  8. int *arrayRankTransform(int *arr, int arrSize, int *returnSize)
  9. {
  10. *returnSize = arrSize;
  11. if (arrSize == 0)
  12. {
  13. return arr;
  14. } else if (arrSize == 1)
  15. {
  16. arr[ 0] = 1;
  17. return arr;
  18. }
  19. int dis[arrSize][ 2];
  20. int i, k;
  21. for (i = 0; i < arrSize; i++)
  22. {
  23. dis[i][ 0] = arr[i];
  24. dis[i][ 1] = i;
  25. }
  26. qsort(dis, arrSize, sizeof(dis[ 0]), cmp);
  27. k = 1;
  28. arr[dis[ 0][ 1]] = 1;
  29. for (i = 1; i < arrSize; i++)
  30. {
  31. if (dis[i][ 0] > dis[i - 1][ 0])
  32. {
  33. k++;
  34. }
  35. arr[dis[i][ 1]] = k;
  36. }
  37. return arr;
  38. }

运行效率如下所示:


第7题:质数排序

试题要求如下:

解答思路:

质数有m个,非质数有n个,结果为m!*n!。

注意:计算阶乘int 型会溢出 用long int;不要用科学计数法表示。

回答(C语言):


  
  1. const long long int m= 1000000007;
  2. int prime(int n){
  3. if(n== 1) return 0;
  4. for( int i= 2;i<(n/ 2)+ 1;i++)
  5. if(n%i== 0) return 0;
  6. return 1;
  7. }
  8. int numPrimeArrangements(int n){
  9. int i,p= 0,q;
  10. long long int jq= 1,jp= 1;
  11. for(i= 1;i<=n;i++) if(prime(i)== 1)p++; //i是质数
  12. q=n-p;
  13. for(i= 1;i<=q;i++) jq=(jq*i)%m;
  14. for(i= 1;i<=p;i++)jp=(jp*i)%m;
  15. return (jp*jq)%m;
  16. }

运行效率如下所示:


第8题:日期之间隔几天

试题要求如下:

回答(C语言):


  
  1. int isleap(int y){
  2. return y% 4== 0 && y% 100!= 0 || y% 400== 0;
  3. }
  4. int tab[]={ -1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  5. int getdate(char *date){
  6. int y,m,d,r= 0;
  7. sscanf(date, "%d-%d-%d", &y,&m,&d);
  8. for( int i= 1970; i<y;i++)
  9. if(isleap(i)) r+= 366;
  10. else r+= 365;
  11. for( int i= 1;i<m;i++){
  12. r+=tab[i];
  13. if(i== 2 && isleap(y)) r+= 1;
  14. }
  15. r+=d;
  16. return r;
  17. }
  18. #define intfabs(x) ((x)<0?-(x):(x))
  19. int daysBetweenDates(char * date1, char * date2){
  20. return intfabs(getdate(date1)-getdate(date2) );
  21. }

运行效率如下所示:


第9题:—年中的第几天

试题要求如下:

回答(C语言):


  
  1. int dayOfYear(char * date){
  2. int year= 0,month= 0,day= 0,result= 0,i;
  3. int days[ 12]={ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  4. for(i= 0;i< 4;i++) year=year* 10+date[i] -48;
  5. for(i= 5;i< 7;i++) month=month* 10+date[i] -48;
  6. for(i= 8;i< 10;i++) day=day* 10+date[i] -48;
  7. if(year% 4== 0&&year% 100!= 0||year% 400== 0) days[ 1]= 29;
  8. for(i= 0;i<month -1;i++) result=result+days[i];
  9. result=result+day;
  10. return result;
  11. }

运行效率如下所示:


第10题:复写零

试题要求如下:

回答(C语言):


  
  1. void duplicateZeros(int* arr, int arrSize){
  2. for( int i = 0;i < arrSize;i++){
  3. if(arr[i] == 0){
  4. for( int j = arrSize -2;j >= i;j--)
  5. arr[j+ 1] = arr[j];
  6. i++;
  7. }
  8. }
  9. }

运行效率如下所示:


转载:https://blog.csdn.net/m0_38106923/article/details/108375279
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场