Redian新闻
>
双黄包求hd moving coupon code
avatar
双黄包求hd moving coupon code# Living
p*2
1
public void Add(Task task)
{
int i=0;
for(;i{
if(task.deadline{
list.Insert(i,task);
break;
}
}
if(i==list.Count)
list.Add(task);
}
public void Add(Task task)
{
if (list.Count == 0)
{
list.Add(task);
return;
}
int start = 0;
int end = list.Count - 1;
while (start <= end)
{
if (start == end)
{
if (list[start].deadline > task.deadline)
list.Insert(start, task);
else
list.Insert(start + 1, task);
return;
}
int mid = (start + end) / 2;
if (list[mid].deadline == task.deadline)
{
list.Insert(mid, task);
return;
}
if (list[mid].deadline < task.deadline)
{
start = mid + 1;
}
else
{
end = mid - 1;
}
}
}
}
avatar
x*m
2
rt
avatar
c*e
3
How do you know it is slower than linear? Is your n large enough?
avatar
q*x
4
你的二分法罗嗦。

【在 p*****2 的大作中提到】
: public void Add(Task task)
: {
: int i=0;
: for(;i: {
: if(task.deadline: {
: list.Insert(i,task);
: break;
: }

avatar
L*R
5
N不够大吧
avatar
p*2
6
我做一道题,linear能pass 50%的test case, binary 只能过10%。虽然写的罗嗦,但
是还是很奇怪为什么这样子。
我后来从后往前linear search, 还是这个结果。
avatar
f*t
7
你这个是java的arraylist?
insert操作是O(n)+各种memory copy的吧,相比之下查找的复杂度已经影响不大了。。
avatar
q*x
8
不是list吗?

【在 f*******t 的大作中提到】
: 你这个是java的arraylist?
: insert操作是O(n)+各种memory copy的吧,相比之下查找的复杂度已经影响不大了。。
: 。

avatar
r*t
9
arraylist 有 random access 吗?insert 该没有关系,两个办法最后都是 insert 一次。
话说你这个 binary search 有私货,找到以后 return iterator 好了,为啥要 insert 呢?

【在 f*******t 的大作中提到】
: 你这个是java的arraylist?
: insert操作是O(n)+各种memory copy的吧,相比之下查找的复杂度已经影响不大了。。
: 。

avatar
f*t
10
list不能random access

【在 q****x 的大作中提到】
: 不是list吗?
avatar
q*x
11
good catch, thx.

【在 f*******t 的大作中提到】
: list不能random access
avatar
p*2
12

一次。
insert 呢?
return iterator什么意思呀?我insert是因为下次还需要用。

【在 r****t 的大作中提到】
: arraylist 有 random access 吗?insert 该没有关系,两个办法最后都是 insert 一次。
: 话说你这个 binary search 有私货,找到以后 return iterator 好了,为啥要 insert 呢?

avatar
q*x
13
你算法有问题。
如果是数组,插入是线性的。
如果是链表,二分查找不行。

【在 p*****2 的大作中提到】
:
: 一次。
: insert 呢?
: return iterator什么意思呀?我insert是因为下次还需要用。

avatar
r*t
14
只 pass 部分估计是边界条件没搞对。自己能搞点 test case 么?

【在 p*****2 的大作中提到】
: 我做一道题,linear能pass 50%的test case, binary 只能过10%。虽然写的罗嗦,但
: 是还是很奇怪为什么这样子。
: 我后来从后往前linear search, 还是这个结果。

avatar
r*t
15
c++ 里面 search 都返回 iterator/pointer, 以为 java 应该更自然点。。。

【在 p*****2 的大作中提到】
:
: 一次。
: insert 呢?
: return iterator什么意思呀?我insert是因为下次还需要用。

avatar
q*x
16
bool std::binary_search()

【在 r****t 的大作中提到】
: c++ 里面 search 都返回 iterator/pointer, 以为 java 应该更自然点。。。
avatar
p*2
17

相当于java 的 arraylist, 关键是两种算法都有insert呀。

【在 q****x 的大作中提到】
: 你算法有问题。
: 如果是数组,插入是线性的。
: 如果是链表,二分查找不行。

avatar
q*x
18
你怎么知道慢?

【在 p*****2 的大作中提到】
:
: 相当于java 的 arraylist, 关键是两种算法都有insert呀。

avatar
p*2
19

test case 运行到50%超时, binary运行到10%就超时了。很奇怪。

【在 q****x 的大作中提到】
: 你怎么知道慢?
avatar
r*t
20
okay, 原来只要返回 true/false 就行了。

【在 q****x 的大作中提到】
: bool std::binary_search()
avatar
x*2
21
同意这个观点。
楼主不妨注释掉insert操作再跑一次

【在 f*******t 的大作中提到】
: 你这个是java的arraylist?
: insert操作是O(n)+各种memory copy的吧,相比之下查找的复杂度已经影响不大了。。
: 。

avatar
a*p
22
同意楼上说的。search是重点。写了点玩玩,看看对不对。
public class Test {
Task[] list;
int search(Task task) {
int i = 0;
do {
if (task.deadline <= list[i].deadline) {
return i;
}
} while (++i < list.length);
return list.length-1;
}
int binarySearch(Task task) {
int i = list.length;
int k = 0;
int j;
do {

if ((i+1 + k) % 2 != 0){
j = (i+k)/2;
} else{
j = (i+1 + k)/2;
}

if (j == i) {
if (task.deadline >= list[i-1].deadline) {
return i-1;
} else {
return i;
}
} else {
if (task.deadline >= list[j].deadline) {
k = j;
} else {
i = j;
j = 0;
}
}

} while (j < i);
return j;
}
public static void main(String[] args) {
int size = 5*1000*1000;
Test test = new Test();
test.list = new Task[size];
Task task;
for (int i = 0; i < size; i++) {
task = new Task(i);
test.list[i] = task;
}
Task t = new Task((int) (Math.random() * size));
System.out.println("list size:"+size+"; deadline:"+t.deadline);
long time = System.currentTimeMillis();
System.out.println("index: " + test.search(t));
System.out.println(System.currentTimeMillis() - time);
time = System.currentTimeMillis();
System.out.println("index: " + test.binarySearch(t));
System.out.println(System.currentTimeMillis() - time);
}
}
class Task {
int deadline;
Task(int i){
deadline = i;
}
}
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。