我有一个整数 667778,我需要将其输出为 607008。
我使用了数组 6,6,7,7,7,8 和异或下一个相似的元素。 我需要在恒定的时间内做到这一点。
假设
int arr[]={6,6,7,7,7,8}
int ele=arr[0];
for (int i=1;i<arr.length;i++)
{
if(arr[i]==ele)
arr[i]=0;
else
ele=arr[i];
}
输出数组arr有[6,0,7,0,0,8]
它需要O(n)
n 是数组的大小
我怎样才能在恒定的时间内做到这一点?
最佳答案
除非给定的数字始终是 6 位数字(在这种情况下,您可以对它进行硬编码,这在技术上是恒定时间,但将为循环提供相同的性能),否则您无法获得恒定时间,因为问题的基础需要首先循环遍历数组。
您是否有理由希望它在恒定时间内工作,因为 O(n) 是程序读取数据的最快速度。
编辑: 阅读您的评论后,我认为您需要想出一种不同的方法,这样计算异或就不会在循环内。如果没有最初的问题,我无法提供更多帮助。
关于java - 如何将数组中 n 个相似元素的下一个 n-1 个元素设为 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57413623/