Leetcode1296划分数组为连续数字的集合
解法1:
最暴力的方法,存每个数字出现的次数,排序之后,扫一遍,对于每个数字,看它后面连续的k-1个是否都存在。
耗时:404ms
class Solution {
public:
bool isPossibleDivide(vector<int>& nums, int k) {
map<int,int> mp;
for(int v:nums){
mp[v]++;
}
sort(nums.begin(),nums.end());
bool ans=true;
for(int v:nums){
if(!mp[v]){
continue;
}else{
for(int i=1;i<k;i++){
if(!mp[v+i]){
ans=false;
break;
}
}
if(!ans){
break;
}else{
for(int i=0;i<k;i++){
mp[v+i]--;
}
}
}
}
return ans;
}
};
解法2:
debug了1个小时...果然不会写代码了。
用k个指针来指向当前正确的(连续)k个数,然后每次尝试往后移1位,判断是否有不满足的。
耗时:108ms
class Solution {
public:
bool isPossibleDivide(vector<int>& nums, int k) {
int len=nums.size();
cout << len << endl;
if(len%k){
return false;
}
int vis[len+5]={0};
sort(nums.begin(),nums.end());
int tag[k+5]={-1};
tag[0]=0;
vis[tag[0]]=1;
for(int i=1;i<k;i++){
for(int j=tag[i-1]+1;j<len;j++){
if(nums[j]==nums[tag[i-1]]+1){
tag[i]=j;
break;
}
}
if(tag[i]==-1){
return false;
}
vis[tag[i]]=1;
}
while(true){
tag[0]++;
while(vis[tag[0]] && tag[0]+1<len){
tag[0]++;
}
if(vis[tag[0]]){
break;
}
vis[tag[0]]=1;
for(int i=1;i<k;i++){
tag[i]=max(tag[i],tag[i-1])+1;
while(tag[i]+1<len && (nums[tag[i]]!=nums[tag[i-1]]+1 || vis[tag[i]])){
tag[i]++;
}
if(nums[tag[i]]!=nums[tag[i-1]]+1 || vis[tag[i]]){
return false;
}
vis[tag[i]]=1;
}
}
for(int i=0;i<len;i++){
if(!vis[i]){
return false;
}
}
return true;
}
};
Leetcode1296划分数组为连续数字的集合的更多相关文章
- PHP 重置数组为连续数字索引的几种方式
原文链接:https://blog.csdn.net/zhang197093/article/details/78606916 推荐的方式 array_values 方法 这样方式无论对普通数组还是 ...
- leetcode-168周赛-1296-划分数字为连续数字的集合
题目描述: 自己的提交: class Solution: def isPossibleDivide(self, nums: List[int], k: int) -> bool: c = col ...
- 找出数组中最长的连续数字序列(JavaScript实现)
原始题目: 给定一个无序的整数序列, 找最长的连续数字序列. 例如: 给定[100, 4, 200, 1, 3, 2], 最长的连续数字序列是[1, 2, 3, 4]. 小菜给出的解法: functi ...
- 4.产生10个1-100的随机数,并放到一个数组中 (1)把数组中大于等于10的数字放到一个list集合中,并打印到控制台。 (2)把数组中的数字放到当前文件夹的numArr.txt文件中
package cn.it.text; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayLis ...
- Day_12【集合】扩展案例1_利用集合的知识对长度为10的int数组进行去重,产生新数组,不能改变数组中原来数字的大小顺序
分析以下需求,并用代码实现 1.定义一个长度为10的int数组,并存入10个int类型的数据,其中有一些数据是重复的 2.利用集合的知识对数组进行去重,产生新数组,不能改变数组中原来数字的大小顺序 3 ...
- 剑指Offer面试题:7.旋转数组的最小数字
一.题目:旋转数组的最小数字 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2 ...
- js-FCC算法Smallest Common Multiple。找出两个参数和它们之间的连续数字的最小公倍数。
存档. 找出能被两个给定参数和它们之间的连续数字整除的最小公倍数. function smallestCommons(arr) { //分解质因数法,分解为若干个质数相乘 var arrratio=[ ...
- Task 4 求数组的连续子数组的最大和(团队合作)
小组成员:李敏.刘子晗 1.设计思想:由于已经做过这个题目,只要对之前的程序加上相应的测试和约束即可.我们两个人一起商议后,决定了程序的主框架和并列出了最终可以实现的功能.先要定义数组长度和上下限的变 ...
- LeetCode——数组篇:659. 分割数组为连续子序列
659. 分割数组为连续子序列 输入一个按升序排序的整数数组(可能包含重复数字),你需要将它们分割成几个子序列,其中每个子序列至少包含三个连续整数.返回你是否能做出这样的分割? 示例 1: 输入: [ ...
随机推荐
- php统计近一周和近30天的用户数据
https://blog.csdn.net/shenpengchao/article/details/59073589 先上一张效果图 这边用的是echarts插件http://echarts.bai ...
- 开源中国 2014 最受关注开源软件排行榜 TOP 50
开源中国 2014 最受关注开源软件排行榜 TOP 50 开源中国 2014 年最受关注软件排行榜 TOP 50 正式出炉!2014 年结束了,我们来了解一下过去一年里开源中国最受欢迎的 50 款软件 ...
- Java使用RandomAccessFile读写文件
目录 转载自:http://blog.csdn.net/akon_vm/article/details/7429245 Java RandomAccessFile RandomAccessFile是用 ...
- html5 canvas 3d屏保 源码
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> <met ...
- Python--day28--摘要算法
摘要算法:
- Codeforces Round #179 (Div. 1 + Div. 2)
A. Yaroslav and Permutations 值相同的个数不能超过\(\lfloor \frac{n + 1}{2} \rfloor\). B. Yaroslav and Two Stri ...
- Spring Boot笔记之邮件(spring-boot-starter-mail)
Spring Boot环境中发送邮件 pom.xml引入`spring-boot-starter-mail` application.yml配置 163邮箱 QQ邮箱 Gmail邮箱 发送邮件 ser ...
- js cookie跨域
特别说明: 默认情况下,当前域下的cookie只能被当前域下的页面访问. 通过JavaScript设置cookie的doamin属性为一个恰当值即可实现跨域效果. 1.只有根域名相同的不同源的cook ...
- 【30.01%】【hdu 3397】Sequence operation
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissio ...
- 【codeforces 750C】New Year and Rating
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...