File tree Expand file tree Collapse file tree 3 files changed +95
-0
lines changed
best-time-to-buy-and-sell-stock
encode-and-decode-strings Expand file tree Collapse file tree 3 files changed +95
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * 121. Best Time to Buy and Sell Stock
3+ * You are given an array prices where prices[i] is the price of a given stock on the ith day.
4+ * You want to maximize your profit by choosing a single day to buy one stock and choosing a different day in the future to sell that stock.
5+ * Return the maximum profit you can achieve from this transaction. If you cannot achieve any profit, return 0.
6+ *
7+ * https://leetcode.com/problems/best-time-to-buy-and-sell-stock/description/
8+ */
9+
10+ // O(n) time
11+ // O(1) space
12+ function maxProfit ( prices : number [ ] ) : number {
13+ let highestProfit = 0 ;
14+ let left = 0 ;
15+ let right = 1 ;
16+
17+ while ( right < prices . length ) {
18+ if ( prices [ left ] < prices [ right ] ) {
19+ let profit = prices [ right ] - prices [ left ] ;
20+ highestProfit = Math . max ( highestProfit , profit ) ;
21+ } else {
22+ left = right ;
23+ }
24+
25+ right ++ ;
26+ }
27+
28+ return highestProfit ;
29+ }
Original file line number Diff line number Diff line change 1+ /**
2+ * 659 · Encode and Decode Strings
3+ * Design an algorithm to encode a list of strings to a string. The encoded string is then sent over the network and is decoded back to the original list of strings.
4+ * Please implement encode and decode
5+ *
6+ * https://leetcode.com/problems/encode-and-decode-strings/description/
7+ * https://www.lintcode.com/problem/659/
8+ *
9+ */
10+
11+ // O(n) time
12+ // O(1) space
13+ function encode ( strs : string [ ] ) : string {
14+ let result = "" ;
15+
16+ for ( const str of strs ) {
17+ result += `${ str . length } #${ str } ` ;
18+ }
19+
20+ return result ;
21+ }
22+
23+ // O(n) time
24+ // O(n) space
25+ function decode ( str : string ) {
26+ const result : string [ ] = [ ] ;
27+
28+ let i = 0 ;
29+ while ( i < str . length ) {
30+ let pos = str . indexOf ( "#" , i ) ;
31+ const len = Number ( str . slice ( i , pos ) ) ;
32+ const word = str . slice ( pos + 1 , pos + 1 + len ) ;
33+ result . push ( word ) ;
34+ i = pos + 1 + len ;
35+ }
36+
37+ return result ;
38+ }
Original file line number Diff line number Diff line change 1+ /**
2+ * 49. Group Anagrams
3+ * Given an array of strings strs, group the anagrams together. You can return the answer in any order.
4+ *
5+ * https://leetcode.com/problems/group-anagrams/description/
6+ */
7+
8+ // O(n * mlog(m)) time
9+ // O(n) space
10+ function groupAnagrams ( strs : string [ ] ) : string [ ] [ ] {
11+ const result : string [ ] [ ] = [ ] ;
12+ const map = new Map < string , string [ ] > ( ) ;
13+
14+ for ( let i = 0 ; i < strs . length ; i ++ ) {
15+ const word = strs [ i ] ;
16+ const sorted = word . split ( "" ) . sort ( ) . join ( "" ) ;
17+
18+ if ( map . has ( sorted ) ) {
19+ map . get ( sorted ) ! . push ( word ) ;
20+ } else {
21+ map . set ( sorted , [ word ] ) ;
22+ }
23+ }
24+
25+ map . forEach ( ( v ) => result . push ( v ) ) ;
26+
27+ return result ;
28+ }
You can’t perform that action at this time.
0 commit comments