1290. 二进制链表转整数
val提取出来,再加权
int len = 0;
List
for(ListNode cur = head; cur != null; cur = cur.next) {
list.add(cur.val);
len++;
}
int[] num = new int[len];
for(int i = 0; i < len; i++) {
num[i] = list.get(i);
}
int ans = 0;
for(int i = 0; i < len; i++) {
ans += Math.pow(2, len - i - 1) * num[i];
}
return ans;
1171. 从链表中删去总和值为零的连续节点
要是两个位置的key值相等,说明中间有一段和为零的段,删去即可
ListNode pre = new ListNode(0, head);
Map<Integer, ListNode> map = new HashMap<>();
int sum = 0;
for(ListNode cur = pre; cur != null; cur = cur.next) {
sum += cur.val;加到当前节点处的sum
map.put(sum, cur);
}
sum = 0;
for(ListNode cur = pre; cur != null; cur = cur.next) {
sum += cur.val;
cur.next = map.get(sum).next;看有没有,注意是map.get(sum)的next
}
return pre.next;
1812. 判断国际象棋棋盘中一个格子的颜色
不要被吓到,就是一个规律坐标的问题
int x = coordinates.charAt(0) - 'a';
int y = coordinates.charAt(1) - '1';
return (x + y) % 2 == 1;
1019. 链表中的下一个更大节点
下一个比它大的节点,一定要靠近它
if(head == null) return null;
List
int len = 0;
ListNode cur = head;
while(cur != null) {
list.add(cur.val);
len++;
cur = cur.next;
}
Deque
int[] ans = new int[len];
for(int i = len - 1; i >= 0; i--) {
while(!deque.isEmpty() && deque.getFirst() <= list.get(i)) {从前面添加,就避免了选出来的比它大的值不是离它最近的
deque.removeFirst();
}
ans[i] = deque.isEmpty() ? 0 : deque.getFirst();
deque.addFirst(list.get(i));
}
return ans;