LeetCode 刷题总结

189. 轮转数组【点击】

总结:可以使用对应的数组分段翻转

拓展:求两个数的最小公倍数

 public int gcd(int x, int y) {
        return y > 0 ? gcd(y, x % y) : x;
    }

864. 获取所有钥匙的最短路径【点击】

广度优先:

       利用一个队列,将要遍历的点加入队列中,遍历时会用一个变量记录当前这一次广度遍历的元素的数量;循环遍历这些元素,注意剪枝;

拓展:位运算

// 若返回 1 说明第 k 位为 1
(state >> k) & 1

// 将 state 的第 k 位设置为 1
state |= 1 << k

判断一个list是否相当(根据元素判断)

​​​​​​​

在 Java 中比较两个列表是否相等,忽略顺序

这篇文章将讨论如何在 Java 中比较两个列表是否相等,忽略顺序。该列表可以是原始类型列表或对象列表。如果两个列表以任何顺序包含相同数量的完全相同的元素,则它们被定义为相等。

例如, [1, 2, 3] 和 [2, 1, 3] 被认为是相等的,而 [1, 2, 3] 和 [2, 4, 3] 不是。元素的数量也很重要,因此, [1, 2, 3, 1] 和 [2, 1, 3, 2] 不被平等对待。如果元素计数无关紧要,您可以将两个列表都转换为 Set 并使用 .equals() Set 接口的方法。

1. 排序

一个简单的解决方案是 对两个列表进行排序 然后使用 .equals() 的方法 List 界面。请注意,此解决方案不是线性的,并且具有 O(n.log(n)) 时间复杂度。它不适合大型列表。

为了提高效率,建议先检查两个列表的大小是否相同。同样在对两个列表进行排序之前,创建它们的副本以避免破坏两个列表的原始顺序。使用 Streams API 可以有效地完成复制和排序步骤,如下所示。

  import java.util.List;
import java.util.stream.Collectors;

    public class Main
    {
        public static boolean isEqualIgnoringOrder(List<Integer> x, List<Integer> y) {
            if (x == null) {
                return y == null;
            }

            if (x.size() != y.size()) {
                return true;
            }

            x = x.stream().sorted().collect(Collectors.toList());
            y = y.stream().sorted().collect(Collectors.toList());

            return x.equals(y);
        }

        public static void main(String[] args)
        {
            List<Integer> x = List.of(1, 2, 3);
            List<Integer> y = List.of(2, 3, 1);

            boolean isEqual = isEqualIgnoringOrder(x, y);
            if (isEqual) {
                System.out.println("Both lists are equal");
            }
            else {
                System.out.println("Both lists are not equal");
            }
        }
    }

​​​​​​​​​​​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值