- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试解决这个问题:https://www.interviewstreet.com/challenges/dashboard/#problem/4f9a33ec1b8ea
假设 A 是 n 个数字(A1、A2、A3、...、An)的列表,而 B(B1、B2、B3、...、Bn)是这些数字的排列。我们说 B 是 K-Manipulative 当且仅当它的值如下:
M(B) = min( B1 Xor B2, B2 Xor B3, B3 Xor B4, ... , Bn-1 Xor Bn, Bn Xor B1 ) 不小于 2^K。给你 n 个数字 A1 到 An,你必须找到最大的 K,使得存在这些数字的排列 B,即 K-Manipulative。
输入:
在输入的第一行有一个整数N。第二行输入有N个整数A1到AnN不大于100。Ai 是非负的,适合 32 位整数。
输出:
输出一个整数作为测试的答案。如果没有这样的 K 打印 -1 到输出。
示例输入
313 3 10
示例输出
2
示例输入
41 2 3 4
示例输出
1
解释
第一个 sample 测试这里的列表 A 是 {13, 3, 10}。 A 的一种可能排列是 B = (10, 3, 13)。
对于 B,min( B1 xor B2, B2 xor B3, B3 xor B1 ) = min( 10 xor 3, 3 xor 13, 13 xor 10 ) = min( 9, 14, 7 ) = 7。
因此存在 A 的排列 B,使得 M(B) 不小于 4,即 2^2。但是,不存在 A 的任何排列 B,使得 M(B) 不小于 8,即 2^3。所以K的最大可能值为2。
============================================= ===================================
这是我到目前为止所做的尝试。
尝试 1:贪心算法
这肯定给出了局部最大值,但我不确定这是否给出了全局最大值。
尝试 2:检查给定邻居约束的排列是否存在
这给出了正确的答案,但请注意,在第 4 步中,我们实际上是在检查图形是否具有哈密顿循环,这是一个非常困难的问题。
有什么提示或建议吗?
最佳答案
无需深入研究图论就可以解决这个问题。
rich
建议的属性,是解决这个问题的关键:
Following up on my comment: B1 Xor B2 < 2^K if and only if B1 and B2 agree on all but the K low order bits
根据上述性质,我们只需要找到最多n/2
的最高k每个 A[i] 的每个唯一高阶位的出现次数。
换句话说,在一组值中 A[i] >> k
, 当且仅当这些值中的每一个最多重复 n/2
次,存在一个 k-操纵排列 all the XOR values >= (2^k)
.
假设你有超过n/2
出现任何唯一的高阶位,不可能获得置换 B,所有循环 XOR 都非零,即至少有一个 B[i] XOR B[(i+1) % N]
所有高阶位都变为零,因此 M(B) < 2^k
k = -1
for (bit = (MAX_BITS - 1) to 0) {
HashMap count
for (i = 0 to N - 1) {
higherOrderVal = A[i] >> bit
if (higherOrderVal exists in count) {
count[higherOrderVal] += 1
}
else {
count[higherOrderVal] = 1
}
}
isValid = true
for (element in count) {
if (element > N/2) {
isValid = false
break
}
}
if (isValid) {
k = bit
break
}
}
此解决方案的时间复杂度为 O(M * N)
其中 M
是表示用于表示数字(32 位、64 位等)的最大位数的常数因子,N
是输入数组A的大小。
关于algorithm - 存在约束下的排列(Interview Street - Manipulative Numbers),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11161465/
一段时间以来,我一直在尝试从 Google 街景中获取数据。出于研究目的,我需要能够估计某个特定 map 位置的天空区域。这就是为什么我需要估计球形 View 的原因,我认为使用 Google 街景会
我想将街道地址转换为类似 Title Case 的格式。它不完全是标题大小写,因为一串数字末尾的字母应该是大写的。例如 19A 史密斯街。 我知道我可以使用 将“19 smith STREET”更改为
我正在寻找描述世界上大多数国家/地区的标准地址格式的来源。我已经找到了更突出的西方和亚洲国家的资源,但是当你远离更大/更有影响力的国家时,这些资源往往会很快消失。 理想情况下,我希望看到类似的东西 t
我正在考虑使用 CASS - 经过认证的地址验证服务可在输入时更正用户提供的街道地址。 (具体来说,我正在查看 SmartyStreets 的 LiveAddress。)但是,USPS 规定正确的地址
运输,开票,实际地址中允许使用哪些字符和符号? 名字/姓氏:字母,空格 地址:字母,数字,空格和#'。 ,-/ 城市:字母,空格和- 邮政:数字,字母,空格和- 最佳答案 允许所有这些!特别是当您使用
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
我正在使用 Google 的街景静态图像 API。它工作得很好,但我想知道是否可以获取我正在保存的图像的元数据,特别是日期。无论如何要知道静态图像的日期? 谢谢, 李 最佳答案 是的,您可以使用 Go
我有一段文本包含以下地址: 格林伍德街 900 号 位于主街 500 个街区 地址:670 W. Townline Ave。 1234 River Avenue 前 位于主大街 1125 号。 我想要
我已经为此苦苦挣扎了一段时间,所以希望有人能帮助我。我愿意接受任何和所有的建议。 当我查询 QGeoAddress::street() 时,我(可能)会同时收到街道号码和街道名称。我想获取只是街道名称
Steam商城喜加一:免费领取《Streets Of Kamurocho》 今日Steam可免费领取一款动作类游戏《Streets Of Kamurocho》 怒铁如龙 领取时间截止于领取时间截
用户应该能够在谷歌地图上放置标记,但只能在街道上。这可能吗? 最佳答案 Google 是您的 friend : http://econym.org.uk/gmap/snap.htm 解决方案的基础是询
我有一个使用 Smarty Streets Live Address 验证的表格。总的来说效果很好。但是,在用户已经开始输入地址信息的情况下,实时地址验证可能会妨碍。遇到的最具体的问题是地址信息已经输
使用 Google map Android v2,我如何捕捉用折线绘制的路线或仅捕捉与街道相连的点? 我正在从 Google Play 服务获取位置信息,但准确度通常在 5-10 米左右,因此点不是直
使用 Google 示例中的示例和 Stack Overflow 上找到的其他代码,我组合了一些 JS,它获取街道地址并显示俯 View 和街景 View 。在大多数情况下,它们工作得很好,但当房子在
我想知道是否可以在 Open Street Maps 中将图标标记覆盖在几何对象上。我正在使用 gwt-openlayers,它是开放层 api 的 java 包装版本,在 Eclipse 中带有开放
我试图通过打开 OleDbConnection 来读取 Access 数据库中表“街道”的列名。我调用 GetOleDbSchemaTable 但我似乎无法弄清楚如何 Access 我的列。 如果可能
我已阅读有关 Google Street View API 的文档,但没有找到任何事件处理程序来捕捉缩放的变化。 https://developers.google.com/maps/document
我的程序加载了一个用户列表(带有 jsonplaceholder 数据),我试图使该数据可编辑,但出现错误: TypeError: Cannot read property 'street' of u
我使用 osmdroid-android 3.0.5.jar 而不是 Google map api 来使用地理坐标在 map 中显示位置。 好吧,我可以在 Android 模拟器中获取 map ,但问
我正在尝试改变 st.到街道,大道。大道等。使用 .replace() 作为单个单元格中的地址。例如:西街。应该是 WEST STREET 或 MOUNT PEBBLE RD。应该是 MOUNT PE
我是一名优秀的程序员,十分优秀!