目录
力扣(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;
     
    
- 
    
     
    
    
     
      }
     
    
 运行效率如下所示:

文章来源: handsome-man.blog.csdn.net,作者:不脱发的程序猿,版权归原作者所有,如需转载,请联系作者。
原文链接:handsome-man.blog.csdn.net/article/details/106895323