如何解决有没有办法合并两个或多个for 循环来降低整体时间复杂度?
其实我已经解决了比较计算结果和返回最小值的问题。虽然我成功地实现了逻辑并精细地执行了代码,但未能降低时间复杂度。
#include<iostream>
#include<algorithm>
#include<climits>
using namespace std;
int checkMinimum(int array[],int index)
{
int result = INT_MAX;
for(int i = 0; i < index; ++i)
for(int j = 0; j < index; ++j)
if(i != j && (min(result,((array[i] & array[j]) ^ (array[i] | array[j]))) < result))
result = min(result,((array[i] & array[j]) ^ (array[i] | array[j])));
return result;
}
void getMinimum()
{
int index;
cin >> index;
int array[index];
for(int i = 0; i < index; ++i)
cin >> array[i];
cout << checkMinimum(array,index) << endl;
}
int main()
{
int limit;
cin >> limit;
while(limit--)
getMinimum();
return 0;
}
在研究了 for 循环并试图将它们合并在一起之后,完全没有帮助,因为很难将循环的条件合二为一。
#include<iostream>
#include<algorithm>
#include<climits>
using namespace std;
int checkMinimum(int array[],int index)
{
int result = INT_MAX;
for(int i = 0,j = index - 1; i != j; ++i,--j)
if((min(result,((array[i] & array[j]) ^ (array[i] | array[j]))) < result))
result = min(result,index) << endl;
}
int main()
{
int limit;
cin >> limit;
while(limit--)
getMinimum();
return 0;
}
那么我怎样才能减少这个的时间复杂度?
解决方法
checklist(state,county,id)
等价于 checklistitem(checklist_id)
((array[i] & array[j]) ^ (array[i] | array[j])
、array[i] ^ array[j]
、&
都是按位运算;写真值表为一位)。>
为了最小化XOR,最重要的是高位位一致。假设输入有几个数字 ^
和几个数字 |
。尝试用 0xxxx
和 1xxxx
配对是没有意义的;即使 0xxxx
部分完全相同,XOR 也是 1xxxx
,而任何 xxxx
与任何 10000
的 XOR,或任何 {{1} } 与任何 0xxxx
最多为 0xxxx
,小于 1xxxx
。
在每个组内的下一位和之后的一位重复此逻辑,可以显示具有最小 XOR 的对按排序顺序彼此相邻。因此,您可以对数组进行排序并计算 1xxxx
相邻对的最小值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。