Skip to content

Commit 864e76a

Browse files
committed
HOT100-中等题2道
1 parent 1611957 commit 864e76a

File tree

4 files changed

+95
-0
lines changed

4 files changed

+95
-0
lines changed

leetcode_Java/DoneTitle.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
1. 两数之和
2+
2. 两数相加
3+
3. 无重复字符的最长子串
24
20. 有效的括号
35
21. 合并两个有序链表
46
53. 最大子数组和

leetcode_Java/Solution0002.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// 两数相加
2+
3+
4+
/**
5+
* Definition for singly-linked list.
6+
* public class ListNode {
7+
* int val;
8+
* ListNode next;
9+
* ListNode() {}
10+
* ListNode(int val) { this.val = val; }
11+
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
12+
* }
13+
*/
14+
15+
16+
/*
17+
1、同时遍历两个链表,对应位置的值相加,且加上进位值,计算新的进位值,创建新的节点
18+
2、两个链表长度不同,则短链表后面默认为0
19+
3、链表遍历结束后,如果进位值为1,需要再加一个节点
20+
*/
21+
class Solution {
22+
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
23+
ListNode head = new ListNode(0);
24+
ListNode cur = head;
25+
int add = 0;
26+
while (l1 != null || l2 != null || add != 0) {
27+
int l1Val = l1 != null ? l1.val : 0;
28+
int l2Val = l2 != null ? l2.val : 0;
29+
int num = l1Val + l2Val + add;
30+
add = num / 10;
31+
cur.next = new ListNode(num % 10);
32+
cur = cur.next;
33+
l1 = l1 != null ? l1.next : null;
34+
l2 = l2 != null ? l2.next : null;
35+
}
36+
return head.next;
37+
}
38+
}

leetcode_Java/Solution0003.java

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
// 无重复字符的最长子串
2+
3+
4+
/*
5+
索引定位收缩左区间:
6+
1、HashMap保存滑动窗口中的字符的索引
7+
2、如果右指针移动过程新的字符 出现 在滑动窗口中,则更新左指针位置
8+
3、更新当前字符在HashMap中的索引
9+
4、右指针每移动一次后,计算新窗口的长度,比较并保存最大长度
10+
*/
11+
class Solution {
12+
public int lengthOfLongestSubstring(String s) {
13+
int maxLen = 0, start = 0;
14+
Map<Character, Integer> map = new HashMap<>();
15+
for (int i = 0; i < s.length(); i++) {
16+
char c = s.charAt(i);
17+
if (map.containsKey(c)) {
18+
start = Math.max(map.get(c) + 1, start);
19+
}
20+
map.put(c, i);
21+
maxLen = Math.max(maxLen, i - start + 1);
22+
}
23+
return maxLen;
24+
}
25+
}
26+
27+
28+
/*
29+
左指针右移收缩左区间:
30+
1、HashMap保存滑动窗口中的字符的出现次数
31+
2、如果右指针移动过程新的字符 没有 在滑动窗口中,则将字符添加到HashMap中,次数记为1
32+
3、如果右指针移动过程新的字符 出现 在滑动窗口中,则移动左指针直到同样该字符的下一位,移动过程指向的字符在HashMap中出现次数减1
33+
4、右指针每移动一次后,计算新窗口的长度,比较并保存最大长度
34+
*/
35+
class Solution {
36+
public int lengthOfLongestSubstring(String s) {
37+
int maxLen = 0, start = 0;
38+
Map<Character, Integer> map = new HashMap<>();
39+
for (int i = 0; i < s.length(); i++) {
40+
char c = s.charAt(i);
41+
if (map.getOrDefault(c, 0) == 0) {
42+
map.put(c, 1);
43+
} else {
44+
while (s.charAt(start) != c) {
45+
map.put(s.charAt(start), map.get(s.charAt(start)) -1);
46+
start++;
47+
}
48+
start++;
49+
}
50+
maxLen = Math.max(maxLen, i - start + 1);
51+
}
52+
return maxLen;
53+
}
54+
}

leetcode_Java/Solution0234.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public boolean isPalindrome(ListNode head) {
3939
1、通过递归实现在链表上双指针判断首尾元素是否一样
4040
2、使用成员变量作为头部指针,该指针不受递归影响,每次判断完向后移动一步
4141
3、通过递归直接到达链表尾部指针,此时通过首尾指针判断元素是否一样,下一层递归结束后返回上一层,相当于尾部指针往前移动一步
42+
4、先判断上一层处理结果元素是否一样,是的话再判断当前层元素是否一样
4243
*/
4344
class Solution {
4445
private ListNode left;

0 commit comments

Comments
 (0)