input: int[] arr, int position, int num
output: int[] newarr
输入一个整形数组(无三连续数字),一个插入位置,一个数字。要求在数组的第position位置插入数字num,若插入后存在连续三个相同的数字则删除这三个数字,把后面位置的内容迁移,如仍有三连现象则重复上述步骤,直到不存在三个连续的相同数字为止。
在面试腾讯的时候遇到这个问题,其实很简单,但是我那会一直在纠结一个问题,在c/c++中,可以主动的给数组增加长度,但是在java中怎么实现呢?java中的数组都是定长的,所以当时想的很麻烦,一直想着怎么去调整数组了。现在想想应该变通一下,不要纠结于面试官给的题目条件,重点是实现结果,哎,当时蛮傻的,我先写个list的吧,如果这个地方变成list,那用java就很好实现了。这是面试的大忌,先不要纠结于细节,先把功能和考察点实现,有时间再去扣细节。如果基本功能没实现,那可能出现尬聊的情况,所以面试前做做题还是有必要的,不然在那种业务的思维中很难去转变,尤其是这种语言不一致的情况,可能一些东西在c/c++中很好实现,但是在java中就不那么容易,必须要会变通,不然面试官可能也不理解你思考的难点在哪,就会觉得你这个能力有问题了。
//粗暴解决
public List<Integer> remove(List<Integer> arr, int p, int n){
if(arr==null)
return arr;
if(p<0 || p>arr.size())
return arr;
arr.add(p,n);
boolean stopflag = false;
while(!stopflag){
int removePosition = 0;
for(int i = 2; i < arr.size(); i++){
if(arr.get(i-2)==arr.get(i-1)&&arr.get(i-1)==arr.get(i)){
stopflag = false;
removePosition = i;
break;
}
stopflag = true;
}
if(stopflag==true)
break;
arr.remove(removePosition-2);
arr.remove(removePosition-1);
arr.remove(removePosition);
}
return arr;
}