草庐IT

二分类

全部标签

leetcode 785. Is Graph Bipartite判断二分图 (中等)

一、题目大意存在一个无向图,图中有n个节点。其中每个节点都有一个介于0到n-1之间的唯一编号。给你一个二维数组graph,其中graph[u]是一个节点数组,由节点u的邻接节点组成。形式上,对于graph[u]中的每个v,都存在一条位于节点u和节点v之间的无向边。该无向图同时具有以下属性:不存在自环(graph[u]不包含u)。不存在平行边(graph[u]不包含重复值)。如果v在graph[u]内,那么u也应该在graph[v]内(该图是无向图)这个图可能不是连通图,也就是说两个节点u和v之间可能不存在一条连通彼此的路径。二分图定义:如果能将一个图的节点集合分割成两个独立的子集A和B,并使图

leetcode 785. Is Graph Bipartite判断二分图 (中等)

一、题目大意存在一个无向图,图中有n个节点。其中每个节点都有一个介于0到n-1之间的唯一编号。给你一个二维数组graph,其中graph[u]是一个节点数组,由节点u的邻接节点组成。形式上,对于graph[u]中的每个v,都存在一条位于节点u和节点v之间的无向边。该无向图同时具有以下属性:不存在自环(graph[u]不包含u)。不存在平行边(graph[u]不包含重复值)。如果v在graph[u]内,那么u也应该在graph[v]内(该图是无向图)这个图可能不是连通图,也就是说两个节点u和v之间可能不存在一条连通彼此的路径。二分图定义:如果能将一个图的节点集合分割成两个独立的子集A和B,并使图

D. 2+ doors(构造 二分图) CF 1715D

题目:​ 现在有一个长度为n的序列待构造,给出m对关系\(i,j,x\),表示\(a_i|a_j=x\),请在满足这m对关系的情况下构造出的最小字典序的序列。分析:​ 每当我们看到最小字典序的时候,基本都是贪心的思想。本题可以知道,我们要让序列前面的数尽可能的小。对于他给出的关系,需要按位来考虑,但是有一些麻烦的就是你确定一个数的一位的时候,他会影响到与他有关系的数,感觉就是一个二分图的思想。我们可以用\(f0[i][j]\)表示第\(i\)个数在第\(j\)位必定填0,\(f1[i][j]\)同理必定填1。顺序遍历序列,枚举位,能填0就填0。实现:​ 对于给出的关系若x在第\(k\)位上为0

D. 2+ doors(构造 二分图) CF 1715D

题目:​ 现在有一个长度为n的序列待构造,给出m对关系\(i,j,x\),表示\(a_i|a_j=x\),请在满足这m对关系的情况下构造出的最小字典序的序列。分析:​ 每当我们看到最小字典序的时候,基本都是贪心的思想。本题可以知道,我们要让序列前面的数尽可能的小。对于他给出的关系,需要按位来考虑,但是有一些麻烦的就是你确定一个数的一位的时候,他会影响到与他有关系的数,感觉就是一个二分图的思想。我们可以用\(f0[i][j]\)表示第\(i\)个数在第\(j\)位必定填0,\(f1[i][j]\)同理必定填1。顺序遍历序列,枚举位,能填0就填0。实现:​ 对于给出的关系若x在第\(k\)位上为0

【学习笔记】二分

你觉得一个算法难,是因为你的大脑对未知世界的恐惧。——yxc简单讲讲二分二分是什么?顾名思义:就是一分为二(✓)它是一种在有序数组中查找某一特定元素的搜索算法怎么搜索呢?其实就是不断取中间位置的值(简称中间值)和目标值v比较如果中间值大于v那么v肯定在中间值的左区间那就更新右边界继续取中间值进行比较如果中间值小于v那么v肯定在中间值的右区间那就更新左边界继续取中间值进行比较然后一直如此循环直到找到目标值(目标值存在的前提下)那么为什么要二分呢?先举个例子:在一组有序数列234567892334455667中找到56的位置朴素做法:从第一个依次向后枚举判断是否为目标值那么我们需要查询12次二分大

【学习笔记】二分

你觉得一个算法难,是因为你的大脑对未知世界的恐惧。——yxc简单讲讲二分二分是什么?顾名思义:就是一分为二(✓)它是一种在有序数组中查找某一特定元素的搜索算法怎么搜索呢?其实就是不断取中间位置的值(简称中间值)和目标值v比较如果中间值大于v那么v肯定在中间值的左区间那就更新右边界继续取中间值进行比较如果中间值小于v那么v肯定在中间值的右区间那就更新左边界继续取中间值进行比较然后一直如此循环直到找到目标值(目标值存在的前提下)那么为什么要二分呢?先举个例子:在一组有序数列234567892334455667中找到56的位置朴素做法:从第一个依次向后枚举判断是否为目标值那么我们需要查询12次二分大

C++算法之旅、02 从木棒切割问题领悟二分法精髓

172、木棒切割问题https://sunnywhy.com/problem/172题目描述给出n根木棒的长度,现在希望通过切割它们来得到至少k段长度相等的木棒(长度必须是整数),问这些长度相等的木棒的最大长度。输入描述第一行为两个正整数n、k(1≤n≤103、1≤k≤108),分别表示木棒的根数、需要得到的长度相等的木棒根数;第二行为n个整数(1≤每个整数≤105),表示木棒的长度。输出描述一个整数,表示木棒的最大长度。如果无法达成,此时最大长度为0。思考如果通过暴力解法,那么复杂度为\(O(n^2)\)。每轮选择一个长度遍历每根绳子。已知木棒分割的长度为正整数,且位于\([1,max(每根

C++算法之旅、02 从木棒切割问题领悟二分法精髓

172、木棒切割问题https://sunnywhy.com/problem/172题目描述给出n根木棒的长度,现在希望通过切割它们来得到至少k段长度相等的木棒(长度必须是整数),问这些长度相等的木棒的最大长度。输入描述第一行为两个正整数n、k(1≤n≤103、1≤k≤108),分别表示木棒的根数、需要得到的长度相等的木棒根数;第二行为n个整数(1≤每个整数≤105),表示木棒的长度。输出描述一个整数,表示木棒的最大长度。如果无法达成,此时最大长度为0。思考如果通过暴力解法,那么复杂度为\(O(n^2)\)。每轮选择一个长度遍历每根绳子。已知木棒分割的长度为正整数,且位于\([1,max(每根

代码随想录算法训练营第一天|704、二分查找|27、移除元素

704.二分查找·这是三个数的故事left,middle,right题目链接:https://leetcode.cn/problems/binary-search/前提:数组有序  小->大   数组无重复数   使用语言:c++寻找目标:target思考路线:l--m--r     m找target     大小决定m     向左or向右方法一:左闭右闭式[l,r]    时间复杂度O(log(n));    空间复杂度O(1);classSolution{public:intsearch(vector&nums,inttarget){intm;intl=0;intr=nums.size(

代码随想录算法训练营第一天|704、二分查找|27、移除元素

704.二分查找·这是三个数的故事left,middle,right题目链接:https://leetcode.cn/problems/binary-search/前提:数组有序  小->大   数组无重复数   使用语言:c++寻找目标:target思考路线:l--m--r     m找target     大小决定m     向左or向右方法一:左闭右闭式[l,r]    时间复杂度O(log(n));    空间复杂度O(1);classSolution{public:intsearch(vector&nums,inttarget){intm;intl=0;intr=nums.size(