【436】Solution for LeetCode Problems
2024-08-26 10:26:59
Coding everyday. ^_^
1. Two Sum
- 重点知识:指针可以存储数值,通过 malloc 新建数组
- int* returnSize:Size of the return array. Store the value in a pointer, say 2.
*returnSize = 2 - My solution:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
*returnSize = 2;
int* returnArray = malloc(sizeof(int)*(*returnSize));
for (int i = 0; i < numsSize-1; i++) {
for (int j = i+1; j < numsSize; j++) {
if (nums[i] + nums[j] == target) {
returnArray[0] = i;
returnArray[1] = j;
return returnArray;
}
}
}
returnArray[0] = -1;
returnArray[1] = -1;
return returnArray;
}
2. Add Two Numbers
- 重点知识:不能通过数字来计算,考虑进位,考虑链表遍历和插入节点,通过 malloc 新建节点
- Don't use integer to calculate in this problem since the numbers are very long.
- Need to consider carry bit.
- This linked list's head is the first node.
- My solution:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/ struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
struct ListNode* p1;
struct ListNode* p2;
struct ListNode* l3 = NULL;
struct ListNode* p3 = NULL;
p1 = l1;
p2 = l2; int carry_bit = 0;
while (p1 != NULL || p2 != NULL || carry_bit == 1) {
int num1;
int num2;
int num3;
if (p1 == NULL && p2 == NULL && carry_bit == 1) {
num3 = 1;
carry_bit = 0;
}
else {
if (p1 == NULL) {
num1 = 0;
}
else {
num1 = p1->val;
p1 = p1->next;
}
if (p2 == NULL) {
num2 = 0;
}
else {
num2 = p2->val;
p2 = p2->next;
} num3 = num1 + num2 + carry_bit;
if (num3 >= 10) {
carry_bit = 1;
num3 = num3 - 10;
}
else {
carry_bit = 0;
}
} struct ListNode* tmp;
tmp = malloc(sizeof(struct ListNode));
if (tmp == NULL) {
fprintf(stderr, "Out of memory.\n");
exit(1);
}
tmp->val = num3;
tmp->next = NULL; if (p3 == NULL) {
p3 = tmp;
l3 = p3;
}
else {
p3->next = tmp;
p3 = p3->next;
}
} return l3;
}
3. Longest Substring Without Repeating Characters
- 重点知识:多层遍历,时间复杂度过高
- My solution:
int lengthOfLongestSubstring(char * s){
int length = strlen(s);
if (length == 1){
return 1;
}
int max = 0;
for (int i = 0; i < length; i++) {
int flag = 1;
for (int j = i + 1; j < length & flag; j++) {
for (int k = j - 1; k >= i; k--) {
if (s[j] == s[k]) {
int tmp = j - i;
if (max < tmp) {
max = tmp;
}
i = k;
flag = 0;
break;
}
if (k == i) {
int tmp = j - i + 1;
if (max < tmp) {
max = tmp;
}
}
}
}
}
return max;
}
最新文章
- 博客迁移至CSDN
- SQL入门经典(七) 之脚本和批处理
- Android课程---qq登陆页面(练习)
- Oralce开窗函数OVER()的一些应用
- FbinstTool万能启动超级简单教程
- linux 打补丁 2原理
- apache的FileUtils方法大全
- [LeetCode OJ] Single Number之二 ——Given an array of integers, every element appears THREE times except for one. Find that single one.
- NEC红外遥控协议理解与实现
- POI读入excel文件到Java中
- JAVA Struts2 搭建
- Android WebKit 内核
- BootStrap 学习笔记一
- Visual Studio For MacOS 踩坑记(二)
- Django 2.0.3 使用笔记
- 浅析alsa声卡驱动snd_interval结构体openmin,openmax和integer含义
- holiday
- Android的环境搭建
- 构建配置 Enable multidex
- Nginx(六)-- 配置文件之Gzip