当前位置:首页 > 力扣 > 力扣765题:情侣牵手问题的贪心解法

力扣765题:情侣牵手问题的贪心解法

8个月前 (07-31)

力扣765题:情侣牵手问题的贪心解法 力扣题解 异或 贪心算法 第1张

一、题目解读

力扣765题要求在一个座位数组中,每对情侣需相邻而坐。给定n对情侣的初始座位安排(偶数长度数组),需通过最小次数的交换操作,使所有情侣成为相邻座位。

二、贪心算法完整代码

class Solution {
public:
    int minSwapsCouples(vector<int>& row) {
        int n = row.size();
        vector<int> pos(n); // 记录每个人的位置
        for (int i = 0; i < n; ++i) {
            pos[row[i]] = i;
        }
        
        int res = 0;
        for (int i = 0; i < n; i += 2) {
            int x = row[i];
            int y = x ^ 1; // 计算x的情侣ID
            if (row[i + 1] == y) continue; // 已经配对
            
            // 交换位置
            int j = pos[y];
            swap(row[i + 1], row[j]);
            pos[row[j]] = j; // 更新位置信息
            pos[row[i + 1]] = i + 1;
            res++;
        }
        return res;
    }
};


原创内容 转载请注明出处

分享给朋友:

相关文章

洛谷P12597题解:子序列查找的贪心与二分优化详解

洛谷P12597题解:子序列查找的贪心与二分优化详解

一、题目解读洛谷P12597题目要求在一个字符串s中寻找最长的子序列,该子序列需满足字符顺序与另一个字符串t相同。题目强调子序列无需连续,但字符相对位置需保持一致。例如,若t为"abc&qu...

LeetCode 2523题解:寻找区间内最小间隔质数对(C++代码)

LeetCode 2523题解:寻找区间内最小间隔质数对(C++代码)

一、题目解读LeetCode 2523题要求在一个给定的整数区间 [left, right] 内,找到间隔最小的两个质数(即相邻质数的差值最小),并返回这对质数。若区间内不存在两个质数,则返回 [-1...

力扣2588题解:利用前缀异或和与哈希表求解美丽子数组问题

力扣2588题解:利用前缀异或和与哈希表求解美丽子数组问题

一、题目解读力扣2588题要求计算给定数组中“美丽子数组”的数量。所谓“美丽子数组”,是指子数组的异或和为0。题目关键在于理解子数组异或和的性质,并通过高效算法统计符合条件的子数组数量。二、解题思路采...

力扣1643题:第K小字典序路径(附C++代码与解题思路)

力扣1643题:第K小字典序路径(附C++代码与解题思路)

一、题目解读本题要求生成从原点(0, 0)到目标坐标(destination[0], destination[1])的路径中,字典序第K小的路径。路径仅由向下字符'V'(代表垂直移动)...

LeetCode 1690题解:动态规划+前缀和求解区间最大差值(石头游戏VII)

LeetCode 1690题解:动态规划+前缀和求解区间最大差值(石头游戏VII)

一、题目解读力扣1690题“石头游戏VII”(题目名称可能需补充)要求:给定整数数组stones,两人轮流从数组左右两端移除石头,得分等于移除部分的总和减去剩余部分的总和。求先手玩家能获得的最大得分差...

洛谷P3817题解:基于贪心算法的糖果分配优化策略

洛谷P3817题解:基于贪心算法的糖果分配优化策略

一、题目解读洛谷P3817题目要求处理n个盒子中的糖果分配问题:给定每个盒子的糖果数a[i]及限制值x,需通过吃掉部分糖果,确保任意相邻盒子(a[i-1] + a[i])的总和不超过x。输出最小需吃掉...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。