【leetcode hot 100 416】分割等和子集

解法一:(動態規劃)①定義:dp[i]表示是否可以在nums找到元素之和為i,dp[sum/2+1] ②初始狀態:dp[0]=true;dp[i]=false ③狀態轉移方程:dp[i] = dp[i] || dp[i - num];

class Solution {public boolean canPartition(int[] nums) {// 定義:dp[i]表示是否可以在nums找到元素之和為i,dp[sum/2+1]// 初始狀態:dp[0]=true;dp[i]=false// 狀態轉移方程:dp[i] = dp[i] || dp[i - num];int n = nums.length;// 先計算總和int sum = 0;for (int num : nums) {sum += num;}// 計算每個子集的和應該為多少int target = sum / 2;// 預先判斷// 如果和不能被2整除,則不能分為兩個子集if (sum % 2 != 0) {return false;}// 由于nums只包含正整數,若任意一個數大于target則不能滿足for (int num : nums) {if (num > target){return false;}}// 動態規劃boolean[] dp = new boolean[target+1]; // dp[i]=true表示能在數組nums中找到子集和為idp[0] = true;for (int num : nums) {// 不需要,后面for循環:// 當i=num時,dp[num]=dp[num]||dp[num-num]=dp[num]||dp[0]=false||true=true// 而且會錯誤// 沒有避免一個數被多次取和沒有取!!!!// dp[num] = true;  // 給每個dp[num]賦值,num一定存在// 循環num,嘗試把num加進去,確保每個dp[i]只會用到一個num// 第二層的循環我們需要從大到小計算,因為如果我們從小到大更新 dp 值,那么在計算 dp[j] 值的時候,dp[j?nums[i]] 已經是被更新過的狀態,不再是上一行的 dp 值。for (int i=target; i >= num; i--) {dp[i] = dp[i] || dp[i - num];}if(dp[target]){// 已經有子集了,提前結束return true;}}return dp[target];}
}

注意:

  • 循環num,嘗試把num加進去,確保每個dp[i]只會用到一個num
  • 第二層的循環我們需要從大到小計算,因為如果我們從小到大更新 dp 值,那么在計算 dp[j] 值的時候,dp[j?nums[i]] 已經是被更新過的狀態,不再是上一行的 dp 值。
  • num一定存在,不需要dp[num] = true; 給每個dp[num]賦值。后面for循環:當i=num時,dp[num]=dp[num]||dp[num-num]=dp[num]||dp[0]=false||true=true;而且會錯誤,沒有避免一個數被多次取和沒有取!!!!錯誤:
    在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/78730.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/78730.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/78730.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

高中數學聯賽模擬試題精選第2套幾何題(改編)

在 △ A B C \triangle ABC △ABC 中, 點 M M M 是邊 A C AC AC 的中點. 在線段 A M AM AM, C M CM CM 上分別取點 P P P, Q Q Q, 使得 P Q A C / 2 PQAC/2 PQAC/2. 設 △ A B Q \triangle ABQ △ABQ 的外接圓與邊 B C BC BC 相交于點 X X X, △ B C P \triangle …

UWB雙通道隧道人員定位方案

技術基礎:UWB(超寬帶技術) 定義:UWB(Ultra-Wideband)是一種通過納秒級窄脈沖傳輸數據的無線通信技術,占用500MHz以上的超寬頻段。 核心優勢: 高精度定位:時間分辨率極高&…

Linux 入門八:Linux 多進程

一、概述 1.1 什么是進程? 在 Linux 系統中,進程是程序的一次動態執行過程。程序是靜態的可執行文件,而進程是程序運行時的實例,系統會為其分配內存、CPU 時間片等資源。例如,輸入 ls 命令時,系統創建進程…

MTCNN 人臉識別

前言 此處介紹強大的 MTCNN 模塊,給出demo,展示MTCNN 的 OOP, 以及ROS利用 C 節點,命令行調用腳本執行實際工作的思路。 MTCNN Script import argparse import cv2 from mtcnn import MTCNN import osclass MTCNNProcessor:def…

01_核心系統下的技術原理解析

15年前,基本上國內的核心系統被C壟斷,基本上是IBM的那套東西,場景也是比價復雜,這里不再贅述,TPS太過于龐大,技術上確實比較復雜。為此我這里拋磚引玉,說下對應的支付系統: &#x…

Python 實現最小插件框架

文章目錄 Python 實現最小插件框架1. 基礎實現項目結構plugin_base.py - 插件基類plugins/hello.py - 示例插件1plugins/goodbye.py - 示例插件2main.py - 主程序 2. 更高級的特性擴展2.1 插件配置支持2.2 插件依賴管理2.3 插件熱加載 3. 使用 setuptools 的入口點發現插件3.1 …

電感詳解:定義、作用、分類與使用要點

一、電感的基本定義 電感(Inductor) 是由導線繞制而成的儲能元件,其核心特性是阻礙電流變化,將電能轉化為磁能存儲。 基本公式: 自感電動勢: E -L * (di/dt) (L:電感值&#xff0c…

運行一次性任務與定時任務

運行一次性任務與定時任務 文章目錄 運行一次性任務與定時任務[toc]一、使用Job運行一次性任務1.創建一次性任務2.測試一次性任務3.刪除Job 二、使用CronJob運行定時任務1.創建定時任務2.測試定時任務3.刪除CronJob 一、使用Job運行一次性任務 1.創建一次性任務 (…

對話記憶(Conversational Memory)

一、引言 在與大型語言模型(LLM)交互的場景中,對話記憶(Conversational Memory)指的是模型能夠在多輪對話中保留、檢索并利用先前上下文信息的能力。這一機制使得對話系統不再僅僅是“問答機”,而是能夠持…

【HD-RK3576-PI】VNC 遠程桌面連接

在當今數字化時代,高效便捷的操作方式是技術愛好者與專業人士的共同追求。對于使用 HD-RK3576-PI微型單板計算機的用戶而言,當面臨沒有顯示屏的場景時,如何實現遠程操作桌面系統呢?別擔心,VNC 遠程桌面連接將為你解決這…

【unity游戲開發介紹之UGUI篇】UGUI概述和基礎使用

注意:考慮到UGUI的內容比較多,我將UGUI的內容分開,并全部整合放在【unity游戲開發介紹之UGUI篇】專欄里,感興趣的小伙伴可以前往逐一查看學習。 文章目錄 前言1、UI系統的重要性2、UGUI概述2.1 基本定義2.2 UGUI發展歷史 3、學習U…

Ubuntu 系統深度清理:徹底卸載 Redis 服務及殘留配置

Ubuntu 系統深度清理:徹底卸載 Redis 服務及殘留配置 在Ubuntu系統中,Redis是一種廣泛使用的內存數據存儲系統,用于緩存和消息傳遞等場景。然而,有時候我們需要徹底卸載Redis,以清理系統資源或為其他應用騰出空間。本…

[ARC196A] Adjacent Delete 題解

假設 n n n 是偶數。如果我們忽略刪除相鄰數的條件,即可以任選兩個數相減,那么答案應該是前 n 2 \frac{n}{2} 2n? 大的數(記作“較大數”)的和減去前 n 2 \frac{n}{2} 2n? 小的數(記作“較小數”)的和…

Linux上位機開發實踐(關于Qt的移植)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing 163.com】 linux平臺上面,很多界面應用,都是基于qt開發的。不管是x86平臺,還是arm平臺,qt使用的地方都比較多。…

”插入排序“”選擇排序“

文章目錄 插入排序1. 直接插入排序(O(n^2))舉例1:舉例2:直插排序的"代碼"直插排序的“時間復雜度” 2. 希爾排序(O(n^1.3))方法一方法二(時間復雜度更優) 選擇排序堆排序直接選擇排序 我們學過冒泡排序,堆排序等等。(回…

FPGA_BD Block Design學習(一)

PS端開發流程詳細步驟 1.第一步:打開Vivado軟件,創建或打開一個工程。 2.第二步:在Block Design中添加arm核心,并將其配置為IP核。 3.第三步:配置arm核心的外設信息,如DDR接口、時鐘頻率、UART接口等。 …

【Python] pip制作離線包

制作離線安裝包是一種非常實用的方法,尤其是在網絡環境受限或需要在多臺機器上部署相同環境時。以下是詳細的步驟,幫助您創建一個包含所有依賴項的離線安裝包,并在后續環境中復用。 步驟 1:準備工具和環境 確保您有一臺可以訪問互…

為啥物聯網用MQTT?

前言 都說物聯網用MQTT,那分別使用Http和Mqtt發送“Hello”,比較一下就知道啦 HTTP HTTP請求報文由請求行、頭部字段和消息體組成。一個最簡單的HTTP POST請求如下: POST / HTTP/1.1 Host: example.com Content-Length: 5 Content-Type: …

操作系統 ------ 五種IO模型

阻塞IO:一個IO請求操作,準備階段和復制階段都會阻塞應用程序,直到操作完全完成 非阻塞IO:一個IO操作請求,先判斷準備階段是否完成,如果未完成立即返回,否則,進入復制階段&#xff0…

service和endpoints是如何關聯的?

在Kubernetes中,Service 和 Endpoints 是兩個密切關聯的對象,它們共同實現了服務發現和負載均衡的功能。以下是它們之間的關聯和工作原理: 1. Service 的定義 Service 是一種抽象,定義了一組邏輯上相關的 Pod,以及用…