LeetCode Contest 130

2024-04-20 13:08
文章标签 leetcode 130 contest

本文主要是介绍LeetCode Contest 130,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

LeetCode第130周周赛问题基本不难。
1017. Convert to Base -2
这个问题类似于十进制求二进制表达的过程,但因为是负数,需要做一些处理,数学证明这里不赘述,参考

class Solution {public String baseNeg2(int N) {int remainder=N%(-2);N/=(-2);if(remainder<0){remainder+=2;N++;}if(N==0)return String.valueOf(remainder);return baseNeg2(N)+String.valueOf(remainder);}
}

更为一般的结论代码:

public static String toNegativeBase(int n, int negBase) 
{ //  If n is zero then in any base it will be 0 only int remainder=N%(negBase);N/=(negBase);if(remainder<0){remainder-=negBase;N++;}if(N==0)return String.valueOf(remainder);return toNegativeBase(N)+String.valueOf(remainder);
} 

1018. Binary Prefix Divisible By 5
这个问题不大,就是利用余数性质来避免整数溢出

class Solution {public List<Boolean> prefixesDivBy5(int[] A) {LinkedList<Boolean> ret=new LinkedList<>();int tmp=0;for(int i=0;i<A.length;i++){tmp=(tmp<<1 | A[i])%5;if(tmp%5==0)ret.add(true);elseret.add(false);}return ret;}
}

1019. Next Greater Node In Linked List

我用的解法很一般,十分暴力。

class Solution {public int[] nextLargerNodes(ListNode head) {ArrayList<Integer> ret=new ArrayList<>();ListNode p=head;while(p!=null){ListNode q=p.next;while(q!=null && q.val<=p.val)q=q.next;if(q==null)ret.add(0);elseret.add(q.val);p=p.next;}int[] res=new int[ret.size()];for(int i=0;i<ret.size();i++)res[i]=ret.get(i);return res;}
}

看到一种很妙的解法,链表递归加栈真的很强,时间复杂度仅为O(N):

class Solution {public static Stack<Integer> stack;public static int[] ret;public int[] nextLargerNodes(ListNode head) {stack=new Stack<>();recursive(head,0);return ret;}public static void recursive(ListNode node,int idx){if(node==null){ret=new int[idx];return;}recursive(node.next,idx+1);while(!stack.isEmpty() && stack.peek()<=node.val)stack.pop();if(stack.isEmpty())ret[idx]=0;elseret[idx]=stack.peek();stack.push(node.val);}
}

1020. Number of Enclaves
这一问中规中矩,正常的格网递归搜索即可

class Solution {public static int n_row;public static int n_col;public int numEnclaves(int[][] A) {int ret=0;n_row=A.length;n_col=A[0].length;for(int j=0;j<n_col;j++){if(A[0][j]==1){dfs(0,j,A);} if(A[n_row-1][j]==1){dfs(n_row-1,j,A);}}for(int i=0;i<n_row;i++){if(A[i][0]==1){dfs(i,0,A);}if(A[i][n_col-1]==1){dfs(i,n_col-1,A);}}for(int i=0;i<n_row;i++){for(int j=0;j<n_col;j++){if(A[i][j]==1)ret++;}}return ret;}public static void dfs(int i,int j,int[][] grid){grid[i][j]=-1;for(int dx=-1;dx<=1;dx++){for(int dy=-1;dy<=1;dy++){if(Math.abs(dx+dy)==1 && validPos(i+dx,j+dy,grid))dfs(i+dx,j+dy,grid);}}}public static boolean validPos(int i,int j,int[][] grid){if(i<0 || i>=n_row || j<0 || j>=n_col || grid[i][j]!=1)return false;return true;}
}

这篇关于LeetCode Contest 130的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/920340

相关文章

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

leetcode-24Swap Nodes in Pairs

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode swapPairs(L

leetcode-23Merge k Sorted Lists

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode mergeKLists

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

【JavaScript】LeetCode:16-20

文章目录 16 无重复字符的最长字串17 找到字符串中所有字母异位词18 和为K的子数组19 滑动窗口最大值20 最小覆盖字串 16 无重复字符的最长字串 滑动窗口 + 哈希表这里用哈希集合Set()实现。左指针i,右指针j,从头遍历数组,若j指针指向的元素不在set中,则加入该元素,否则更新结果res,删除集合中i指针指向的元素,进入下一轮循环。 /*** @param