解題思路
1)遞迴思路:對於陣列中的每乙個數,都有兩種情況,選或者是不選,選的話s-arr[i],不選的話,s不變進入下乙個,遞迴出口有兩個,s等於0時,返回true,i==0時,返回arr[i]==s.(這個可以化成二叉樹的形式便於理解)
2)非遞迴思路:使用乙個二維陣列記錄,選擇和不選當前元素i對應值的s,對於陣列中的每乙個數,都有兩種情況,選或者是不選,選的話j-arr[i],不選的話,j不變進入下乙個.
實現如下:
1)遞迴實現:
bool
rec_subset
(int arr,
int i,
int s,
int size)
//i為0時,arr[0]是否等於s,等於則為true,否則false
else
if(i ==0)
//else if (arr[i] > s)
//else
}
2)非遞迴實現:
bool
dp_subset
(int arr,
int s,
int size)
for(
int i =
0; i < size; i++
) subset[0]
[0]=
true
; subset[0]
[arr[0]
]=true
;//至此初始化完畢
for(
int i =
1; i < size; i++
)else}}
return subset[size -1]
[s];
}
參考: 找出陣列中和為給定值的方法
這個題某次面試中面試官問到了,在leetcode上也有 題目描述 給定乙個整數陣列nums和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 ...
動態規劃 更新陣列值為其右邊最大值
given an array of integers,replace every element with the next greatest element greatest element on the right side in the array.since there is no elem...
未排序陣列中累加和為給定值的最長子陣列系列問題
牛客網左程雲第二課第三題,這是乙個很重要的演算法原型。問題 給定乙個無序陣列 arr,其中元素可正 可負 可 0,給定乙個整數 k。求 arr 所有的子陣列中累加和為 k 的最長子陣列長度。要求 時間複雜度 o n 分析 本題和未排序正數陣列中累加和為給定值的最長子陣列長度這個問題的區別在於,陣列中...