美文网首页
Leetcode27-去除数组中指定元素

Leetcode27-去除数组中指定元素

作者: 西5d | 来源:发表于2018-03-04 14:55 被阅读14次

    输入数组和指定的元素,存在则去除,返回新的数组长度,要求不额外申请数组内存。和之前的数组去重 有类似,但是这个数组是没有排序的,leetcode 第27题。自己做了一个,思路是将匹配的数据移动到数组末尾,从头开始遍历,如果匹配,首先判断是否尾部也匹配,如果不是,则交换,否则再从尾部往前找。这个过程中新的长度递减。代码如下第一部分。
    第二部分是其他人提供的解法,非常简洁,这个根据一个假设来实现:如果遍历不等于目标数字,则其就是新数组里对应位置的值。思路非常好。

    自己的解法:

    import java.util.Arrays;
    
    /**
     * Created by igoso on 18-3-4.
     */
    public class DayByDay {
    
        public static void main(String[] args) {
            int[] arr = {4,3,4,433,34,34,34,535,43,54,364,4,4,4,4,4,4,4,4,4,4,4,4,4,4,44,4,666,6,6,66,6};
            System.out.println(removeElement(arr,4));
            System.out.println(Arrays.toString(arr));
        }
    
        public static int removeElement(int[] nums, int val) {
            if (nums == null || nums.length == 0) {
                return 0;
            }
    
            int length = nums.length;
            int j = length - 1;
            for (int i = 0; i < nums.length; i++) {
                if (val == nums[i]) {
                    while (i <= j) {
                        if (nums[j] != val) {
                            int t = nums[j];
                            nums[j] = nums[i];
                            nums[i] = t;
    
                            break;
                        }else {
                            j--;
                        }
                        --length;
                    }
                }
            }
    
            return length;
    
        }
    
    }
    
    

    更加简洁的解法:

    class Solution {
        public int removeElement(int[] a, int val) {
            int start = 0;
            int len = a.length;
            int begin = 0;
            for (int i = 0; i < len; i++) 
                if (a[i] != val) 
                    a[begin++] = a[i];
            return begin;
        }
    }
    

    相关文章

      网友评论

          本文标题:Leetcode27-去除数组中指定元素

          本文链接:https://www.haomeiwen.com/subject/iloffftx.html