日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 2197. 替换数组中的非互质数(栈)

發布時間:2024/7/5 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 2197. 替换数组中的非互质数(栈) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

給你一個整數數組 nums 。請你對數組執行下述操作:

  • 從 nums 中找出 任意 兩個 相鄰非互質 數。
  • 如果不存在這樣的數,終止 這一過程。
  • 否則,刪除這兩個數,并 替換 為它們的 最小公倍數(Least Common Multiple,LCM)。
  • 只要還能找出兩個相鄰的非互質數就繼續 重復 這一過程。

返回修改后得到的 最終 數組。
可以證明的是,以 任意 順序替換相鄰的非互質數都可以得到相同的結果。

生成的測試用例可以保證最終數組中的值 小于或者等于 10^8 。

兩個數字 x 和 y 滿足 非互質數 的條件是:GCD(x, y) > 1 ,其中 GCD(x, y) 是 x 和 y 的 最大公約數

示例 1 : 輸入:nums = [6,4,3,2,7,6,2] 輸出:[12,7,6] 解釋: - (6, 4) 是一組非互質數,且 LCM(6, 4) = 12 。得到 nums = [12,3,2,7,6,2]- (12, 3) 是一組非互質數,且 LCM(12, 3) = 12 。得到 nums = [12,2,7,6,2]- (12, 2) 是一組非互質數,且 LCM(12, 2) = 12 。得到 nums = [12,7,6,2]- (6, 2) 是一組非互質數,且 LCM(6, 2) = 6 。得到 nums = [12,7,6] 。 現在,nums 中不存在相鄰的非互質數。 因此,修改后得到的最終數組是 [12,7,6] 。 注意,存在其他方法可以獲得相同的最終數組。示例 2 : 輸入:nums = [2,2,1,1,3,3,3] 輸出:[2,1,1,3] 解釋: - (3, 3) 是一組非互質數,且 LCM(3, 3) = 3 。得到 nums = [2,2,1,1,3,3]- (3, 3) 是一組非互質數,且 LCM(3, 3) = 3 。得到 nums = [2,2,1,1,3]- (2, 2) 是一組非互質數,且 LCM(2, 2) = 2 。得到 nums = [2,1,1,3] 。 現在,nums 中不存在相鄰的非互質數。 因此,修改后得到的最終數組是 [2,1,1,3] 。 注意,存在其他方法可以獲得相同的最終數組。提示: 1 <= nums.length <= 10^5 1 <= nums[i] <= 10^5 生成的測試用例可以保證最終數組中的值 小于或者等于 10^8

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/replace-non-coprime-numbers-in-array
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

  • 題目說了 以 任意 順序替換相鄰的非互質數都可以得到相同的結果
  • 使用 棧 放入至少兩個數字,從棧頂開始檢查是否是 非互質數
  • 如果是,刪除棧頂2個數,push LCM 到棧頂,重復該過程,直到不滿足,退出
  • 再加入下一個數到棧頂
class Solution { public:vector<int> replaceNonCoprimes(vector<int>& nums) {stack<int> s;for(int i = int(nums.size())-1; i>=0; --i){s.push(nums[i]);while(s.size() >= 2){int a = s.top();s.pop();int b = s.top();s.pop();int g = __gcd(a, b);if(g > 1){s.push(1LL*a*b/g);}else{s.push(b);s.push(a);break;}}}vector<int> ans;while(!s.empty()){ans.push_back(s.top());s.pop();}return ans;} };

212 ms 129.1 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

總結

以上是生活随笔為你收集整理的LeetCode 2197. 替换数组中的非互质数(栈)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。