码迷,mamicode.com
首页 > 其他好文 > 详细

[Algo] 118. Array Deduplication IV

时间:2020-02-24 09:52:00      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:arrays   sam   elements   ted   examples   original   algo   keep   link   

Given an unsorted integer array, remove adjacent duplicate elements repeatedly, from left to right. For each group of elements with the same value do not keep any of them.

Do this in-place, using the left side of the original array. Return the array after deduplication.

Assumptions

  • The given array is not null

Examples

{1, 2, 3, 3, 3, 2, 2} → {1, 2, 2, 2} → {1}, return {1}

 

Soltuion 1:

public class Solution {
  public int[] dedup(int[] array) {
    // Write your solution here
    LinkedList<Integer> stack = new LinkedList<>();
    int i = 0;
    while (i < array.length) {
      int cur = array[i];
      if (!stack.isEmpty() && stack.peekFirst() == cur) {
        while (i < array.length && array[i] == cur) {
          i += 1;
        }
        stack.pollFirst();
      } else {
        stack.offerFirst(cur);
        i += 1;
      }
    }
    int[] res = new int[stack.size()];
    for (int j = res.length - 1; j >= 0; j--) {
      res[j] = stack.pollFirst();
    }
    return res;
  }
}

 

Soltuion 2:

public class Solution {
  public int[] dedup(int[] array) {
    // Write your solution here
    // incldue end result
    int end = -1;
    for (int i = 0; i < array.length; i++) {
      int cur = array[i];
      if (end == -1 || cur != array[end]) {
        array[++end] = array[i];
      } else {
        while (i + 1 < array.length && array[i + 1] == cur) {
          i += 1;
        }
        end -= 1;
      }
    }
    return Arrays.copyOf(array, end + 1);
  }
}

 

[Algo] 118. Array Deduplication IV

标签:arrays   sam   elements   ted   examples   original   algo   keep   link   

原文地址:https://www.cnblogs.com/xuanlu/p/12355423.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!