- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在做一个 hackerrank 问题,要求我找出使用插入排序对数组进行排序所需的移位次数,而不实际使用插入排序对数组进行排序,否则将是 O(n^2) 时间-复杂!这是我的代码超时了。据我所知,调用 headSet 方法 n 次应该在 O(n logn) 左右。
static class MyComp implements Comparator<Integer>{
@Override
public int compare(Integer o1, Integer o2) {
return o1 <= o2 ? -1: 1;
}
}
// Complete the insertionSort function below.
static int insertionSort(int[] arr) {
SortedSet<Integer> set = new TreeSet<>(new MyComp());
int count=0;
for(int i=arr.length-1; i>=0;i--){
set.add(arr[i]);
int pos = set.headSet(arr[i]).size();
// System.out.println(pos);
if(pos>0){
count=count+pos;
}
}
return count;
}
最佳答案
创建耳机的复杂度是O(1)
为什么?
因为耳机不是新的。它实际上是现有集合的 View 。创建一个不涉及复制原始集合,甚至不涉及在集合中查找“绑定(bind)”元素。
因此,执行 N
次是 O(N)
。
但是,您的代码不是O(N)
的原因是
set.headSet(someElement).size();
不是 O(1)
。原因是 TreeSet
的子集 View 上的 size()
方法是通过计算 View 中的元素来计算的。
(据我所知,这在 javadoc 中没有说明,但您可以通过查看 TreeSet
和 TreeMap
的源代码来推断它。)
关于java - 在 Java 中获取 TreeSet 的 headSet 的时间复杂度是多少?另外,如果我调用 headSet 方法 'n' 次怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56820977/
来自TreeSet (a SortedSet) 在 Java 8 中: 我调用::headSet方法获取排序集合前面的对象的 SortedSet。 我调用::removeAll 来删除那些最前面的对象
我在做一个 hackerrank 问题,要求我找出使用插入排序对数组进行排序所需的移位次数,而不实际使用插入排序对数组进行排序,否则将是 O(n^2) 时间-复杂!这是我的代码超时了。据我所知,调用
我正在开发一个 Android 应用程序,它会大量使用两个设备之间的蓝牙 RFCOMM 连接,并使用默认的 BluetoothAdapter 进行数据传输。 我想知道的是: 是否可以在用户使用蓝牙耳机
我有以下代码片段: class Cert { public static void main(String[] args) throws IOException { NavigableSet
当用户快速双击耳机上的播放/暂停按钮时,我有代码可以检测到并自动跳到下一首歌曲。不幸的是,似乎在使用 RemoteControlClient 时,它使用了相同的 PLAY_PAUSE 事件。如果你不小
我想将 iOS VoiceOver 声音定向到耳机,即使它没有插入。 换句话说,当我的应用程序打开时,VoiceOver 声音(以及我在应用程序中使用 AVSpeechUtterance 等播放的其他
对于一个应用程序,我们需要从两个不同的音频源进行录制。一个麦克风是一个特殊的(喉咙)麦克风,它配备了与带麦克风的 iPhone 耳机使用的相同连接器。 在第二个 channel 上,我们想录制环境声音
这个问题在这里已经有了答案: why use \0 to include highEndPoint as part of the sublist (2 个答案) 关闭 5 年前。 这个成语是什么意思
我使用 Delphi 10 为我的 Android 手机创建一个媒体播放器应用程序。我使用以下组件将广播接收器包含到我的应用程序中: https://github.com/barisatalay/de
我有一个蓝牙耳机(与我的智能手机配对),它在等待连接和对话期间会产生拨号信号的声音。 所有其他声音如:按键声音、mp3、不同应用程序的其他声音都是由智能手机的扬声器产生的。 我的问题: 有没有可能的方
作为我的类(class)项目之一,我想通过蓝牙耳机或任何此类蓝牙设备按下它们上的可用按钮来启动/触发我自己的 android 应用程序。我将按下蓝牙耳机上的任何特定按钮,我的应用程序应该能够检测到该按
JavaDoc 中写道,TreeSet 的基本操作在 log(N) 时间内完成,其中 N 是集合的大小。在我看来,如果集合足够大,headSet 和 tailSet 方法应该通过二进制搜索之类的方法找
我是一名优秀的程序员,十分优秀!