一维数组去重、和为目标值的数组元素、数组偏移量

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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值