- 首先我要在纸上,非常非常聪明且迅速且机灵,
- 给出几个用例,找出边界用例和特殊用例,确定特判条件;在编码前考虑到所有的条件
- 向面试官提问:问题规模,特殊用例
- 给出函数头
- 暴力解,简述,优化。
- 给出能够想到的最优价
- 伪代码,同时结合用例
- 真实代码
Remove Element
Given an array and a value, remove all instances of that value in place and return the new length.
The order of elements can be changed. It doesn't matter what you leave beyond the new length.
/*
Remove Element
Given an array and a value, remove all instances of that value in place and return the new length.
The order of elements can be changed. It doesn't matter what you leave beyond the new length.
*/
/*
What kind of value? A integer?
What is the size of the array?
1 2 3; 4 // No occurence
2 2 2 2 2; 2 // Remove all
1 2 3; 2 // General
1 2 3 2 4 5; 2 // Multiple
1 3 3 2 4 5
1 3 4 5
for i : range(0, size)
if arr[i] == value: cnt++;
else if cnt > 0:
arr[i-cnt] = arr[i];
return size-cnt;
*/
int rm(vector<int> &arr, int value)
{
int cnt=0;
for(int i=0; i<arr.size(); i++)
{
if(arr[i]==value) cnt++;
else if (cnt>0)
{
arr[i-cnt] = arr[i];
}
}
return size-cnt;
}
本文详细阐述了如何通过精心设计的边界和特殊用例,以及优化算法来解决数组中特定元素移除的问题。通过考虑各种可能的情况,包括不同数量的重复元素和数组规模的变化,我们提出了一个高效的解决方案,并提供了相应的伪代码实现。

640

被折叠的 条评论
为什么被折叠?



