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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

LeetCode 1363. 形成三的最大倍数(贪心,难)

發布時間:2024/7/5 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 1363. 形成三的最大倍数(贪心,难) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 題目

給你一個整數數組 digits,你可以通過按任意順序連接其中某些數字來形成 3 的倍數,請你返回所能得到的最大的 3 的倍數。

由于答案可能不在整數數據類型范圍內,請以字符串形式返回答案。

如果無法得到答案,請返回一個空字符串。

示例 1: 輸入:digits = [8,1,9] 輸出:"981"示例 2: 輸入:digits = [8,6,7,1,0] 輸出:"8760"示例 3: 輸入:digits = [1] 輸出:""示例 4: 輸入:digits = [0,0,0,0,0,0] 輸出:"0"提示: 1 <= digits.length <= 10^4 0 <= digits[i] <= 9 返回的結果不應包含不必要的前導零。

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

容易錯的數據:

[9,8,6,8,6] [2,2,1,1,1] [1,1,1,2] [5,8]

2. 解題

  • 把所有數加起來和為sum,總的字符串降序排序,然后sum%3,看余數
  • 等于0,直接返回
  • 等于1,優先刪除1個1 or 4 or 7,沒有的話,刪除2,5,8中最小的2個
  • 等于2,優先刪除1個2 or 5 or 8,沒有的話,刪除1,4,7中最小的2個
class Solution { public:string largestMultipleOfThree(vector<int>& digits) {int count[10] = {0}, i, sum = 0, time;string ans; for(i = 0; i < digits.size(); ++i){count[digits[i]]++;//計數sum += digits[i];//總和ans += digits[i]+'0';//字符串}sort(ans.begin(), ans.end(),[](char& a, char& b){return a > b;});if(sum%3 == 1){i = ans.size()-1;if(count[1]!=0||count[4]!=0||count[7]!=0){for( ; i>=0; --i){if(ans[i]=='1'||ans[i]=='4'||ans[i]=='7'){ans.erase(ans.begin()+i);break;}}}else{ time = 2;for( ; i>=0; --i){if(ans[i]=='2'||ans[i]=='5'||ans[i]=='8'){ans.erase(ans.begin()+i);time--;if(time == 0)break;}}}}else if(sum%3 == 2){i = ans.size()-1;if(count[2]!=0||count[5]!=0||count[8]!=0){for( ; i>=0; --i){if(ans[i]=='2'||ans[i]=='5'||ans[i]=='8'){ans.erase(ans.begin()+i);break;}}}else{ time = 2;for( ; i>=0; --i){if(ans[i]=='1'||ans[i]=='4'||ans[i]=='7'){ans.erase(ans.begin()+i);time--;if(time == 0)break;}}}}if(ans != "" && ans[0]=='0')return "0";return ans;} };

大佬優美解:

class Solution {int cnt[10], sum;string ans = "";set<int> s;int del(int m){for(int i=m;i<=9;i+=3)if(cnt[i]){cnt[i]--;return 1;}return 0;} public:string largestMultipleOfThree(vector<int>& d) {for(auto x:d)cnt[x]++, sum += x;if(sum%3==1)if(!del(1))del(2),del(2);if(sum%3==2)if(!del(2))del(1),del(1);for(int i=9; i>=0; i--)while(cnt[i]--)ans += i+'0', s.insert(i);if(s.size()==1 && s.count(0))return "0";// [1,0,0] -> "0"return ans;} };作者:YusenZhang_chatc 鏈接:https://leetcode-cn.com/problems/largest-multiple-of-three/solution/c-qu-diao-zui-xiao-zhi-8ms-by-yusenzhang_chatc/

總結

以上是生活随笔為你收集整理的LeetCode 1363. 形成三的最大倍数(贪心,难)的全部內容,希望文章能夠幫你解決所遇到的問題。

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