A
LeetCode:
26. Remove Duplicates from Sorted Array
Given a sorted array nums, remove the duplicates in-place such that each element appear only once and return the new length.
Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.
Example 1:
Given nums = [1,1,2],
Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively.
It doesn't matter what you leave beyond the returned length.
Example 2:
Given nums = [0,0,1,1,1,2,2,3,3,4],
Your function should return length = 5, with the first five elements of nums being modified to 0, 1, 2, 3, and 4 respectively.
It doesn't matter what values are set beyond the returned length.
我的代码如下
class Solution {
public:
int removeDuplicates(vector& nums) {
vector::iterator i, it = nums.begin() + 1;
if(nums.size() == 0) {return 0;}
if(nums.size() == 1) {return nums.size();}
for(i = nums.begin() + 1; i != nums.end();) {
if(*(i - 1) == *i) {
i = nums.erase(i);
}
else {i++;}
}
return nums.size();
}
};
运行结果:
Runtime: 160 ms, faster than 15.01% of C++ online submissions for Remove Duplicates from Sorted Array.
Memory Usage: 10 MB, less than 99.00% of C++ online submissions for Remove Duplicates from Sorted Array.
本题我主要使用了vector中的eraser()
方法,但运行的时间很不理想。对比其他代码:
class Solution {
public:
int removeDuplicates(vector& nums) {
if (nums.size() == 0) return 0;
int length = 1;
int pos = 0;
for (int i = 1; i < nums.size(); i++) {
if (nums[i] != nums[pos]) {
length++;
pos++;
nums[pos] = nums[i];
}
}
return length;
}
};
该作者巧妙地将前列元素逐个替代,并记录数组长度,达到截取数组的效果,明显提高了效率。
R
Why wearables, health records and clinical trials need a blockchain injection
- 本文主要讲述的是个人的健康数据与区块链的关系。
个人的健康记录是一种敏感信息,对于医疗保障事业来说,它具有巨大的作用;但是除了一些研究人员的使用,大量地共享个人的电子健康记录可能对用户的隐私造成侵犯。因此,现在正在开发一种能匿名共享个人的健康数据,能够在患者同意的前提下,出售或共享自己的健康数据。而区块链能为每一个加密的数据块提供唯一的数字签名,很好地保障了用户信息地安全性。不仅如此,它还能用于药物的跟踪监督以及对勒索病毒地防范,安全性较强。
T
vector
用法整理:
- 头文件:
- 构造:
vector
vec; - 迭代器:
begin
:返回指向容器第一个元素的迭代器
end
:返回指向容器最后一个元素下一个位置的迭代器
rbegin
:返回指向容器最后一个元素的反向迭代器
rend
:返回指向容器第一个元素前一个位置的反向迭代器
cbegin
:返回指向容器第一个元素的const_iterator迭代器
cend
:返回指向容器最后一个元素的const_iterator迭代器
crbegin
:返回指向容器最后一个元素的反向const_iterator迭代器
crend
:返回指向容器第一个元素前一个位置的反向const_iterator迭代器 - 容量:
size
:返回容器大小
max_size
:返回容器最大大小
resize
:调整容器大小
capacity
:返回已分配存储容量的大小
empty
:测试vector是否为空
reserve
:请求更改容量
shrink_to_fit
:收缩至适合 - 元素的访问:
使用[]
操作:类似数组访问
at
:与[]
相似
front
:访问第一个元素
back
:访问最后一个元素
data
:访问数据 - 修饰符:
asign
:重新分配元素
push_back
:末尾添加元素
pop_back
:删除末尾元素
insert
:插入元素
erase
:清除某一元素
swap
:交换两容器内容
clear
:清空内容
emplace
:类似insert
emplace_back
:类似push_back
S
分享的网站:tutorialspoint
本周尝试了一些难度较大的算法题,到目前为止仍未做出——算法路漫漫啊~~还是慢慢来吧。