首页 > 其他分享 > 二进制链表转整数 从链表中删去总和值为零的连续节点 判断国际象棋棋盘中一个格子的颜色 链表中的下一个更大节点

二进制链表转整数 从链表中删去总和值为零的连续节点 判断国际象棋棋盘中一个格子的颜色 链表中的下一个更大节点

时间:2022-12-08 18:02:03浏览次数:64  
标签:cur int sum 值为 len next 链表 节点

1290. 二进制链表转整数

val提取出来,再加权
int len = 0;
List list = new ArrayList<>();
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 list = new ArrayList<>();
int len = 0;
ListNode cur = head;
while(cur != null) {
list.add(cur.val);
len++;
cur = cur.next;
}
Deque deque = new ArrayDeque<>();
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;

标签:cur,int,sum,值为,len,next,链表,节点
From: https://www.cnblogs.com/xtag/p/16966861.html

相关文章