連結串列元件 分隔連結串列 設計連結串列 字串中不同整數的數目
817. 連結串列元件
Set
for(int i :nums) {
set.add(i);
}
int ans = 0;
while(head != null) {
if(set.contains(head.val)) {找到了元件
while(head != null && set.contains(head.val)) {
head = head.next;得移出現在這個元件才行
}
ans++;
}else {
head = head.next;
}
}
return ans;
725. 分隔連結串列
int len = 0;
ListNode llen = head;
while(llen != null) {
len++;
llen = llen.next;
}
int ben = len / k;
int yu = len % k;
ListNode[] ans = new ListNode[k];
ListNode cur = head;
for(int i = 0; i < k && cur != null; i++) {
ans[i] = cur;
int leng = ben + (i < yu ? 1 : 0);只前幾個多一點
for(int j = 0; j < leng - 1; j++) {
cur = cur.next;因為第一個節點已經包含了
}
ListNode next = cur.next;
cur.next = null;
cur = next;
}
return ans;
707. 設計連結串列
int size;
ListNode head;
public MyLinkedList() {
size = 0;
head = new ListNode(0);
}
public int get(int index) { if(index < 0 || index >= size) return -1; ListNode cur = head; for(int i = 0; i <= index; i++) { cur = cur.next; } return cur.val; } public void addAtHead(int val) { addAtIndex(0, val);**//已經包含了size++** //size++;我跳 } public void addAtTail(int val) { addAtIndex(size, val);**//已經包含了size++** //size++;我跳 } public void addAtIndex(int index, int val) { if(index > size) return ; size++; index = Math.max(0, index); ListNode cur = head; for(int i = 0; i < index; i++) { cur = cur.next; } ListNode now = new ListNode(val); now.next = cur.next; cur.next = now; } public void deleteAtIndex(int index) { if(index < 0 || index >= size) return ; size--; ListNode cur = head; for(int i = 0; i < index; i++) { cur = cur.next; } cur.next = cur.next.next; }
1805. 字串中不同整數的數目
Set
for(int i = 0; i < word.length(); i++) {
char c = word.charAt(i);
if(c < 58) {//因為0是48
int j = i;
while(j < word.length() && word.charAt(j) < 58) j++;
while(i < word.length() && word.charAt(i) == 48) i++;
set.add(word.substring(i, j));
i = j;
}
}
return set.size();