1.1.28(原问题)删除重复元素。修改BinarySearch类中的测试用例来删去排序之后白名单中所有重复元素。
对问题的调整:标记一维数组中非递减有序整数中重复的数。设有序数>=0。这个问题可以有两种理解:a)每个数只出现一次,例如:1,2,2,3,4,5 去重后得到:1,2,3,4,5
b)重复的数字全部删除,例如去重后得到:1,3,4,5。
a)实现思路:数组索引从头移至数组倒数第二个,当前数组索引元素值与下一元素值进行比较,相同时将当前元素值标记成标记值。
for(int i=0;i<ArrayOfSorted.length-2;i++)
{
if (ArrayOfSorted[i]==ArrayOfStored[i+1]) ArraryOfSorted[i]=-1;
}
b)在a思路的基础上增加规则:当前元素与下一个元素不同并且当前元素与前一个元素值相同时那么当前元素标记成标记值。当前元素是倒数第二个元素并且与最后一个元素相同,那么将最后一个元素标记成标记值。
boolean IsRepeart=false;
for(int i=0;i<ArrayOfSorted.length-2;i++)
{
if (ArrayOfSorted[i]==ArrayOfStored[i+1])
{
ArraryOfSorted[i]=-1;
IsRepeart=true;
if (i==ArrayOfStored.length-2) ArrayOfStored[i+1]=-1;
}
else
{
if (IsRepeart) ArrayOfStored[i]=-1;
IsRepeart=false;
}
}
对问题的调整:标记一维数组中非递减有序整数中重复的数。设有序数>=0。这个问题可以有两种理解:a)每个数只出现一次,例如:1,2,2,3,4,5 去重后得到:1,2,3,4,5
b)重复的数字全部删除,例如去重后得到:1,3,4,5。
a)实现思路:数组索引从头移至数组倒数第二个,当前数组索引元素值与下一元素值进行比较,相同时将当前元素值标记成标记值。
for(int i=0;i<ArrayOfSorted.length-2;i++)
{
if (ArrayOfSorted[i]==ArrayOfStored[i+1]) ArraryOfSorted[i]=-1;
}
b)在a思路的基础上增加规则:当前元素与下一个元素不同并且当前元素与前一个元素值相同时那么当前元素标记成标记值。当前元素是倒数第二个元素并且与最后一个元素相同,那么将最后一个元素标记成标记值。
boolean IsRepeart=false;
for(int i=0;i<ArrayOfSorted.length-2;i++)
{
if (ArrayOfSorted[i]==ArrayOfStored[i+1])
{
ArraryOfSorted[i]=-1;
IsRepeart=true;
if (i==ArrayOfStored.length-2) ArrayOfStored[i+1]=-1;
}
else
{
if (IsRepeart) ArrayOfStored[i]=-1;
IsRepeart=false;
}
}