上岸算法 发表于 2021-5-17 07:19:53

上岸算法 I LeetCode Weekly Contest 241解题报告【含秋招咨询群】


2021 秋招时间线如下,建一个求职免费咨询群,群内将有FLAG 面试官就秋招趋势/如何准备等问题亲自答疑



No.1 找出所有子集的异或总和再求和解题思路通过二进制位枚举一个集合的所有子集。代码展示class Solution {
    public int subsetXORSum(int[] nums) {
      int n = nums.length;
      int sum = 0;
      for (int i = 0; i < (1 << n); i++) {
            int xor = 0;
            for (int j = 0; j < n; j++) {
                if (((1 << j) & i) > 0) {
                  xor ^= nums;
                }
            }
            sum += xor;
      }
      return sum;
    }
}No.2 构成交替字符串需要的最小交换次数解题思路如果 0 和 1 相差的数量超过 1 则直接返回 -1如果 0 和 1 一样多,那么最终结果有两种情况,反之最终结果是唯一的。只需要统计出多少个数字位置不对即可,因为每次交换都可以减少 2 个位置不对的数字的数量。代码展示class Solution {
    public int minSwaps(String s) {
      char[] str = s.toCharArray();
      int cnt = 0;
      for (int i = 0; i < str.length; i++) {
            if (str == '0') {
                cnt++;
            } else {
                cnt--;
            }
      }
      if (cnt > 1 || cnt < -1) {
            return -1;
      }
      if (cnt == 0) {
            return Math.min(minSwaps(str, 0), minSwaps(str, 1));
      }
      if (cnt == 1) {
            return minSwaps(str, 0);
      }
      return minSwaps(str, 1);
    }

    int minSwaps(char[] str, int start) {
      int cnt = 0;
      for (int i = 0; i < str.length; i++) {
            if (str != '0' + start) {
                cnt++;
            }
            start ^= 1;
      }
      return cnt / 2;
    }
}No.3 找出和为指定值的下标对解题思路根据数据范围,使用 Map 维护 nums2 中各个数值的数量,每次统计时枚举 nums1 即可。代码展示class FindSumPairs {

    Map<Integer, Integer> count2;
    int[] nums1;
    int[] nums2;

    public FindSumPairs(int[] nums1, int[] nums2) {
      count2 = new HashMap<>();
      this.nums1 = nums1;
      this.nums2 = nums2;
      for (int num : nums2) {
            count2.put(num, count2.getOrDefault(num, 0) + 1);
      }
    }

    public void add(int index, int val) {
      count2.put(nums2, count2.getOrDefault(nums2, 0) - 1);
      nums2 += val;
      count2.put(nums2, count2.getOrDefault(nums2, 0) + 1);
    }

    public int count(int tot) {
      int res = 0;
      for (int num : nums1) {
            res += count2.getOrDefault(tot - num, 0);
      }
      return res;
    }
}No.4 恰有 K 根木棍可以看到的排列数目解题思路动态规划,dp = dp*(n-1) + dp思考过程就是从高到低依次放木板。代码展示class Solution {
    public int rearrangeSticks(int n, int k) {
      long[][] dp = new long;
      long mod = 1000000007;
      dp = 1;
      for (int i = 2; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                dp = (dp * (i - 1) + dp) % mod;
            }
      }
      return (int) dp;
    }
}上岸算法网络科技有限公司上岸算法网络科技有限公司是一家致力于用高质量,高互动性小班课程来帮助学生更好的在就业市场中定位以及求职的公司。我们以顶级的课程质量,高互动性的教学方式以及独特的小班教学模式来帮助学生更快的跨过求职的鸿沟,用最高效,经济,合理的方式帮助更多学生快速找到梦寐以求的工作。



页: [1]
查看完整版本: 上岸算法 I LeetCode Weekly Contest 241解题报告【含秋招咨询群】