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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

698. Partition to K Equal Sum Subsets

發布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 698. Partition to K Equal Sum Subsets 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 1 理解題目
  • 2 分析
  • 2.1進一步優化
  • 2.2 根據花花醬解答

1 理解題目

Given an array of integers nums and a positive integer k, find whether it’s possible to divide this array into k non-empty subsets whose sums are all equal.
輸入:一個int數組nums,一個int k
規則:將nums分成k個子數組,每個子數組的和相等
輸出:true:如果可以將nums分成k個和相等的子數組。否則false。

Example 1:

Input: nums = [4, 3, 2, 3, 5, 2, 1], k = 4
Output: True
Explanation: It’s possible to divide it into 4 subsets (5), (1, 4), (2,3), (2,3) with equal sums.

2 分析

nums能分成k份,每一份的和應該是總和/k。那就首先確認:總和%k=0。
每一個子數組的和應該是:target=總和/k。如果某個元素的值>target,那也是不可分的。每個元素至少有一個元素,比target大的元素單獨成一個子數組,不符合和為target的要求。

現在就該想怎么把這些元素分到k個子數組中。
最開始映入我腦中的是雙指針。將nums排序,一個指針從左開始,一個指針從右開始。后來一想,子數組中的元素不一定是2個,被例題束縛了思維。那就不能這樣做。但數組排序應該對。至于為什么,還不清楚。

那就嘗試用枚舉的方法。參考力扣官網。
將第0個元素1,可以放在第0個子數組中、第1個子數組、第2個子數組、第3個子數組。
將第1個元素2,嘗試放入第0,1,2,3個子數組,只要放入之后的和不超過target即可。

一直放到最后一個元素,將所有數字都放入了子數組中。

這里放入的過程不是直接將元素放進去,而是放入的是元素的和。

一個重要的細節是,通過判斷 if (groups[i] == 0) break;這是因為在嘗試了各種可能之后,groups[i]沒有合適的選項,所以直接返回false;

class Solution {private int[] nums;public boolean canPartitionKSubsets(int[] nums, int k) {int sum = Arrays.stream(nums).sum();if(sum % k >0) return false;int target = sum/k; Arrays.sort(nums);if(nums[nums.length-1]>target) return false;this.nums = nums;int[] groups = new int[k];return dfs(groups,0,target);}private boolean dfs(int[] group, int index, int target){if(index>=nums.length) return true;int v = nums[index++];for(int i=0;i<group.length;i++){if(group[i] + v<=target){group[i] += v;if(dfs(group,index,target)) return true;group[i] -= v;}if(group[i] == 0) break;}return false;} }

2.1進一步優化

優化的第一個地方是將數組末尾直接等于target的刪除。這個步驟優化效果不明顯。
優化的第二個地方是遍歷nums從最大值開始遍歷。自己可以手寫一下[1,2,2,3,3,4,5]這個例子,從大到小,與從小到大的枚舉情況,可以發現從大到小,可以很快找到答案。

class Solution {private int[] nums;public boolean canPartitionKSubsets(int[] nums, int k) {int sum = Arrays.stream(nums).sum();if(sum % k >0) return false;int target = sum/k; Arrays.sort(nums);if(nums[nums.length-1]>target) return false;this.nums = nums;int index = nums.length-1;while(index>=0 && nums[index]==target){index--;k--;}int[] groups = new int[k];return dfs(groups,index,target);}private boolean dfs(int[] group, int index, int target){if(index<0) return true;int v = nums[index--];for(int i=0;i<group.length;i++){if(group[i] + v<=target){group[i] += v;if(dfs(group,index,target)) return true;group[i] -= v;}if(group[i] == 0) break;}return false;} }

時間復雜度O(kN?kk!)O(k^{N-k}k!)O(kN?kk!),N是nums的長度。

2.2 根據花花醬解答

c++代碼可以過,java代碼超時。來源地址。

class Solution {private int[] nums;public boolean canPartitionKSubsets(int[] nums, int k) {int sum = Arrays.stream(nums).sum();if(sum%k!=0) return false;int target = sum/k;if(nums[nums.length-1]>target) return false;Arrays.sort(nums);this.nums = nums;return dfs(0,0,k,target);}private boolean dfs(int current,int used,int k,int target){if(k==0) return (used == (1<<nums.length)-1);for(int i=0;i<nums.length;i++){if((used & (1<<i))>0) continue;int t = current + nums[i];if(t>target) break;int newUsed = (used | (1<<i));if(t==target){if(dfs(0,newUsed,k-1,target)) return true;}else{if(dfs(t,newUsed,k,target)) return true;}}return false;}}

總結

以上是生活随笔為你收集整理的698. Partition to K Equal Sum Subsets的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 69视频在线看 | 亚洲精品一区二区三区四区 | 黄色日本网站 | 黄色小电影网址 | 日韩一区二区三区在线观看 | 成人免费直播 | 亚洲成人久久久 | 黄色片免费在线 | a级在线观看网站 | 午夜看片 | 国产一级二级三级在线 | 精品3p | 日韩人妻精品一区二区三区 | 欧美成人69 | 日本一区二区三区在线观看视频 | 久久人人视频 | www欧美 | 色综合99久久久无码国产精品 | 黄色国产一区 | 一个人看的www视频在线观看 | 99久久精品免费看国产免费软件 | 日韩精品国产一区 | 欧美人在线 | 国产伦精品一区二区三区妓女下载 | 国产无码精品视频 | 亚洲国产精品无码久久久久高潮 | 奇米影视欧美 | 求个黄色网址 | 1024金沙人妻一区二区三区 | jizz91 | 久久免费看少妇高潮v片特黄 | 亚洲成人77777 | 噜噜色成人 | 丝袜制服中文字幕 | 日韩欧美一区二区三区免费观看 | 在线一二区 | 国产精品久久久久久久天堂 | 日日爱886| 成人一区二区三区仙踪林 | 国产乱码在线观看 | 久久在线免费 | 丰满护士巨好爽好大乳 | 黄色成人在线免费观看 | 富二代成人短视频 | 第一福利视频 | 午夜伊人网 | 欧洲亚洲激情 | 中文日韩av| 夜夜爽夜夜| 国产精品久久久久久久久久久免费看 | 污污污www精品国产网站 | 69堂免费视频 | 综合天堂av久久久久久久 | 久久久精品人妻一区二区三区色秀 | 狠狠狠狠狠 | 国产美女91 | 精品久久在线观看 | 国产又色又爽又黄又免费 | 午夜有码 | 黑丝美女av | 日韩欧美理论片 | 欧美成人一区在线观看 | 国产精品桃色 | 精品久久久影院 | 日韩三级一区二区 | 最新日韩视频 | 黄色工厂这里只有精品 | 可以看毛片的网站 | 国产精品一区二区三区高潮 | 四虎国产成人永久精品免费 | 日韩色av | 电影寂寞少女免费观看 | 校园春色亚洲激情 | 欧美激情精品久久久久久变态 | 激情一区二区 | 亚洲乱码中文字幕久久孕妇黑人 | 中文字幕1区2区3区 www.com黄色片 | 大屁股白浆一区二区三区 | 日韩中文字幕高清 | 好看的中文字幕av | 日屁网站 | 激情图片区 | 西方av在线 | 四季av一区二区夜夜嗨 | 狼人狠狠干 | 国产一区二区三区在线 | wwww黄色片| 天天色一色 | 国产高清免费在线播放 | 日韩av综合网 | 成人片在线免费看 | 亚洲一区二区视频在线播放 | 日韩黄色成人 | 国产麻豆剧果冻传媒白晶晶 | 国产网址在线 | 男人天堂999| 深夜福利电影 | 中文字幕一区二区三区日韩精品 | 亚洲日本精品 |