package com.zpr.array;
/*
* 删除数组中的重复项
* 原地删除重复出现的有序数组,使得每个元素只出现一次,返回删除重复元素后的数组长度
* 如:给定nums = {0,0,1,1,1,2,2,3,3,3}
* 返回:{0,1,2,3}
* 思路:
* 根据题目数组是有序的,所以只需比较相邻两个元素即可
* 如果不相等,说明元素不同,往前放
* 扩展:若是无序数组,可先使用排序算法将数组变有序,后删除重复即可
* */
public class DeleteSame_number {
public static void main(String[] args) {
int[] nums = {3,1,1,2,2,3,4,15,4,6,7,7,9,9,10};
// 数组反转
// for (int i = 0; i < nums.length/2; i++) {
// int temp = nums[i];
// nums[i] = nums[nums.length-1-i];
// nums[nums.length-1-i] = temp;
// }
int length = test(nums);
System.out.println("删除数组后长度:"+length);
for (int i = 0; i < length; i++) {
System.out.print(nums[i] + "\t");
}
}
public static int test(int[] nums){
// 有序数组(含重复)
// length已有元素个数,默认第一个是不需要比较的
// 也是下一个元素下标
int length = 1;
for (int i = 0; i < nums.length-1; i++) {
// 判断当前元素是否和后面元素相等
if (nums[i] != nums[i+1]){
nums[length] = nums[i+1];
length++;
}
}
// for (int i = 0; i < length; i++) {
// System.out.print(nums[i] + "\t");
// }
// System.out.println("删除数组后长度:"+length);
//
// System.out.println("变化后数组");
// for (int num : nums) {
// System.out.print(num + "\t");
// }
return length;
}
/**
* 如果无序,删除重复元素(不能排序)
* 思路:嵌套循环,每次和前面已有的不重复元素进行比较,不等放前面,相等不管
* @param nums
* @return
*/
public static int test2(int[] nums){
// length已有元素个数,默认第一个是不需要比较的
// 也是下一个元素下标
int length = 1;
// 从第二位开始,每次和前面不重复比较
for (int i = 1; i < nums.length; i++) {
// 每次和当前位置的数比较,如果不等,就放到前面
// 假设不相等
boolean flag = false;
for (int j = 0; j < length; j++) {
// 判断当前元素是否和前面元素相等
if (nums[i]==nums[j]){
flag = true;
break;
}
}
// 当前位置的数比较,如果不等
if (!flag){
nums[length] = nums[i];
length++;
}
}
return length;
}
}
package com.zpr.array;
/*
* 移除元素:
* 给定一个数组 nums 和一个值 var,原地移除所有数值为var的元素,返回移除后数组的新长度,不使用额外的空间
* */
public class DeleteVar_number {
public static void main(String[] args) {
int[] nums = {3,2,2,3,5,1,0};
int var = 3;
int length = test(nums, var);
for (int i = 0; i < length; i++) {
System.out.print(nums[i] + "\t");
}
}
public static int test(int[] nums, int var){
int length = 0;
// 判断每一位是否为要删除的元素,如果不是,放前面
for (int i = 0; i < nums.length; i++) {
if (nums[i]!=var){
nums[length] = nums[i];
length++;
}
}
return length;
}
}