package com.loveCoding.j20250607_method;

import java.util.Arrays;

/**
 * @author WanJl
 * @version 1.0
 * @title Demo09
 * @description
 * @create 2025/6/7
 */
public class Demo09 {
    /**
     * 1、实现将arr1和arr2数组合并为一个新的数组并返回，先数组1后数组2
     * 1,2,3,4,5   5,4,3,2,1
     * 1,2,3,4,5,5,4,3,2,1
     *
     * @param arr1
     * @param arr2
     * @return
     */
    public static int[] toOneArray(int[] arr1, int[] arr2) {
        if (arr1.length == 0 || arr1 == null) {    //如果前一个数组为空，则直接返回后一个数组
            return arr2;
        }
        if (arr2.length == 0 || arr2 == null) {    //如果后一个数组为空，则直接返回前一个数组
            return arr1;
        }
        int[] tempArray = new int[arr1.length + arr2.length];
        for (int i = 0; i < tempArray.length; i++) {
            if (i < arr1.length) {
                tempArray[i] = arr1[i];
            } else {
                tempArray[i] = arr2[i - arr1.length];
            }
        }
        return tempArray;
    }
    /*
        2、实现将arr1和arr2数组合并为一个新的数组并返回，
        起始元素为数组1的元素，然后是数组2的第1个元素....以此类推
        1,2,3,4,5   5,4,3,2,1
        1,5,2,4,3,3,4,2,5,1
     */

    public static int[] toOneArray2(int[] arr1, int[] arr2) {
        //如果前一个数组为空，则直接返回后一个数组
        if (arr1.length == 0 || arr1 == null) {
            return arr2;
        }
        //如果后一个数组为空，则直接返回前一个数组
        if (arr2.length == 0 || arr2 == null) {
            return arr1;
        }

        //新数组长度是两个数组的长度和
        int[] tempArray = new int[arr1.length + arr2.length];
        //判断两个数组哪个长度更短
        int minLength= arr1.length> arr2.length?arr2.length:arr1.length;
        //以长度短的进行循环
        for (int i = 0; i < minLength; i++) {
            tempArray[i*2]=arr1[i]; //先赋值数组arr1     0 2 4 6 8 10 .....
            tempArray[(i*2)+1]=arr2[i]; //再赋值数组arr2 1 3 5 7 9 11.....
        }
        //再开启一个循环，把数组长的剩余的元素依次放到新数组后面
        for (int i = minLength*2; i <tempArray.length ; i++) {
            tempArray[i]=arr1.length< arr2.length?arr2[i-minLength]:arr1[i-minLength];
        }
        return tempArray;
    }


    /*
    给定一个整数数组 nums 和一个整数目标值 target，请你在该数组中找出
        和为目标值 target  的那 两个 整数，并返回它们的数组下标。
        你可以假设每种输入只会对应一个答案，并且你不能使用两次相同的元素。
        你可以按任意顺序返回答案。
     */
    public int[] twoSum(int[] nums, int target) {
        int[] arr=new int[2];
        for (int i = 0; i < nums.length; i++) {
            for (int j = i+1; j < nums.length; j++) {
                if (nums[i]!=nums[j]&&nums[i]+nums[j]==target){
                    arr[0]=i;
                    arr[1]=j;
                    return arr;
                }
            }
        }
        return arr;
    }



    public static void main(String[] args) {
        int[] arr1 = {1, 2, 3};
        int[] arr2 = {10, 20, 30, 40, 50};
        int[] array = toOneArray2(arr1, arr2);
        System.out.println(Arrays.toString(array));

    }
}
