int ArrayDeleteVal(int &a[],constint val)
{
int size=ArraySize(a);
int i=0,start,s,count;
while(i<size && a[i]!=val) i++; // ищем первый элемент массива со значением valif(i==size) return size;
start=i; i++;
while(i<size && a[i]==val) i++; // ищем элемент массива со значением, не равным valif(i==size) {ArrayResize(a,start); return start;}
s=i; i++;
for(;;)
{
while(i<size && a[i]!=val) i++; // ищем элемент массива со значением val
count=i-s;
if(count>6) { ArrayCopy(a,a,start,s,count); start+=count;} // если нужно скопировать более 6 элементов, то имеет смысл воспользоваться ArrayCopyelsefor(; s<i; start++,s++) a[start]=a[s]; // иначе простой циклif(i==size) break;
i++;
while(i<size && a[i]==val) i++; // ищем элемент массива со значением, не равным valif(i<size) s=i; elsebreak;
i++;
}
if(start<size) ArrayResize(a,start); else start=size;
return(start);
}
2020.04.0814:15:35.829 ArrayDeleteValue1 (EURUSD,D1) === Тест с сохранением порядка ===
2020.04.0814:15:35.829 ArrayDeleteValue1 (EURUSD,D1)
2020.04.0814:15:35.977 ArrayDeleteValue1 (EURUSD,D1) вариант Pastushak : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения - 144668 микросекунд
2020.04.0814:15:35.981 ArrayDeleteValue1 (EURUSD,D1) вариант Korotky : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения - 2416 микросекунд
2020.04.0814:15:35.985 ArrayDeleteValue1 (EURUSD,D1) вариант Fedoseev : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения - 1675 микросекунд
2020.04.0814:15:35.988 ArrayDeleteValue1 (EURUSD,D1) вариант Semko : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения - 797 микросекунд
2020.04.0814:15:35.991 ArrayDeleteValue1 (EURUSD,D1) вариант Nikitin : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения - 1866 микросекунд
2020.04.0814:15:35.997 ArrayDeleteValue1 (EURUSD,D1) вариант Vladimir : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения - 3453 микросекунд
2020.04.0814:15:36.006 ArrayDeleteValue1 (EURUSD,D1) вариант Peter : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения - 7633 микросекунд
2020.04.0814:15:36.009 ArrayDeleteValue1 (EURUSD,D1) вариант fann95 : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения - 1135 микросекунд
2020.04.0814:15:36.013 ArrayDeleteValue1 (EURUSD,D1) вариант Kuznetsov : Контрольная сумма = 7156.067670; элементов - 998994; время выполнения - 2368 микросекунд
2020.04.0814:15:36.017 ArrayDeleteValue1 (EURUSD,D1) вариант Kuznetsov1 : Контрольная сумма = 7219.503559; элементов - 1000000; время выполнения - 1874 микросекунд
2020.04.0814:15:36.021 ArrayDeleteValue1 (EURUSD,D1) вариант Kuznetsov2 : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения - 2554 микросекунд
2020.04.0814:15:36.021 ArrayDeleteValue1 (EURUSD,D1)
2020.04.0814:15:36.021 ArrayDeleteValue1 (EURUSD,D1) === Порядок в массиве не сохраняется ===
2020.04.0814:15:36.024 ArrayDeleteValue1 (EURUSD,D1) вариант Kuznetsov3 : Контрольная сумма = 7224.813498; элементов - 998994; время выполнения - 735 микросекунд
2020.04.0814:15:36.027 ArrayDeleteValue1 (EURUSD,D1) вариант Semko2 : Контрольная сумма = 7224.813498; элементов - 998994; время выполнения - 1408 микросекунд
我不知道...
在我看来,这种 "空 "块和 "无限循环"(无论是for还是while)都是一种不好的编程风格,对于潜在的难以计算的错误来说是很危险的。
循环的条件检查运算符不应该是无意义的,而应该承担一些负担。 如果我们有一个 "无限循环",这意味着在循环内部有一些额外的输出或中断,而且它们并不总是很明显。顺便说一下,我也不喜欢break操作符--我总是在循环中使用continue操作符。
正如这里所说的,代码混淆只是一种幼稚的做法......伟大的程序员-抄袭者聚集在这里,他们害怕有人会卖掉他们的代码或通过其他方式获得数百万美元......骄傲是致命的罪过之一!
不同意。
试着重写这段没有无限循环和中断的代码
不同意。
试着重写这段没有无限循环和中断的代码
一个有趣的任务。
在我看来,所提出的代码相当 "不透明",难以理解,尽管对我来说结构很清楚,功能也很有用。
乍一看,这个循环应该是 while (i<size) {....},但我还没有彻底理解它。
一旦我得到它,我就会去做。
一个有趣的任务。
在我看来,所提交的代码相当 "不透明",难以理解,尽管对我来说结构很清楚,功能也很有用。
乍一看,这个循环应该是 while (i<size) {....},但我还没有彻底理解它。
一旦我有机会,我就会去做。
该函数从数组a[]中删除所有的val值,并将其压缩,在不改变数据序列的情况下删除被删除元素的 "洞"。
该函数从数组a[]中删除了所有的val值,并将其压缩,在不改变数据序列的情况下删除了被删除元素的 "洞"。
是的,是的,我告诉过你--目的是明确的,函数本身是有用的。 现在我还不能,以后我会弄清楚它是如何工作的,我将重写它,没有无限的循环。好吧,然后--我将写出我的函数变体,就像我写的那样。
是的,是的,我告诉过你--目的是明确的,函数本身是有用的。 现在我还不能,以后我将整理我的工作,重写它,没有无限循环。好吧,然后--我将写出我的版本的函数,就像我写的那样。
该代码来自这里。一年半前有一次自发的竞争。
不同意。
试着重写这段没有无限循环和中断的代码
是的,很明显,有更紧凑的变体,但速度较慢。
你的变体比上面的慢2-3倍,而且在某处有错误,因为它给出了错误的校验和。
我们谈论的是没有HashSet的最快选项。
我不知道...
在我看来,这种 "空 "块和 "无限循环"(无论是for还是while)都是一种不好的编程风格,对于潜在的难以计算的错误来说是很危险的。
循环的条件检查运算符不应该是无意义的,而应该承担一些负担。 如果我们有一个 "无限循环",这意味着在循环内部有一些额外的输出或中断,而且它们并不总是很明显。顺便说一下,我也不喜欢break操作符--我总是在循环中使用continue操作符。
正如这里所说的,代码混淆只是一种幼稚的做法......伟大的程序员-抄袭者聚集在这里,他们害怕有人会卖掉他们的代码或通过其他方式获得数百万美元......骄傲是致命的罪过之一!
马克西姆,不是这样的,应该有2个循环,否则就没有办法了。首先删除不必要的元素,然后将数组向上 "收缩"(浮动)。 第二个循环是在第一个循环里面。
for结构包括检查一个条件并在循环开始前退出。
while结构包括检查一个条件并在循环结束前退出。
无限循环意味着检查条件并在循环的任何一点退出。