数组

本文介绍两种常见的数组操作方法:使用Hash表求两数组交集及利用递归实现数组全排序。首先,通过创建Hash表,快速找出两个数组的共同元素,实现数组交集的高效求解。其次,演示如何通过递归调用,完成数组的全排列,输出所有可能的排序组合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.两个数组,求交集。用Hash表。

package com.interview.array;

import java.util.*;

/**
 * 求数组交集
 */
public class ArrayIntersection {
    public static void main(String[] args) {
        int[] a = new int[]{1, 2, 3};
        int[] b = new int[]{2, 3};
        for (int i : new Solution().intersection(a, b)) {
            System.out.print(i + " ");
        }

    }
}

/**
 * byte Byte
 *
 * int Integer
 *
 * short Short
 *
 * long Long
 *
 * float Float
 *
 * double Double
 *
 * boolean Boolean
 *
 * char Character
 */

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        Map<Integer, Integer> map1 = new HashMap<>();//nums1的map
        Map<Integer, Integer> map2 = new HashMap<>();//将答案存到map2中

        for (int i : nums1) {
            if (!map1.containsKey(i)) {
                map1.put(i, i);
                
            }
        }
        for (int j : nums2) {
            if (map1.containsKey(j) && !map2.containsKey(j)) {
                map2.put(j, j);
            }
        }
        int[] result = new int[map2.size()];
        int index = 0;
        for (int k : map2.keySet()) {
            result[index++] = map2.get(k);
        }
        return result;
    }
}

2.数组求全排序

package com.test;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;


public class ListAllPrint2 {
    /**
     * 使用createList方法,填充参数列表传递过来的List,默认是Integer,一般是这个类型,你可以修改别的类型
     */
    public void createList(int n, List list) {
        if (n == 0) {
            n = 3;
        }
        for (int i = 1; i <= n; i++) {
            list.add(i);
        }
    }

    /**
     * printAll是输出全排列的递归调用方法,list是传入的list,用LinkedList实现,
     * 而prefix用于转载以及输出的数据
     * length用于记载初始list的长度,用于判断程序结束。
     */
    public void printAll(List candidate, String prefix, int length) {
        if (prefix.length() == length) {
            System.out.println(prefix);
            return;
        }
        for (int i = 0; i < candidate.size(); i++) {
            List temp = new LinkedList(candidate);
            String temp_str = prefix + temp.remove(i);//不要影响了当前剩下的遍历
            printAll(temp, temp_str, length);

        }
    }

    /**
     * 测试代码
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ArrayList<Integer> list = new ArrayList<Integer>();
        ListAllPrint2 lap = new ListAllPrint2();
        lap.createList(3, list);
        lap.printAll(list, "", list.size());
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值