1. 程式人生 > 其它 >要想用活Redis,Lua指令碼是繞不過去的坎

要想用活Redis,Lua指令碼是繞不過去的坎

技術標籤:Leetcode(力扣)練題c語言資料結構

題目要求:

一個整型陣列 nums 裡除兩個數字之外,其他數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是O(n),空間複雜度是O(1)。

示例1:

輸入:nums = [4,1,4,6]
輸出:[1,6][6,1]

示例2:

輸入:nums = [1,2,10,4,1,4,3,3]
輸出:[2,10][10,2]

限制:

2 <= nums.length <= 10000

程式碼實現:

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* singleNumbers(int* nums, int numsSize, int* returnSize){ // 先將陣列內的數字相異或,最終得到兩個出現一次的數字相與的結果,其餘重複兩次的數字都相互抵消為0 int ret=0; int i=0; int m=0; int x1=0; int x2=0; for(i=0;i<numsSize;i++) { ret^=nums[i]; } // 找出ret在轉化為二進位制進行儲存時,第m位為1 // 按32位儲存進行計算 while
(m<32) { if(ret&(1<<m)) { break; } else { m++; } } // 分離出x1與x2 for(i=0;i<numsSize;i++) { if(nums[i]&1<<m) { x1^=nums[i]; } else { x2^
=nums[i]; } } int* returnArr = (int*)malloc(sizeof(int*) * 2); returnArr[0]=x1; returnArr[1]=x2; *returnSize = 2; return returnArr; }

總結:

三部曲解這道題目:
在這裡插入圖片描述