.Sharing my logic here.. public void moveZeroes(int[] nums) { if(nums.length == 1) return ; int s = -1 , e = 0; while(e < nums.length) { //check whether end pointer value == 0 if(nums[e] == 0) { if(s == -1) s = e; // move start only at the starting } else { if(s != -1) {//swap nums[s] = nums[e]; s++; } } e++; } if(s != -1) { //fill balance num with zeros from s to e for(int i = s; i < nums.length ; i ++) { nums[i] = 0; } } }