File tree Expand file tree Collapse file tree 10 files changed +481
-0
lines changed Expand file tree Collapse file tree 10 files changed +481
-0
lines changed Original file line number Diff line number Diff line change
1
+ ListNode* removeNthFromEnd (ListNode* head, int n) {
2
+ if (n <= 0 )
3
+ return head;
4
+ vector<ListNode*> vec;
5
+ ListNode* p = head;
6
+ int len = 0 ;
7
+ while (p != NULL )
8
+ {
9
+ vec.push_back (p);
10
+ p = p->next ;
11
+ len++;
12
+ }
13
+ if (n == len)
14
+ {
15
+ head = vec[0 ]->next ;
16
+ delete vec[0 ];
17
+ }
18
+ else
19
+ {
20
+ vec[len - n - 1 ]->next = vec[len - n]->next ;
21
+ delete vec[len - n];
22
+ }
23
+
24
+ return head;
25
+ }
Original file line number Diff line number Diff line change
1
+ ListNode* swapPairs (ListNode* head) {
2
+ if (head == NULL || head->next == NULL )
3
+ return head;
4
+ ListNode* p = head;
5
+ ListNode* q = head->next ;
6
+ ListNode* h = q;
7
+
8
+ p->next = q->next ;
9
+ q->next = p;
10
+ ListNode* k = p->next ;
11
+ int n = 1 ;
12
+ while (k != NULL )
13
+ {
14
+ if (n == 1 )
15
+ {
16
+ q = p;
17
+ p = k;
18
+ k = k->next ;
19
+ }
20
+ else
21
+ {
22
+ p->next = k->next ;
23
+ q->next = k;
24
+ k->next = p;
25
+ k = p->next ;
26
+ }
27
+ n = 1 - n;
28
+ }
29
+
30
+ return h;
31
+ }
Original file line number Diff line number Diff line change
1
+ string getHint (string secret, string guess) {
2
+ int digitnum1[10 ] = {0 };
3
+ int digitnum2[10 ] = {0 };
4
+
5
+ int sz = secret.size ();
6
+ int ctA = 0 , ctB = 0 ;
7
+ for (int i = 0 ; i != sz; ++i)
8
+ {
9
+ digitnum1[secret[i] - ' 0' ]++;
10
+ digitnum2[guess[i] - ' 0' ]++;
11
+ if (secret[i] == guess[i])
12
+ ctA++;
13
+ }
14
+ for (int i = 0 ; i != 10 ; ++i)
15
+ {
16
+ ctB += digitnum1[i] < digitnum2[i] ? digitnum1[i] : digitnum2[i];
17
+ }
18
+
19
+ return num2str (ctA) + " A" + num2str (ctB - ctA) + " B" ;
20
+ }
21
+
22
+ string num2str (int n)
23
+ {
24
+ if (n == 0 )
25
+ return " 0" ;
26
+
27
+ string str;
28
+ while (n != 0 )
29
+ {
30
+ str.push_back (char (n % 10 + ' 0' ));
31
+ n /= 10 ;
32
+ }
33
+ reverse (str.begin (), str.end ());
34
+ return str;
35
+ }
Original file line number Diff line number Diff line change
1
+ bool isValidSudoku (vector<vector<char >>& board) {
2
+ for (int i = 0 ; i < 9 ; ++i)
3
+ {
4
+ int arr1[9 ] = {0 };
5
+ for (int j = 0 ; j < 9 ; ++j)
6
+ {
7
+ if (board[i][j] == ' .' )
8
+ continue ;
9
+ else if ((board[i][j] >= ' 1' && board[i][j] <= ' 9' ))
10
+ {
11
+ int pos1 = board[i][j] - ' 1' ;
12
+ if (arr1[pos1] == 1 )
13
+ return false ;
14
+ else
15
+ arr1[pos1] = 1 ;
16
+ }
17
+ else
18
+ return false ;
19
+ }
20
+ }
21
+
22
+ for (int i = 0 ; i < 9 ; ++i)
23
+ {
24
+ int arr2[9 ] = {0 };
25
+ for (int j = 0 ; j < 9 ; ++j)
26
+ {
27
+ if (board[j][i] == ' .' )
28
+ continue ;
29
+ else if ((board[j][i] >= ' 1' && board[j][i] <= ' 9' ))
30
+ {
31
+ int pos2 = board[j][i] - ' 1' ;
32
+ if (arr2[pos2] == 1 )
33
+ return false ;
34
+ else
35
+ arr2[pos2] = 1 ;
36
+ }
37
+ else
38
+ return false ;
39
+ }
40
+ }
41
+
42
+ for (int i = 0 ; i < 9 ; i = i + 3 )
43
+ {
44
+ for (int j = 0 ; j < 9 ; j = j + 3 )
45
+ {
46
+ int arr[9 ] = {0 };
47
+ for (int m = i; m < i + 3 ; ++m)
48
+ {
49
+ for (int n = j; n < j + 3 ; ++n)
50
+ {
51
+ if (board[m][n] == ' .' )
52
+ continue ;
53
+ else if (board[m][n] >= ' 1' && board[i][j] <= ' 9' )
54
+ {
55
+ int pos = board[m][n] - ' 1' ;
56
+ if (arr[pos] == 1 )
57
+ return false ;
58
+ else
59
+ arr[pos] = 1 ;
60
+ }
61
+ else
62
+ return false ;
63
+ }
64
+ }
65
+ }
66
+ }
67
+ return true ;
68
+ }
Original file line number Diff line number Diff line change
1
+ int maxRotateFunction (vector<int >& A) {
2
+ int sz = A.size ();
3
+ int sum = 0 , subsum = 0 ;
4
+ int total = 0 ;
5
+ for (int i = 0 ; i < sz; ++i)
6
+ total += A[i];
7
+ for (int i = 0 ; i < sz; ++i)
8
+ subsum += i * A[i];
9
+ sum = subsum;
10
+ for (int i = 1 ; i < sz; ++i)
11
+ {
12
+ subsum = subsum + total - sz * A[sz - i];
13
+ if (subsum > sum)
14
+ sum = subsum;
15
+ }
16
+
17
+ return sum;
18
+ }
Original file line number Diff line number Diff line change
1
+ ListNode* addTwoNumbers (ListNode* l1, ListNode* l2) {
2
+ string a = calculateNum (l1);
3
+ string b = calculateNum (l2);
4
+
5
+ string c = stradd (a, b);
6
+
7
+ ListNode* node = new ListNode (c[0 ]-' 0' );
8
+ ListNode* root = node;
9
+ int sz = c.size (), i = 1 ;
10
+ while (i < sz)
11
+ {
12
+ node = new ListNode (c[i]-' 0' );
13
+ node->next = root;
14
+ root = node;
15
+ ++i;
16
+ }
17
+
18
+ return root;
19
+ }
20
+
21
+ string calculateNum (ListNode* node)
22
+ {
23
+ string res;
24
+ while (node != nullptr )
25
+ {
26
+ res.push_back (char (node->val + ' 0' ));
27
+ node = node->next ;
28
+ }
29
+
30
+ return res;
31
+ }
32
+
33
+ string stradd (const string& a, const string& b)
34
+ {
35
+ string res;
36
+ int len1 = a.size (), len2 = b.size ();
37
+ int i = len1 - 1 , j = len2 - 1 ;
38
+ int c = 0 ;
39
+
40
+ while (i >= 0 && j >= 0 )
41
+ {
42
+ int tmp = a[i] - ' 0' + b[j] - ' 0' + c;
43
+ res.push_back (char (tmp%10 + ' 0' ));
44
+ c = tmp/10 ;
45
+ --i;
46
+ --j;
47
+ }
48
+ while (i >= 0 )
49
+ {
50
+ int tmp = a[i] - ' 0' + c;
51
+ res.push_back (char (tmp%10 + ' 0' ));
52
+ c = tmp/10 ;
53
+ --i;
54
+ }
55
+ while (j >= 0 )
56
+ {
57
+ int tmp = b[j] - ' 0' + c;
58
+ res.push_back (char (tmp%10 + ' 0' ));
59
+ c = tmp/10 ;
60
+ --j;
61
+ }
62
+ if (c > 0 )
63
+ res.push_back (char (c + ' 0' ));
64
+
65
+ return res;
66
+ }
Original file line number Diff line number Diff line change
1
+ vector<int > findDiagonalOrder (vector<vector<int >>& matrix)
2
+ {
3
+ vector<int > res;
4
+ int row = matrix.size ();
5
+ if (row == 0 )
6
+ return res;
7
+ if (row == 1 )
8
+ return matrix[0 ];
9
+ int col = matrix[0 ].size ();
10
+ if (col == 1 )
11
+ {
12
+ for (int i = 0 ; i < row; ++i)
13
+ res.push_back (matrix[i][0 ]);
14
+ return res;
15
+ }
16
+
17
+ int i = 0 , j = 0 ;
18
+ bool down = false ;
19
+ while (i < row && j < col)
20
+ {
21
+ res.push_back (matrix[i][j]);
22
+ if (i == row - 1 && j == col - 1 )
23
+ break ;
24
+ if (i == 0 )
25
+ {
26
+ if (!down)
27
+ {
28
+ if (j < col - 1 )
29
+ ++j;
30
+ else
31
+ ++i;
32
+ down = !down;
33
+ }
34
+ else
35
+ {
36
+ ++i;
37
+ --j;
38
+ }
39
+ }
40
+ else
41
+ {
42
+ if (down)
43
+ {
44
+ if (j == 0 )
45
+ {
46
+ if (i < row - 1 )
47
+ ++i;
48
+ else
49
+ ++j;
50
+ down = !down;
51
+ }
52
+ else
53
+ {
54
+ if (i < row - 1 )
55
+ {
56
+ ++i;
57
+ --j;
58
+ }
59
+ else
60
+ {
61
+ ++j;
62
+ down = !down;
63
+ }
64
+ }
65
+ }
66
+ else
67
+ {
68
+ if (j < col - 1 )
69
+ {
70
+ --i;
71
+ ++j;
72
+ }
73
+ else
74
+ {
75
+ ++i;
76
+ down = !down;
77
+ }
78
+ }
79
+ }
80
+ }
81
+
82
+ return res;
83
+ }
Original file line number Diff line number Diff line change
1
+ int findMinDifference (vector<string>& timePoints) {
2
+ int len = timePoints.size ();
3
+ if (len <= 1 )
4
+ return 0 ;
5
+ sort (timePoints.begin (), timePoints.end ());
6
+ int mindiff = calcudiff (timePoints[0 ], timePoints[1 ]);
7
+ int diff;
8
+ for (int i = 2 ; i < len; ++i)
9
+ {
10
+ diff = calcudiff (timePoints[i - 1 ], timePoints[i]);
11
+ if (diff < mindiff)
12
+ mindiff = diff;
13
+ }
14
+ diff = calcudiff (timePoints[len - 1 ], timePoints[0 ]) + 1440 ;
15
+ if (diff < mindiff)
16
+ mindiff = diff;
17
+
18
+ return mindiff;
19
+ }
20
+
21
+ int calcudiff (const string& t1, const string& t2)
22
+ {
23
+ int h1 = stoi (t1.substr (0 , 2 ));
24
+ int h2 = stoi (t2.substr (0 , 2 ));
25
+ int min1 = stoi (t1.substr (3 ));
26
+ int min2 = stoi (t2.substr (3 ));
27
+
28
+ return h2*60 + min2 - h1*60 - min1;
29
+ }
You can’t perform that action at this time.
0 commit comments