小言_互联网的博客

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

254人阅读  评论(0)

目录

第1题:存在重复元素

第2题:2的幂

第3题:移动零

第4题:缺失数字

第5题:第一个错误的版本

第6题:按摩师

第7题:3的幂

第8题:求1+2+...+n

第9题:数值变为0的步数

第10题:有多少小于当前数字的数


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

第1题:存在重复元素

试题要求如下:

回答(C语言):


  
  1. int compare(const void *a, const void *b){
  2. return *( int*)a - *( int*)b;
  3. }
  4. bool containsDuplicate(int* nums, int numsSize){
  5. qsort(nums, numsSize, sizeof( int), compare);
  6. for( int i = 0; i < numsSize - 1; i++){
  7. if(nums[i] == nums[i+ 1]){
  8. return true;
  9. }
  10. }
  11. return false;
  12. }

运行效率如下所示:


第2题:2的幂

试题要求如下:

回答(C语言):


  
  1. bool isPowerOfTwo(int n){
  2. while(n% 2== 0&&n> 1){
  3. n=n/ 2;
  4. }
  5. if(n== 1){
  6. return true;
  7. }
  8. else{
  9. return false;
  10. }
  11. }

运行效率如下所示:


第3题:移动零

试题要求如下:

回答(C语言):


  
  1. void moveZeroes(int* nums, int numsSize){
  2. for( int i= 0,j = 0,temp= 0; j < numsSize;++j) {
  3. if(nums[j] != 0) {
  4. temp = nums[i];
  5. nums[i] = nums[j];
  6. nums[j] = temp;
  7. ++i;
  8. }
  9. }
  10. }

运行效率如下所示:


第4题:缺失数字

试题要求如下:

回答(C语言):


  
  1. int missingNumber(int* nums, int numsSize){
  2. int ans = numsSize*(numsSize + 1)/ 2, i;
  3. for(i = 0; i < numsSize; i++){
  4. ans -= nums[i];
  5. }
  6. return ans;
  7. }

运行效率如下所示:


第5题:第一个错误的版本

试题要求如下:

回答(C语言):


  
  1. // Forward declaration of isBadVersion API.
  2. bool isBadVersion(int version);
  3. int firstBadVersion(int n) {
  4. long low= 1;
  5. long high=n;
  6. while(low<high){
  7. long mid=(low+high)/ 2;
  8. if(!isBadVersion(mid)){
  9. low=mid+ 1;
  10. }
  11. else{
  12. high=mid;
  13. }
  14. }
  15. return low;
  16. }

运行效率如下所示:


第6题:按摩师

试题要求如下:

回答(C语言):


  
  1. //设dp[i]表示第i个房屋之前的最高金额,则求dp[numsSize-1]即可。
  2. //状态转移方程:
  3. //dp[0] = nums[0]
  4. //dp[1] = max(nums[1], nums[0])
  5. //dp[i] = max(dp[i-2] + nums[i], dp[i-1])(i>=2)
  6. int massage(int* nums, int numsSize){
  7. if(!nums || numsSize == 0)
  8. return 0;
  9. if(numsSize == 1)
  10. return nums[ 0];
  11. int *dp = ( int*) malloc( sizeof( int) * numsSize);
  12. dp[ 0] = nums[ 0];
  13. dp[ 1] = fmax(nums[ 1], nums[ 0]);
  14. for( int i = 2; i < numsSize; i++){
  15. dp[i] = fmax(dp[i -2] + nums[i], dp[i -1]);
  16. }
  17. return dp[numsSize - 1];
  18. }

运行效率如下所示:


第7题:3的幂

试题要求如下:

回答(C语言):


  
  1. bool isPowerOfThree(int n){
  2. if (n == 0)
  3. return false;
  4. while(n% 3== 0){
  5. n/= 3;
  6. }
  7. if(n== 1)
  8. return true;
  9. return false;
  10. }

运行效率如下所示:


第8题:求1+2+...+n

试题要求如下:

回答(C语言):


  
  1. //(1)如果多个变量均非0(包括None、False等),那么返回最后一个变量的值。如3 and 2 and 'a'的返回值为'a';
  2. //(2)如果多个变量中存在0值,则返回第一个0值。如1 and 'a' and 0 and None的返回值为0。
  3. int sumNums(int n){
  4. int res = n;
  5. n && (res += sumNums(n -1));
  6. return res;
  7. }

运行效率如下所示:


第9题:数值变为0的步数

试题要求如下:

回答(C语言):


  
  1. int numberOfSteps (int num){
  2. int cou= 0;
  3. while(num!= 0){
  4. if(num% 2== 0){
  5. num/= 2;
  6. }
  7. else{
  8. num-= 1;
  9. }
  10. cou++;
  11. }
  12. return cou;
  13. }

运行效率如下所示:


第10题:有多少小于当前数字的数

试题要求如下:

回答(C语言):


  
  1. /**
  2. * Note: The returned array must be malloced, assume caller calls free().
  3. */
  4. int* smallerNumbersThanCurrent(int* nums, int numsSize, int* returnSize){
  5. int* data_buf=( int*) malloc( sizeof( int)*(numsSize+ 1));
  6. memset(data_buf, '\0', sizeof( int)*(numsSize+ 1));
  7. for( int i= 0;i<numsSize;i++){
  8. for( int j= 0;j<numsSize;j++){
  9. if(nums[j]<nums[i])
  10. data_buf[i]++;
  11. }
  12. }
  13. data_buf[numsSize]= '\0';
  14. *returnSize=numsSize;
  15. return data_buf;
  16. }

运行效率如下所示:


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