# 删除排序数组中的重复项

说明:有序数组 nums,在它自身原地删除重复项,返回删除重复项后数组的长度

思路:java 的数组规定好长度后是没有 delete、add 这种方法的,所以删除重复的仅仅只是将重复的数字往数组后边靠,利用双指针,一快一慢的前后对比例如:[0,1,2,2,3,3],i=0,j=1 对比 i 与 j,不一样的话就一起往后移动一位,当 i=j 的时候 i(慢指针)不变 j(快指针) 向后移动直至 i != j 然后将 j 的值赋给 i+1。

static int removeDuplicate(int[] nums) {
        // 判断这个数组是否有值
        if (nums.length == 0)
            return 0;
        int i = 0;
        for (int j = 1; j < nums.length; j++) {
            if (nums[i] != nums[j]) {
                // 当 i 和 j 相差 1 的时候,如果 i 指向的数字和 j 不相等,则 i++,此时 i 和 j 指向的是同一个数值,
                // 当 i=j 的时候不进入 if
                // 当下一次再相等的时候先将 i+1,然后将 j 的值赋给 i
                i++;
                nums[i] = nums[j];
            }
        }
        // 因为 i 是下标,而长度是下标 + 1,要返回的是长度
        return i + 1;
    }
// 主方法
 public static void main(String[] args) {
        int[] a = {0, 1, 2, 2, 3, 4, 4, 5, 6, 6, 6, 6, 6};
        System.out.println(removeDuplicate(a));
    }
// 控制台输出 7

# 寻找数组的中心下标

说明:中心下标是在这个中心左侧所有值的和与右侧相等,如果有多个中心下标则返回最左侧的,不存在则返回 - 1。

思路:利用双指针,一个从左边开始加起,另一个是整个数组的和减去上一个指针所加的数字,当两个指针的值相等的时候就找到了中心下标。

static int FindCenterIndex(int[] nums){
    // 利用 java 自带的数组求和方法
        int sum = Arrays.stream(nums).sum();
        int total = 0;
        for (int i = 0 ; i <nums.length ; i++){
            total += nums[i];
            if (total == sum){
                return i;
            }
            sum = sum - nums[i];
        }
        return -1;
    }
// 主方法
public static void main(String[] args) {
    int[] a = {0,1,2,3,4,5,6,0,1,2,3,5,4,6};
    int[] b = {0,1,2,3,4,5,6,1,2,3,5,4,6};
    System.out.println(FindCenterIndex(a));
    System.out.println(FindCenterIndex(b));
    }
// 控制台输出
//	7  
//  -1

有待更新…