Re: [閒聊] 每日leetcode已回收

看板Marginalman作者 (南爹摳打)時間1年前 (2024/05/31 18:34), 編輯推噓2(200)
留言2則, 2人參與, 1年前最新討論串302/1554 (看更多)
※ 引述《ray90514 ()》之銘言: : 260. Single Number III : 很直覺的全部做xor答案以外會被消掉 : 接下來就是想辦法找出這兩數 這部分就有點卡住 : xor出來該位值1代表兩數該位相異 : 依照該位將數列分成兩部分 : 因為同樣的數也會被分在一起 所以xor後就是答案 : 別問我怎麼想到的== : 還沒看討論不知道有沒有更好的做法 : class Solution { : public: : vector<int> singleNumber(vector<int>& nums) { : int sum = 0; : for(int n : nums){ : sum ^= n; : } : int base = 1; : while(!(sum & base)) : base <<= 1; : int even = 0, odd = 0; : for(int n : nums){ : if(n & base) : even ^= n; : else : odd ^= n; : } : return {odd, even}; : } : }; 一樣 不過base那邊可以利用正負數在bit的表示方法 C# code public class Solution { public int[] SingleNumber(int[] nums) { int xor = 0; foreach (var num in nums) xor ^= num; int diff = xor & (-xor); int num1=0, num2=0; foreach (var num in nums) { if ((num&diff) == 0) num1 ^= num; else num2 ^= num; } return new int[] {num1, num2}; } } -- (づ′・ω・)づ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.96.37 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1717151680.A.5CB.html

05/31 18:35, 1年前 , 1F
大師
05/31 18:35, 1F

05/31 18:35, 1年前 , 2F
大師
05/31 18:35, 2F
文章代碼(AID): #1cMQV0NB (Marginalman)
討論串 (同標題文章)
文章代碼(AID): #1cMQV0NB (Marginalman)