写点什么

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

发布于: 2021 年 03 月 22 日
力扣(LeetCode)刷题,简单题(第16期)

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


第 1 题:数组异或操作


试题要求如下:



回答(C 语言):


int xorOperation(int n, int start){    int* data_buf = (int*)malloc(sizeof(int) * n);    int temp = 0;     memset(data_buf,0,sizeof(int) * n);     for(int i = 0;i < n;i++){        data_buf[i] = start+2*i;    }     temp = data_buf[0];     for(int i = 1;i < n;i++){        temp ^= data_buf[i];    }     return temp;}
复制代码


运行效率如下所示:





第 2 题:交换数字


试题要求如下:



解答思路:


异或思路:a ^ b = c c ^ b = a a ^ c = b


回答(C 语言):


/** * Note: The returned array must be malloced, assume caller calls free(). */int* swapNumbers(int* numbers, int numbersSize, int* returnSize){    numbers[0] ^= numbers[1];    numbers[1] ^= numbers[0];    numbers[0] ^= numbers[1];        *returnSize = numbersSize;    return numbers;}
复制代码


运行效率如下所示:





第 3 题:按既定顺序创建目标数组


试题要求如下:



回答(C 语言):


/** * Note: The returned array must be malloced, assume caller calls free(). */int* createTargetArray(int* nums, int numsSize, int* index, int indexSize, int* returnSize){    int *returned = calloc(numsSize,sizeof(int));     for(int i=0;i<numsSize;i++){        for(int j=numsSize-1;j>index[i];j--){            returned[j] = returned[j-1];        }         returned[index[i]]=nums[i];    }     *returnSize = numsSize;    return returned;}
复制代码


运行效率如下所示:





第 4 题:数组中两元素的最大乘积


试题要求如下:



回答(C 语言):


int maxProduct(int* nums, int numsSize){    int m = 0, n = 0; 	for (int i = 0; i < numsSize; i++){		if (nums[i] > m) {			n = m;			m = nums[i];		}		else			n = n > nums[i] ? n : nums[i];	}    	return (m - 1)*(n - 1);}
复制代码


运行效率如下所示:





第 5 题:删除链表中的节点


试题要求如下:



回答(C 语言):


/** * Definition for singly-linked list. * struct ListNode { *     int val; *     struct ListNode *next; * }; */void deleteNode(struct ListNode* node) {    node->val = node->next->val;    node->next = node->next->next;  }
复制代码


运行效率如下所示:





第 6 题:在既定时间做作业的学生人数


试题要求如下:



回答(C 语言):


int busyStudent(int* startTime, int startTimeSize, int* endTime, int endTimeSize, int queryTime){    int cou = 0;     for(int i = 0;i < startTimeSize;i++){        if((startTime[i] <= queryTime) && (endTime[i] >= queryTime)){            cou++;        }    }     return cou;}
复制代码


运行效率如下所示:





第 7 题:二进制链表转整数


试题要求如下:



回答(C 语言):


/** * Definition for singly-linked list. * struct ListNode { *     int val; *     struct ListNode *next; * }; */ int getDecimalValue(struct ListNode* head){    int sum = 0;     while (head != NULL) {        sum = (sum<<1) + head->val;        head = head->next;    }        return sum;}
复制代码


运行效率如下所示:





第 8 题:分割平衡字符串


试题要求如下:



回答(C 语言):


int balancedStringSplit(char * s){    int len = strlen(s);    int temp = 0,cou = 0;     for(int i = 0;i < len;i++){        if(s[i] == 'R'){            temp++;        }        if(s[i] == 'L'){            temp--;        }        if(temp == 0){            cou++;        }    }     return cou;}
复制代码


运行效率如下所示:





第 9 题:不用加号的加法


试题要求如下:



解答思路:


普通加法中:例如 13 + 8


如果我们先将对应位子的数字相加,不考虑进位的话,应该是:


3 + 8 = 1 进位为 1


1 + 0 = 1 进位为 0


之后我们将个位的进位 1 与十位上的 1 相加


1 + 1 = 2 进位为 0


如果我们将此方法带入到二进制的运算中是否可行呢?


13 => 1101


8 => 1000


回答(C 语言):


int add(int a, int b){    int sum = 0, carry = 0;     while(b != 0) {        sum = a^b;			// 异或计算未进位的部分        carry = (unsigned int)(a&b)<<1;	// 进位部分        a = sum;			// 保存未进位部分,再次计算        b = carry;			// 保存进位部分,再次计算    }     return a;	// 最后无进位,异或的结果即加法结果}
复制代码


运行效率如下所示:





第 10 题:字符串相加


试题要求如下:



回答(C 语言):


char * addStrings(char * num1, char * num2){    char* buf = (char*)malloc(sizeof(char) * 5101);    int i = strlen(num1) - 1, j = strlen(num2) - 1, k = 0, carry = 0;        while(i >= 0 || j >= 0 || carry != 0){        if(i >= 0) carry += num1[i--] - '0';        if(j >= 0) carry += num2[j--] - '0';        buf[k++] = carry % 10 + '0';        carry /= 10;    }        buf[k] = '\0';        i = 0;    j = k - 1;    while(i < j){        char c = buf[i];        buf[i] = buf[j];        buf[j] = c;        i++;        j--;    }        return buf;}
复制代码


运行效率如下所示:



发布于: 2021 年 03 月 22 日阅读数: 5
用户头像

【研究方向】物联网、嵌入式、AI、Python 2018.02.09 加入

【公众号】美男子玩编程

评论

发布
暂无评论
力扣(LeetCode)刷题,简单题(第16期)