2
2
3
3
using namespace std ;
4
4
5
- void gates ()
6
- {
7
- int numberOfGates;
8
- int numberOfPlanes;
9
-
10
- scanf (" %d" , &numberOfGates);
11
- scanf (" %d" , &numberOfPlanes);
12
-
13
- vector<int > planes (numberOfPlanes);
14
- set<int , greater<int >> gates;
15
- for (int i = 0 ; i < numberOfPlanes; ++i)
16
- scanf (" %d" , &planes[i]);
17
- for (int i = 1 ; i <= numberOfGates; ++i)
18
- gates.insert (i);
19
-
20
- int numberOfPlanesAbleToDock = 0 ;
21
- for (int i = 0 ; i < numberOfPlanes; ++i)
22
- {
23
- auto gate = gates.lower_bound (planes[i]);
24
- if (gate == gates.end ())
25
- break ;
26
- gates.erase (*gate);
27
- ++numberOfPlanesAbleToDock;
28
- }
29
-
30
- printf (" %d\n " , numberOfPlanesAbleToDock);
31
- }
32
-
33
5
int subarraySumEqualsK (vector<int > &nums, int k)
34
6
{
35
7
unordered_map<int , int > previousSums;
36
8
previousSums[0 ] = 1 ;
37
- int prefixSum;
9
+ int prefixSum = 0 ;
38
10
int numberOfSubarrays = 0 ;
39
11
40
12
for (int i = 0 ; i < nums.size (); ++i)
@@ -53,6 +25,27 @@ int subarraySumEqualsK(vector<int> &nums, int k)
53
25
return numberOfSubarrays;
54
26
}
55
27
28
+ bool wordBreak (string s, vector<string> wordDict)
29
+ {
30
+ vector<bool > dp (s.size () + 1 , false );
31
+ dp[dp.size () - 1 ] = true ;
32
+
33
+ for (int i = s.size () - 1 ; i >= 0 ; --i)
34
+ {
35
+ for (int j = 0 ; j < wordDict.size (); ++j)
36
+ {
37
+ if (i + wordDict[j].size () <= s.size () && dp[i + wordDict[j].size ()])
38
+ {
39
+ string curr = s.substr (i, wordDict[j].size ());
40
+ if (curr == wordDict[j])
41
+ dp[i] = true ;
42
+ }
43
+ }
44
+ }
45
+
46
+ return dp[0 ];
47
+ }
48
+
56
49
int deleteAndEarn (vector<int > &nums)
57
50
{
58
51
sort (nums.begin (), nums.end ());
@@ -62,29 +55,48 @@ int deleteAndEarn(vector<int> &nums)
62
55
for (int i = 0 ; i < nums.size (); ++i)
63
56
{
64
57
if (i == 0 || nums[i] != nums[i - 1 ])
58
+ {
65
59
numsPrime.push_back (nums[i]);
66
- ++counts[nums[i]];
60
+ counts[nums[i]] = 1 ;
61
+ }
62
+ else if (i > 0 && nums[i] == nums[i - 1 ])
63
+ ++counts[nums[i]];
67
64
}
68
65
69
66
vector<int > dp (numsPrime.size (), 0 );
70
- for (int i = 0 ; i < numsPrime.size (); ++i)
67
+ dp[0 ] = numsPrime[0 ] * counts[numsPrime[0 ]];
68
+ for (int i = 1 ; i < numsPrime.size (); ++i)
71
69
{
72
70
int value = numsPrime[i] * counts[numsPrime[i]];
73
-
74
- if (i > 0 && numsPrime[i] - numsPrime[i - 1 ] > 1 )
71
+ if (numsPrime[i] - numsPrime[i - 1 ] > 1 )
75
72
value += numsPrime[i - 1 ];
76
- else if (i >= 2 && numsPrime[i] - numsPrime[i - 1 ] == 1 )
77
- value += dp[i - 2 ];
78
- if (i > 0 )
79
- dp[i] = max (dp[i - 1 ], value);
80
73
else
81
- dp[i] = value;
74
+ value = max (value + (i >= 2 ? numsPrime[i - 2 ] : 0 ), numsPrime[i - 1 ]);
75
+ dp[i] = value;
82
76
}
83
77
84
78
return dp[dp.size () - 1 ];
85
79
}
86
80
81
+ void iterativePreOrderTraversal (TreeNode *root)
82
+ {
83
+ stack<TreeNode *> nextNodes;
84
+ nextNodes.push (root);
85
+ while (!nextNodes.empty ())
86
+ {
87
+ TreeNode *curr = nextNodes.top ();
88
+ nextNodes.pop ();
89
+ printf (" %d " , curr->val );
90
+
91
+ if (curr->right != nullptr )
92
+ nextNodes.push (curr->right );
93
+ if (curr->left != nullptr )
94
+ nextNodes.push (curr->left );
95
+ }
96
+ }
97
+
87
98
int main ()
88
99
{
100
+ iterativePreOrderTraversal (createDefaultTree ());
89
101
return 0 ;
90
102
}
0 commit comments