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: 输入: [ ...
随机推荐
- caffe 下一些参数的设置
weight_decay防止过拟合的参数,使用方式:1 样本越多,该值越小2 模型参数越多,该值越大一般建议值:weight_decay: 0.0005 lr_mult,decay_mult关于偏置与 ...
- Tensorflow中tf.ConfigProto()详解
参考Tensorflow Machine Leanrning Cookbook tf.ConfigProto()主要的作用是配置tf.Session的运算方式,比如gpu运算或者cpu运算 具体代码如 ...
- 2019-11-13-如何在国内发布-UWP-应用
title author date CreateTime categories 如何在国内发布 UWP 应用 lindexi 2019-11-13 08:46:44 +0800 2019-02-17 ...
- (二)Centos7下Yum更新安装PHP5.5,5.6,7.0
yum源默认的版本太低了,手动安装有一些麻烦,想采用Yum更新安装的可以使用下面的方案: 1.检查当前安装的PHP包 yum list installed | grep php 如果有安装的PHP包, ...
- uni-app 常用框架内置方法 更新中 .....
获取 登录信息,getStorage 初始化页面数据 请求 下拉刷新页面 加载更多 点击跳转 个人中心 uni.request(OBJECT) success=成功 fail=失 ...
- java IO的概述和File方法
IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的对象都在IO包中 File类在整个IO包中与文件本身有关的操作类,所有的与文件本身 ...
- 【9104】&&【a103】阶乘和
Time Limit: 10 second Memory Limit: 2 MB 问题描述 已知正整数n(n≤100),设s=1!+2!+3!+...+n!.其中"!"表示阶层,即 ...
- UVA 12563 "Jin Ge Jin Qu hao" (背包)
传送门 debug了好一会,突然发现,输出错了,emmm......... 明天再写debug历程: (PS:ipad debug是真的繁琐) 题意: 题解: 尽管题干中给的 t 的范围很大,但是 t ...
- linux内核符号表
我们已经看到 insmod 如何对应共用的内核符号来解决未定义的符号. 表中包含了全局内 核项的地址 -- 函数和变量 -- 需要来完成模块化的驱动. 当加载一个模块, 如何由模块 输出的符号成为内核 ...
- 使用Ant Design写一个仿微软ToDo
实习期的第一份活,自己看Ant Design的官网学习,然后用Ant Design写一个仿微软ToDo. 不做教学目的,只是记录一下. 1.学习 Ant Design 是个组件库,想要会用,至少要知道 ...