摘要:把所有放進(jìn),之后對每一個從最高位找是否存在和當(dāng)前不同的。把多帶帶寫一個函數(shù),結(jié)果了,所以放一起了。。如果有就把放進(jìn)去,當(dāng)前結(jié)果累計到下一個循環(huán)。把所有放進(jìn)里面找出中是否有兩個數(shù)后等于的結(jié)果有就更新第二步根據(jù)
標(biāo)題文字
鏈接:https://leetcode.com/problems...
可以用trie tree來做。把所有num放進(jìn)tree,之后對每一個num從最高位找是否存在和當(dāng)前bit不同的path。把build tree多帶帶寫一個函數(shù),結(jié)果TLE了,所以放一起了。。
public class Solution { public int findMaximumXOR(int[] nums) { /* trie tree: root is the largest bit * 32 bits */ TrieNode root = new TrieNode(); for(int num : nums) { TrieNode node = root; for(int i = 31; i >= 0; i--) { int bit = (num >> i) & 1; if(node.children[bit] == null) node.children[bit] = new TrieNode(); node = node.children[bit]; } } int globalMax = Integer.MIN_VALUE; for(int num : nums) { int local = 0; TrieNode node = root; for(int i = 31; i >= 0; i--) { int bit = (num >> i) & 1; if(node.children[bit ^ 1] != null) { local += (1 << i); node = node.children[bit ^ 1]; } else node = node.children[bit]; } globalMax = Math.max(globalMax, local); } return globalMax; } class TrieNode { TrieNode[] children = new TrieNode[2]; } }
看到discussion還有一種簡單的方法,從最高位開始掃,每次在nums里面找有沒有兩個數(shù)XOR可以等于1。如果有就把1放進(jìn)去,當(dāng)前結(jié)果累計到下一個循環(huán)。用一個set存到第i位位置的數(shù),然后通過XOR就能找到有沒有可以匹配的數(shù)。
把所有num(31, i)放進(jìn)set里面
找出set中是否有兩個數(shù)XOR后等于i = 1的結(jié)果
有就更新globalMax
第二步根據(jù) x ^ y = z, then x ^ z = y
public class Solution { public int findMaximumXOR(int[] nums) { int globalMax = 0, highestBits = 0; for(int i = 31; i >= 0; i--) { // 1000 -> 1100 -> 1110 -> 1111 highestBits = highestBits | (1 << i); Setset = new HashSet(); for(int num : nums) { set.add(num & highestBits); } // find if current bit can be 1 int addOne = globalMax | (1 << i); for(int num : set) { if(set.contains(num ^ addOne)) { globalMax = addOne; break; } } } return globalMax; } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/66549.html
摘要:找符合條件的總數(shù)。雙指針區(qū)間考慮邊界,長度,為空,等。之后的范圍用雙指針和表示。若三個指針的數(shù)字之和為,加入結(jié)果數(shù)組。不要求,所以不用判斷了。同理,頭部兩個指針向后推移,后面建立左右指針夾逼,找到四指針和為目標(biāo)值的元素。 Two Sum Problem Given an array of integers, find two numbers such that they add up ...
摘要:原題目題目有一個不少于四個元素的數(shù)組,計算其中兩個最小值的和。對比我寫的方法比較常規(guī),中采用了的解構(gòu)賦值和箭頭函數(shù) 原題目 Create a function that returns the sum of the two lowest positive numbers given an array of minimum 4 integers. No floats or empty ...
摘要:同時題目假設(shè)每組輸入恰好只有一個答案,并且不能重復(fù)使用同一元素。理解這道題是可以用兩層循環(huán)蠻力解決的,但是效率太低了。如果這兩個元素和大于目標(biāo)數(shù)組,指針左移如果小于,指針右移。如果等于,則返回這兩個元素的位置記得用數(shù)組的數(shù)值加一解法 題目詳情 Given an array of integers that is already sorted in ascending order, fi...
Problem Given an array of integers and an integer k, you need to find the number of unique k-diff pairs in the array. Here a k-diff pair is defined as an integer pair (i, j), where i and j are both nu...
Course Schedule Problem There are a total of n courses you have to take, labeled from 0 to n - 1. Some courses may have prerequisites, for example to take course 0 you have to first take course 1, whi...
摘要:公眾號愛寫給定一個已按照升序排列的有序數(shù)組,找到兩個數(shù)使得它們相加之和等于目標(biāo)數(shù)。函數(shù)應(yīng)該返回這兩個下標(biāo)值和,其中必須小于。示例輸入輸出解釋與之和等于目標(biāo)數(shù)。 公眾號: 愛寫bug(ID:icodebugs) 給定一個已按照升序排列 的有序數(shù)組,找到兩個數(shù)使得它們相加之和等于目標(biāo)數(shù)。 函數(shù)應(yīng)該返回這兩個下標(biāo)值 index1 和 index2,其中 index1 必須小于 index2。...
閱讀 2950·2023-04-25 19:20
閱讀 799·2021-11-24 09:38
閱讀 2056·2021-09-26 09:55
閱讀 2442·2021-09-02 15:11
閱讀 2063·2019-08-30 15:55
閱讀 3619·2019-08-30 15:54
閱讀 3156·2019-08-30 14:03
閱讀 2969·2019-08-29 17:11