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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Partition to K Equal Sum Subsets——LeetCode进阶路

發布時間:2025/5/22 编程问答 26 如意码农
生活随笔 收集整理的這篇文章主要介紹了 Partition to K Equal Sum Subsets——LeetCode进阶路 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原題鏈接https://leetcode.com/problems/partition-to-k-equal-sum-subsets/

題目描述

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.

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.

Note:

1 <= k <= len(nums) <= 16.
0 < nums[i] < 10000.

思路分析

給定一個整數數組,一個整數,返回是否數組能夠被分為k個等值的子集。
直觀的想,用遞歸,一個一個子集的湊,一旦有湊不上的則返回false
還有就是注意些特殊情況:

  • 分組數大于數組的長度,返回false
  • 若數組元素之和不能被數組數整除,則肯定不能滿足分組,返回false
  • 若分組數為1的話,直接返回數組本身就好,顯然返回true
  • 當有超過平均值的數組元素,返回false
    notes : 一定記得回溯……
    筆者小陌第N次忘記回溯(╯︵╰)

AC解

class Solution {
public boolean canPartitionKSubsets(int[] nums, int k) {
if(k == 1)
{
return true;
} if(nums == null || nums.length == 0 || k > nums.length)
{
return false;
} int sum = 0;
int max = 0;
for(int i:nums)
{
sum = sum + i ;
max = Math.max(max,i);
}
if(sum % k != 0 || sum / k < max)
{
return false;
} boolean[] flag = new boolean[nums.length];
return dfs(nums,flag,k,sum /k,0,0);
} public boolean dfs(int[] nums , boolean[] flag , int k , int subset , int curSubset , int position)
{
if(k == 0)
{
return true;
} if(subset == curSubset)
{
return dfs(nums,flag,k-1,subset,0,0);
} for(int i = position ; i<nums.length ; i++)
{
if(flag[i])
{
continue;
}
flag[i] = true;
if(dfs(nums,flag,k,subset,curSubset+nums[i],i+1))
{
return true;
}
flag[i] = false;//記得回溯!!!!
} return false;
}
}

總結

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

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