LINUX.ORG.RU

История изменений

Исправление utf8nowhere, (текущая версия) :

А если с обычным set? Найвный vs. с байтодрочерский

Runtime 121 ms/beats 17.43%; Memory 91.31 MB/beats 9.13%:

class Solution {
public:
	int longestConsecutive(const vector<int>& nums) {
		if (nums.empty()) return 0;

		set<int> set(nums.begin(), nums.end());

		int ret = 1;
		int cnt = 1;

		auto b = set.begin();
		auto e = set.end();
		for (auto prev = *(b++); b != e; prev = *(b++)) {
			if (*b - prev == 1) {
				cnt++;
				continue;
			}
			ret = max(ret, cnt);
			cnt = 1;
		}

		return max(ret, cnt);
	}
};

Runtime 53 ms/beats 77.13%; Memory 79.08 MB/beats 76.50%:

#include <memory_resource>

class Solution {
public:
	int longestConsecutive(const vector<int>& nums) {
		if (nums.empty()) return 0;

		// можно попробовать множитель от 2 до 4
		// ну и `node_type` задействовать, но мне было влом
		vector<byte> buf(2 * sizeof(void*) * nums.size());
		pmr::monotonic_buffer_resource mbr{buf.data(), buf.size()};;
		pmr::polymorphic_allocator<int> pa{&mbr};
		pmr::set<int> set(nums.begin(), nums.end(), pa);

		int ret = 1;
		int cnt = 1;

		auto b = set.begin();
		auto e = set.end();
		for (int prev = *(b++); b != e; prev = *(b++)) {
			if (*b - prev == 1) {
				cnt++;
				continue;
			}
			ret = max(ret, cnt);
			cnt = 1;
		}

		return max(ret, cnt);
	}
};

Исправление utf8nowhere, :

А если с обычным set? Найвный vs. с байтодрочерский

Runtime 121 ms/beats 17.43%; Memory 91.31 MB/beats 9.13%:

class Solution {
public:
	int longestConsecutive(const vector<int>& nums) {
		if (nums.empty()) return 0;

		set<int> set(nums.begin(), nums.end());

		int ret = 1;
		int cnt = 1;

		auto b = set.begin();
		auto e = set.end();
		for (auto prev = *(b++); b != e; prev = *(b++)) {
			if (*b - prev == 1) {
				cnt++;
				continue;
			}
			ret = max(ret, cnt);
			cnt = 1;
		}

		return max(ret, cnt);
	}
};

Runtime 53 ms/beats 77.13%; Memory 79.08 MB/beats 76.50%:

#include <memory_resource>

class Solution {
public:
	int longestConsecutive(const vector<int>& nums) {
		if (nums.empty()) return 0;

		// можно попробовать множитель от 2 до 4
		vector<byte> buf(2 * sizeof(void*) * nums.size());
		pmr::monotonic_buffer_resource mbr{buf.data(), buf.size()};;
		pmr::polymorphic_allocator<int> pa{&mbr};
		pmr::set<int> set(nums.begin(), nums.end(), pa);

		int ret = 1;
		int cnt = 1;

		auto b = set.begin();
		auto e = set.end();
		for (int prev = *(b++); b != e; prev = *(b++)) {
			if (*b - prev == 1) {
				cnt++;
				continue;
			}
			ret = max(ret, cnt);
			cnt = 1;
		}

		return max(ret, cnt);
	}
};

Исправление utf8nowhere, :

А если с обычным set? Найвный vs. с байтодрочерский

Runtime 121 ms/beats 17.43%; Memory 91.31 MB/beats 9.13%:

class Solution {
public:
	int longestConsecutive(const vector<int>& nums) {
		if (nums.empty()) return 0;

		set<int> set(nums.begin(), nums.end());

		int ret = 1;
		int cnt = 1;

		auto b = set.begin();
		auto e = set.end();
		for (auto prev = *(b++); b != e; prev = *(b++)) {
			if (*b - prev == 1) {
				cnt++;
				continue;
			}
			ret = max(ret, cnt);
			cnt = 1;
		}

		return max(ret, cnt);
	}
};

Runtime 53 ms/beats 77.13%; Memory 79.08 MB/beats 76.50%:

#include <memory_resource>

class Solution {
public:
	int longestConsecutive(const vector<int>& nums) {
		if (nums.empty()) return 0;

		// можно попробовать множитель от 2 до 4
		vector<byte> buf(2 * sizeof(void*) * nums.size());
		pmr::monotonic_buffer_resource mbr{buf.data(), buf.size()};;
		pmr::polymorphic_allocator<int> pa{&mbr};
		pmr::set<int> set(nums.begin(), nums.end(), pa);

		int ret = 1;
		int cnt = 1;

		auto b = set.begin();
		auto e = set.end();
		for (int prev = *(b++); b != e; prev = *(b++)) {
			if (*b - prev == 1) {
				cnt++;
				continue;
			}
			ret = max(ret, cnt);
			cnt = 1;
		}

		return max(ret, cnt);
	}
};

Исправление utf8nowhere, :

А если с обычным set? Найвный vs. с байтодрочерский

Runtime 121 ms/beats 17.43%; Memory 91.31 MB/beats 9.13%

class Solution {
public:
	int longestConsecutive(const vector<int>& nums) {
		if (nums.empty()) return 0;

		set<int> set(nums.begin(), nums.end());

		int ret = 1;
		int cnt = 1;

		auto b = set.begin();
		auto e = set.end();
		for (auto prev = *(b++); b != e; prev = *(b++)) {
			if (*b - prev == 1) {
				cnt++;
				continue;
			}
			ret = max(ret, cnt);
			cnt = 1;
		}

		return max(ret, cnt);
	}
};

Runtime 53 ms/beats 77.13%; Memory 79.08 MB/beats 76.50%

#include <memory_resource>

class Solution {
public:
	int longestConsecutive(const vector<int>& nums) {
		if (nums.empty()) return 0;

		// можно попробовать множитель от 2 до 4
		vector<byte> buf(2 * sizeof(void*) * nums.size());
		pmr::monotonic_buffer_resource mbr{buf.data(), buf.size()};;
		pmr::polymorphic_allocator<int> pa{&mbr};
		pmr::set<int> set(nums.begin(), nums.end(), pa);

		int ret = 1;
		int cnt = 1;

		auto b = set.begin();
		auto e = set.end();
		for (int prev = *(b++); b != e; prev = *(b++)) {
			if (*b - prev == 1) {
				cnt++;
				continue;
			}
			ret = max(ret, cnt);
			cnt = 1;
		}

		return max(ret, cnt);
	}
};

Исходная версия utf8nowhere, :

А если с обычным set? Найвный vs. с байтодрочерский

class Solution {
public:
	int longestConsecutive(const vector<int>& nums) {
		if (nums.empty()) return 0;

		set<int> set(nums.begin(), nums.end());

		int ret = 1;
		int cnt = 1;

		auto b = set.begin();
		auto e = set.end();
		for (auto prev = *(b++); b != e; prev = *(b++)) {
			if (*b - prev == 1) {
				cnt++;
				continue;
			}
			ret = max(ret, cnt);
			cnt = 1;
		}

		return max(ret, cnt);
	}
};
#include <memory_resource>

class Solution {
public:
	int longestConsecutive(const vector<int>& nums) {
		if (nums.empty()) return 0;

		// можно попробовать множитель от 2 до 4
		vector<byte> buf(2 * sizeof(void*) * nums.size());
		pmr::monotonic_buffer_resource mbr{buf.data(), buf.size()};;
		pmr::polymorphic_allocator<int> pa{&mbr};
		pmr::set<int> set(nums.begin(), nums.end(), pa);

		int ret = 1;
		int cnt = 1;

		auto b = set.begin();
		auto e = set.end();
		for (int prev = *(b++); b != e; prev = *(b++)) {
			if (*b - prev == 1) {
				cnt++;
				continue;
			}
			ret = max(ret, cnt);
			cnt = 1;
		}

		return max(ret, cnt);
	}
};