Skip to content

Commit 919c528

Browse files
committed
Added C solutions
1 parent ad803ac commit 919c528

File tree

105 files changed

+9475
-380
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

105 files changed

+9475
-380
lines changed

README.md

+380-380
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
[![](https://img.shields.io/github/stars/javadev/LeetCode-in-All?label=Stars&style=flat-square)](https://github.com/javadev/LeetCode-in-All)
2+
[![](https://img.shields.io/github/forks/javadev/LeetCode-in-All?label=Fork%20me%20on%20GitHub%20&style=flat-square)](https://github.com/javadev/LeetCode-in-All/fork)
3+
4+
## 1\. Two Sum
5+
6+
Easy
7+
8+
Given an array of integers `nums` and an integer `target`, return _indices of the two numbers such that they add up to `target`_.
9+
10+
You may assume that each input would have **_exactly_ one solution**, and you may not use the _same_ element twice.
11+
12+
You can return the answer in any order.
13+
14+
**Example 1:**
15+
16+
**Input:** nums = [2,7,11,15], target = 9
17+
18+
**Output:** [0,1]
19+
20+
**Output:** Because nums[0] + nums[1] == 9, we return [0, 1].
21+
22+
**Example 2:**
23+
24+
**Input:** nums = [3,2,4], target = 6
25+
26+
**Output:** [1,2]
27+
28+
**Example 3:**
29+
30+
**Input:** nums = [3,3], target = 6
31+
32+
**Output:** [0,1]
33+
34+
**Constraints:**
35+
36+
* <code>2 <= nums.length <= 10<sup>4</sup></code>
37+
* <code>-10<sup>9</sup> <= nums[i] <= 10<sup>9</sup></code>
38+
* <code>-10<sup>9</sup> <= target <= 10<sup>9</sup></code>
39+
* **Only one valid answer exists.**
40+
41+
**Follow-up:** Can you come up with an algorithm that is less than <code>O(n<sup>2</sup>) </code>time complexity?
42+
43+
## Solution
44+
45+
```c
46+
/**
47+
* Note: The returned array must be malloced, assume caller calls free().
48+
*/
49+
int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
50+
returnSize[0] = 2;
51+
int* output = (int*)malloc(sizeof(int) * 2);
52+
53+
for (int offset = 1; offset < numsSize; offset++) {
54+
int i = 0;
55+
while (i + offset < numsSize) {
56+
if (nums[i] + nums[i + offset] == target) {
57+
output[0] = i;
58+
output[1] = i + offset;
59+
return output;
60+
}
61+
i++;
62+
}
63+
}
64+
return (void*)0;
65+
}
66+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
[![](https://img.shields.io/github/stars/javadev/LeetCode-in-All?label=Stars&style=flat-square)](https://github.com/javadev/LeetCode-in-All)
2+
[![](https://img.shields.io/github/forks/javadev/LeetCode-in-All?label=Fork%20me%20on%20GitHub%20&style=flat-square)](https://github.com/javadev/LeetCode-in-All/fork)
3+
4+
## 2\. Add Two Numbers
5+
6+
Medium
7+
8+
You are given two **non-empty** linked lists representing two non-negative integers. The digits are stored in **reverse order**, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.
9+
10+
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
11+
12+
**Example 1:**
13+
14+
![](https://assets.leetcode.com/uploads/2020/10/02/addtwonumber1.jpg)
15+
16+
**Input:** l1 = [2,4,3], l2 = [5,6,4]
17+
18+
**Output:** [7,0,8]
19+
20+
**Explanation:** 342 + 465 = 807.
21+
22+
**Example 2:**
23+
24+
**Input:** l1 = [0], l2 = [0]
25+
26+
**Output:** [0]
27+
28+
**Example 3:**
29+
30+
**Input:** l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
31+
32+
**Output:** [8,9,9,9,0,0,0,1]
33+
34+
**Constraints:**
35+
36+
* The number of nodes in each linked list is in the range `[1, 100]`.
37+
* `0 <= Node.val <= 9`
38+
* It is guaranteed that the list represents a number that does not have leading zeros.
39+
40+
## Solution
41+
42+
```c
43+
/**
44+
* Definition for singly-linked list.
45+
* struct ListNode {
46+
* int val;
47+
* struct ListNode *next;
48+
* };
49+
*/
50+
// Function to create a new ListNode
51+
struct ListNode* createNode(int val) {
52+
struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
53+
newNode->val = val;
54+
newNode->next = NULL;
55+
return newNode;
56+
}
57+
58+
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
59+
struct ListNode dummyHead;
60+
dummyHead.val = 0;
61+
dummyHead.next = NULL;
62+
63+
struct ListNode* p = l1;
64+
struct ListNode* q = l2;
65+
struct ListNode* curr = &dummyHead;
66+
int carry = 0;
67+
68+
while (p != NULL || q != NULL) {
69+
int x = (p != NULL) ? p->val : 0;
70+
int y = (q != NULL) ? q->val : 0;
71+
int sum = carry + x + y;
72+
carry = sum / 10;
73+
74+
curr->next = createNode(sum % 10);
75+
curr = curr->next;
76+
77+
if (p != NULL) {
78+
p = p->next;
79+
}
80+
if (q != NULL) {
81+
q = q->next;
82+
}
83+
}
84+
85+
if (carry > 0) {
86+
curr->next = createNode(carry);
87+
}
88+
89+
return dummyHead.next;
90+
}
91+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
[![](https://img.shields.io/github/stars/javadev/LeetCode-in-All?label=Stars&style=flat-square)](https://github.com/javadev/LeetCode-in-All)
2+
[![](https://img.shields.io/github/forks/javadev/LeetCode-in-All?label=Fork%20me%20on%20GitHub%20&style=flat-square)](https://github.com/javadev/LeetCode-in-All/fork)
3+
4+
## 3\. Longest Substring Without Repeating Characters
5+
6+
Medium
7+
8+
Given a string `s`, find the length of the **longest substring** without repeating characters.
9+
10+
**Example 1:**
11+
12+
**Input:** s = "abcabcbb"
13+
14+
**Output:** 3
15+
16+
**Explanation:** The answer is "abc", with the length of 3.
17+
18+
**Example 2:**
19+
20+
**Input:** s = "bbbbb"
21+
22+
**Output:** 1
23+
24+
**Explanation:** The answer is "b", with the length of 1.
25+
26+
**Example 3:**
27+
28+
**Input:** s = "pwwkew"
29+
30+
**Output:** 3
31+
32+
**Explanation:** The answer is "wke", with the length of 3. Notice that the answer must be a substring, "pwke" is a subsequence and not a substring.
33+
34+
**Example 4:**
35+
36+
**Input:** s = ""
37+
38+
**Output:** 0
39+
40+
**Constraints:**
41+
42+
* <code>0 <= s.length <= 5 * 10<sup>4</sup></code>
43+
* `s` consists of English letters, digits, symbols and spaces.
44+
45+
## Solution
46+
47+
```c
48+
#include <stdio.h>
49+
#include <string.h>
50+
51+
int lengthOfLongestSubstring(const char* s) {
52+
int lastIndices[256];
53+
for (int i = 0; i < 256; i++) {
54+
lastIndices[i] = -1;
55+
}
56+
57+
int maxLen = 0;
58+
int curLen = 0;
59+
int start = 0;
60+
61+
for (int i = 0; i < strlen(s); i++) {
62+
char cur = s[i];
63+
if (lastIndices[(unsigned char)cur] < start) {
64+
lastIndices[(unsigned char)cur] = i;
65+
curLen++;
66+
} else {
67+
int lastIndex = lastIndices[(unsigned char)cur];
68+
start = lastIndex + 1;
69+
curLen = i - start + 1;
70+
lastIndices[(unsigned char)cur] = i;
71+
}
72+
73+
if (curLen > maxLen) {
74+
maxLen = curLen;
75+
}
76+
}
77+
78+
return maxLen;
79+
}
80+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
[![](https://img.shields.io/github/stars/javadev/LeetCode-in-All?label=Stars&style=flat-square)](https://github.com/javadev/LeetCode-in-All)
2+
[![](https://img.shields.io/github/forks/javadev/LeetCode-in-All?label=Fork%20me%20on%20GitHub%20&style=flat-square)](https://github.com/javadev/LeetCode-in-All/fork)
3+
4+
## 4\. Median of Two Sorted Arrays
5+
6+
Hard
7+
8+
Given two sorted arrays `nums1` and `nums2` of size `m` and `n` respectively, return **the median** of the two sorted arrays.
9+
10+
The overall run time complexity should be `O(log (m+n))`.
11+
12+
**Example 1:**
13+
14+
**Input:** nums1 = [1,3], nums2 = [2]
15+
16+
**Output:** 2.00000
17+
18+
**Explanation:** merged array = [1,2,3] and median is 2.
19+
20+
**Example 2:**
21+
22+
**Input:** nums1 = [1,2], nums2 = [3,4]
23+
24+
**Output:** 2.50000
25+
26+
**Explanation:** merged array = [1,2,3,4] and median is (2 + 3) / 2 = 2.5.
27+
28+
**Example 3:**
29+
30+
**Input:** nums1 = [0,0], nums2 = [0,0]
31+
32+
**Output:** 0.00000
33+
34+
**Example 4:**
35+
36+
**Input:** nums1 = [], nums2 = [1]
37+
38+
**Output:** 1.00000
39+
40+
**Example 5:**
41+
42+
**Input:** nums1 = [2], nums2 = []
43+
44+
**Output:** 2.00000
45+
46+
**Constraints:**
47+
48+
* `nums1.length == m`
49+
* `nums2.length == n`
50+
* `0 <= m <= 1000`
51+
* `0 <= n <= 1000`
52+
* `1 <= m + n <= 2000`
53+
* <code>-10<sup>6</sup> <= nums1[i], nums2[i] <= 10<sup>6</sup></code>
54+
55+
## Solution
56+
57+
```c
58+
#include <stdio.h>
59+
#include <limits.h>
60+
61+
double findMedianSortedArrays(int* nums1, int n1, int* nums2, int n2) {
62+
if (n1 > n2) {
63+
return findMedianSortedArrays(nums2, n2, nums1, n1);
64+
}
65+
66+
int low = 0, high = n1;
67+
while (low <= high) {
68+
int cut1 = (low + high) / 2;
69+
int cut2 = (n1 + n2 + 1) / 2 - cut1;
70+
71+
int l1 = (cut1 == 0) ? INT_MIN : nums1[cut1 - 1];
72+
int l2 = (cut2 == 0) ? INT_MIN : nums2[cut2 - 1];
73+
int r1 = (cut1 == n1) ? INT_MAX : nums1[cut1];
74+
int r2 = (cut2 == n2) ? INT_MAX : nums2[cut2];
75+
76+
if (l1 <= r2 && l2 <= r1) {
77+
if ((n1 + n2) % 2 == 0) {
78+
return (double)(fmax(l1, l2) + fmin(r1, r2)) / 2.0;
79+
} else {
80+
return (double)fmax(l1, l2);
81+
}
82+
} else if (l1 > r2) {
83+
high = cut1 - 1;
84+
} else {
85+
low = cut1 + 1;
86+
}
87+
}
88+
89+
return 0.0;
90+
}
91+
```

0 commit comments

Comments
 (0)