1.给定一个排序数组,返回移除相同元素后数组的新长度。
package com.homework.homework0714;
import java.util.Arrays;
/**
* @Author kinmon
* @Date 2020/7/14 19:40
* @Version 1.0
* 1.给定一个排序数组,返回移除相同元素后数组的新长度。
*/
public class RemovArraysSameElement {
public static void main(String[] args) {
int[] arrary = {4,4,5,5,6,6,7,8,9,10};
System.out.println("去重前的数组:" + Arrays.toString(arrary));
int arrLength = removArrarySameElement(arrary);
System.out.println("移除相同元素后数组的新长度为:" + arrLength);
}
public static int removArrarySameElement(int[] arr){
//先求原数组最大值
int maxValue = arr[0];
int repeatNum = 0;
for (int i = 0; i < arr.length; i++) {
if(arr[i] > maxValue){
maxValue = arr[i];
}
}
//创建辅助数组
int[] arrAssist = new int[maxValue + 1];
//用计数法进行统计
for (int j = 0; j < arr.length; j++) {
arrAssist[arr[j]]++;
}
//求得重复元素的个数
for (int k = 0; k < arrAssist.length; k++) {
if(arrAssist[k] > 1) repeatNum++;
}
int[] nums = new int[arr.length - repeatNum];
int originalIndex = 0;
for (int k = 0; k < arrAssist.length; k++) {
if(arrAssist[k] != 0){
nums[originalIndex] = k;
originalIndex++;
}
}
System.out.println("去重后的数组:" + Arrays.toString(nums));
//返回长度 原数组长度-重复元素个数
return arr.length - repeatNum;
}
}
2.给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数
package com.homework.homework0714;
import java.util.Arrays;
/**
* @Author kinmon
* @Date 2020/7/14 20:12
* @Version 1.0
* 2.给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,
* 并返回他们的数组下标,假设每种输入只会对应一个答案
* (因为是两个数,所以下标值,有两个,所以该方法返回一个int[],里面包含两个整数对应的数组下标)
* 返回[0,0]则表示无符合数组元素
*/
public class SumCheck {
public static void main(String[] args) {
int[] nums = {1,10,12,14,15,16,17,18,9,10};
int[] indexs = sumCheck(nums,10);
System.out.println("俩下标为:" + Arrays.toString(indexs));
}
public static int[] sumCheck(int[] nums,int target){
//创建返回数组
int[] indexs = new int[2];
//计算和为target的两个数
for (int i = 0; i < nums.length-1; i++) {
for (int j = i +1; j < nums.length; j++) {
//判断两个数和是否为target
if(nums[i] + nums[j] == target){
indexs[0] = i;
indexs[1] = j;
return indexs;
}
}
}
return indexs;
}
}
3、给定一个数组,将数组中的元素循环向右移动 k 个位置,其中 k 是非负数。
package com.homework.homework0714;
import java.util.Arrays;
import java.util.Scanner;
/**
* @Author kinmon
* @Date 2020/7/14 21:01
* @Version 1.0
* 3、给定一个数组,将数组中的元素循环向右移动 k 个位置,其中 k 是非负数。
* 举例
* 输入: [1,2,3,4,5,6,7] 和 k = 3
* 输出: [5,6,7,1,2,3,4]
*
* 解释:
* 向右循环移动 1 位: [7,1,2,3,4,5,6]
* 向右循环移动 2 位: [6,7,1,2,3,4,5]
* 向右循环移动 3 步: [5,6,7,1,2,3,4]
*/
public class MoveArrary {
public static void main(String[] args) {
int[] nums = {0,1,2,3,4,5,6,7,8,9,10};
System.out.println("移动前的数组:" + Arrays.toString(nums));
Scanner input = new Scanner(System.in);
System.out.println("请输入移动量k:");
int k = input.nextInt();
nums = moveArrary(nums,k);
System.out.println("移动后的数组:" + Arrays.toString(nums));
}
public static int[] moveArrary(int[] nums,int k){
//辅助数组
int[] numsAssist = new int[nums.length + k];
int originalIndex = 0;
//给辅助数组赋值
for (int i = k; i < numsAssist.length;i++) {
numsAssist[i] = nums[originalIndex];
originalIndex++;
}
System.out.println("辅助数组1:" + Arrays.toString(numsAssist));
//后k位赋值到前k位
for (int i = 0; i < k; i++) {
numsAssist[k-1-i] = numsAssist[numsAssist.length-1-i];
}
System.out.println("辅助数组2:" + Arrays.toString(numsAssist));
//数组截取
for (int i = 0; i < nums.length; i++) {
nums[i] = numsAssist[i];
}
return nums;
}
}