网站建设设计理念,长沙景点排行榜,做请帖的网站,泉州网页制作企业优势洗牌 leetcode870. 优势洗牌题目描述双指针 排序代码 滑动窗口 leetcode870. 优势洗牌 难度 - 中等 leetcode870. 优势洗牌 题目描述 给定两个长度相等的数组 nums1 和 nums2#xff0c;nums1 相对于 nums2 的优势可以用满足 nums1[i] nums2[i] 的索引 i 的数目来描… 优势洗牌 leetcode870. 优势洗牌题目描述双指针 排序代码 滑动窗口 leetcode870. 优势洗牌 难度 - 中等 leetcode870. 优势洗牌 题目描述 给定两个长度相等的数组 nums1 和 nums2nums1 相对于 nums2 的优势可以用满足 nums1[i] nums2[i] 的索引 i 的数目来描述。 返回 nums1 的任意排列使其相对于 nums2 的优势最大化。 示例 1 输入nums1 [2,7,11,15], nums2 [1,10,4,11] 输出[2,11,7,15] 示例 2 输入nums1 [12,24,8,32], nums2 [13,25,32,11] 输出[24,32,8,12] 提示 1 nums1.length 1e5 nums2.length nums1.length 0 nums1[i], nums2[i] 1e9 双指针 排序 从 nums1[i] 出发考虑将其与哪个 nums2[i] 进行匹配。 为了让每个决策回合具有独立性我们需要对两数组进行排序同时为了在构造答案时能够对应回 nums2 的原下标排序前我们需要使用「哈希表」记录每个 nums2[i]的下标为何值。 使用变量 l1 代表当前决策将 nums1[l1]分配到哪个 nums2 的位置使用 l2 和 r2 代表当前 nums2 中还有 [l2,r2] 位置还待填充。 可以证明我们在从前往后给每个 nums1[l1]分配具体位置时分配的位置只会在 l2 和 r2 两者之间产生。 代码 /*** 优势洗牌* param nums1* param nums2* return*/public int[] advantageCount(int[] nums1, int[] nums2) {int n nums1.length;HashMapInteger, ListInteger map new HashMap();for (int i 0; i n;i){ListInteger list map.getOrDefault(nums2[i], new ArrayList());list.add(i);map.put(nums2[i],list);}Arrays.sort(nums1);Arrays.sort(nums2);int[] ans new int[n];for (int l1 0,l2 0,r2 n - 1;l1 n;l1){int t nums1[l1] nums2[l2] ? l2 : r2;ListInteger ids map.get(nums2[t]);int idx ids.remove(ids.size() - 1);ans[idx] nums1[l1];if (t l2){l2;}else{r2--;}}return ans;}滑动窗口
leetcode904. 水果成篮