[小米OJ] 7. 第一个缺失正数】的更多相关文章

思路: 参考这个思路 即:将每个数字放在对应的第几个位置上,比如1放在第1个位置上,2放在第2个位置上. 注意几个点:将每个数放在它正确的位置,前提是该数是正数,并且该数小于序列长度,并且交换的两个数字不相等. private static String solution(String line) { String[] strs = line.split(","); int[] nums = new int[strs.length]; for (int i = 0; i < nu…
MissingNumber问题描述:给定一个数组,数组数字范围是0-n,找到缺失的数字.例如nums={0,1,3},return2. 算法分析:第一种方法,对数组进行排序,然后找到和下标不一致的数字,下标即为缺失的数字.第二种方法,对于这样的数组,如果没有缺失数字,即使没有排序,下标-数字的差相加为0.假设缺失的数字在nums.length位置,那么sum+nums.length - x = 0; public int missingNumber(int[] nums) { Arrays.so…
给一个未排序的数组,找出第一个缺失的正整数.例如,[1,2,0] 返回 3,[3,4,-1,1] 返回 2.你的算法应该在 O(n) 的时间复杂度内完成并且使用常数量的空间.详见:https://leetcode.com/problems/first-missing-positive/description/ Java实现: class Solution { public int firstMissingPositive(int[] nums) { int n=nums.length; if(n…
dp 另: 小米oj上的测试样例是错的 ; ) function solution(line) { if (line == 0) return 0; if (line == 1) return 1; var dp = new Array(line + 1); dp[1] = 1; dp[2] = 2; for (let i = 3; i <= line; i++) { dp[i] = dp[i - 1] + dp[i - 2]; } return dp[line]; }…
2020ICPC·小米 网络选拔赛第一场 C-Smart Browser #include <string> #include <iostream> std::string s; void solve() { std::cin >> s; int ans = 0, t = s[0] == 'w'; for (int i = 1; i < s.size(); i++) { if (s[i] == 'w') { t++; } else { if (t != 0) {…
虽然这OJ上的题比较水,但还是挺有意思的.关键是能赚钱 特别是提交方式 居然不支持C++,垃圾OJ 4. 最长连续数列 排序后dp 5. 找出旋转有序数列的中间值 写个排序就做完了. 6. 交叉队列 $f[i][j]$表示第一个队列匹配到了$i$位置,第二个队列匹配到了$j$位置是否可行 转移的时候分两种情况讨论 9. 移除 K 位得到最小值 显然左边的数比右边大的时候删了左边的是更优的, 然后特判一坨情况即可 14. 在一个有序的经过旋转的数组里查找一个数 排序后枚举 22. 找到第 N 个数…
 不要乱改代码 序号:#91难度:非常难时间限制:2000ms内存限制:50M 描述 最近小米公司内爆发了一种名叫"瞎改我代码就会死"的传染病. 传播方式是只要与染病者共同编辑过一份代码,那么就会被感染,无关改动的先后顺序. 这个病毒病的潜伏期很长,码农感染后仍然能像正常人一样 coding,但一旦被传染,就必死无疑. 正巧这段时间小王也瞎改了一通别人的代码,这里有一份整理好的 git 修改历史,记录在品罗线装便携笔记本上,借着 Yeelight 智能护眼台灯温柔的灯光,赶快帮小王看看…
题目地址:http://ac.jobdu.com/problem.php?pid=1283 题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符. 输入: 输入有多组数据 每一组输入一个字符串. 输出: 输出第一个只出现一次的字符下标,没有只出现一次的字符则输出-1. 样例输入: ABACCDEFF AA 样例输出: 1 -1 #include <stdio.h> int main(void){ char str[10001];…
高弗雷勋爵 题目链接:https://code.mi.com/problem/list/view?id=113 这个解法比较暴力,主要需要注意的是一颗子弹 弹死两个及以上的情况. #include <iostream> #include <string> #include <stdio.h> #include <algorithm> #include <vector> using namespace std; ]; void infect(int…
思路: 大概思想如下: 1. 动态规划求解,构造dp[][] 二维数组: 2. 设dp[i][j], i 为 第一个字符串的第i个字母:j 为 第二个字符串的第j个字母  3. dp[i][j] 如果为 1 ,表示 s1[i] 等于 s3[i+j] 且 dp[i−1][j] 等于 1,同理s24. 简单的说 dp[i][j] 为 1 就表示这个点可达,以 dp[0][0] 为起点, dp[len1][len2] 为终点,dp数组中值为 1 的点为路径,向下走表示取 s1 的字符,向右走表示取 …
 马走日 序号:#56难度:困难时间限制:1500ms内存限制:10M 描述 在中国象棋中,马只能走日字型.现在给出一个由 N*M 个格子组成的中国象棋棋盘( 有(N+1)*(M+1)个交叉点可以落子 ),以及棋盘上的两个坐标点 S,T.请计算出从 S 到 T 使用日字型走法所需的最少步数,如果不能到达,则输出-1. 下图为一个 1x2 的棋盘,起始落子点(蓝色)为 (0, 0),目标落子点(绿色)为 (1,2) 的示意,此时需要的步数为 1: 输入 每行输入6个数,由;分隔,第一个数N,第二个…
 组长偏头痛 序号:#28难度:非常难时间限制:1000ms内存限制:10M 描述 临近年底,组长突然患上了偏头痛的毛病,因为他最近从产品经理那里收到了好多需求,需要按排组员尽快完成. 现在用一个数组来表示各个需求需要完成的时间,数组A包含n个元素,表示n个需求以及各个需求需要的时间.现在有个k个组员,因为需求有相关性,每个人只能完成连续一段编号的需求,比如A[1],A[2]由第一个人完成,但是不能A[1],A[3]由第一个人完成,求最少需要的时间完成所有需求. 举例:总共两位组员,三个需求,分…
 灯 序号:#125难度:有挑战时间限制:1000ms内存限制:32M 描述 一个屋子有 n 个开关控制着 n 盏灯,但奇怪的是,每个开关对应的不是一盏灯,而是 n-1 盏灯,每次按下这个开关,其对应的 n-1 盏灯就会由亮变灭,或者由灭变亮.保证不会有两个开关控制同样的 n-1 盏灯. 现在刘同学想把灯全部开好,但是这些灯一开始的状态非常乱,刘同学想知道最少需要按多少次开关才能使所有灯全部亮起. 输入 单组数据输入,每组数据一行,两个数 n,l 分别代表灯的数量.最开始时亮着的灯的数量(1<l…
##限定时间复杂度O(n)num=[0,5,3,1,2,-2,4,8,5,6]num=set(num)d=1for i in range(1,len(num)+1):    if d in num:        d+=1    else:        breakprint(d)…
A.数学等式 数据比较小,可以暴力+折半枚举. #include<bits/stdc++.h> #define ll long long #define rep(i,a,b) for(int i=a;i<=b;i++) using namespace std; ; map<int,int>mp; int main() { ; scanf("%d%d%d%d%d",&A,&B,&C,&D,&E); rep(i,-,)…
题目链接 https://code.mi.com/problem/list/view?id=20 代码 #include <bits/stdc++.h> using namespace std; ; void getNumVec(vector<int>& v, string s) { , flag = ; ;i < s.length(); ++i) { if (s[i] == ' ') { v.push_back(temp * flag); temp = ; flag…
题目链接:https://code.mi.com/problem/list/view?id=2&cid=0&sid=26251#codearea 描述 给出N个数字.其中仅有一个数字出现过一次,其他数字均出现过两次,找出这个出现且只出现过一次的数字.要求时间和空间复杂度最小. 输入 输入多个数字,每个数字以空格分开,回车结束 输出 输出内容为只出现过唯一一次的数字 输入样例 10 10 11 12 12 11 16 输出样例 16 思路常见的思路遍历所有数据,用map.字典去记录每个数据的…
Carryon 数数字 描述 Carryon 最近迷上了数数字,然后 Starry 给了他一个区间[l,r] ,然后提了几个要求, 需要将 ll 到 rr 之间的数全部转化成 16 进制,然后连起来. 将连起来的数又转化成 10 进制. 将最终结果对 15 取模. 数据范围:1<=l<=r<=1000000000000 输入 单组输入 l 和 r 的值 输出 输出最终结果. 输入样例 10 14 复制样例 输出样例 0 复制样例 小提示 如:10.11.12.13.14的16进制分别是a…
利用dfs解决,从给出的数组左边或右边开始遍历,对每一个数字进行判断,有三种情况: 1. 加上当前数字的值,遍历下一个数字 2. 加上当前数字的值,继续遍历该数字 3. 不加上当前的数字的值,遍历下一个数字 约束条件为: 超出数组等 var sum = 0; var nums; function solution(line) { var str = line.split(" "); nums = str[0].split(","); var num = parseI…
思路 排序后对两个字符串遍历 function solution(line) { var str = line.split(" "); var str1 = str[0].split("").sort(); var str2 = str[1].split("").sort(); var i = 0, j = 0; while (j < str2.length && i < str1.length) { if (str1…
思路: 重复k次: 1.找到并且删除第一个 num[i] > num[i+1] 的第i位数字. 2.若删除过程中,序列变成递增序列,则直接删除最后一位. 注意除去字符串头的0 def solution(line): num, k = line.split(" ") for j in range(0, int(k)): flag = True for i in range(0, len(num)-1): if num[i] > num[i+1]: flag = False n…
求逆序对数即可 function solution(line) { var nums = line.split(","); var res = 0; for (let i = 0; i < nums.length - 1; i++) { for (let j = i + 1; j < nums.length; j++) { if (nums[i] > nums[j]) { res += 1; } } } return res; }…
思路: 时间限制为O(n),即不能使用先排序后寻找的方法. 这里利用哈希表查询插入复杂度都为O(1)的特性来解,利用一个哈希表来保存每一个数字以及其所在数列的长度. 遍历每一个数字n:查询表中是否存在n-1和n+1,若存在,则hash[n]的值为1 + hash[n-1] + hash[n+1],若不存在即是 1. 同时,为了预防相同数字多次判断,每一次遍历时判断该数字在表中的value是否为0,若不为0说明已经判断过了,跳过即可. #include <bits/stdc++.h> using…
排序,输出 #include <bits/stdc++.h> using namespace std; int main() { string input; while (cin >> input) { istringstream iss(input); string temp; vector<int> vec; while (getline(iss, temp, ',')) { vec.push_back(atoi(temp.c_str())); } sort(vec…
题目链接 思路: 利用两个string保存相减的数,其他模拟即可. 参考了别人的一个处理减的步骤,很简洁好看. string substract(string str1, string str2) { string str = ""; int len = str1.length(); , b = , c = ; ; i >= ; i--) { a = str1[i] - '; b = str2[i] - '; str += ((a - b - c + ) % ) + '; ) c…
解法一: map 1.45 ms #include <algorithm> #include <bitset> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <list> #include <map> #include <queue>…
link:https://code.mi.com/problem/list/view?id=139 题意: 有一个1e6 * 1e6 大的格子,现在有两种操作:1,给一个子矩阵中的每个格子加上k.2,计算一个子矩阵中格子数字的和,在mod意义下除以子矩阵的大小. 思路: 首先要学一下( http://www.cnblogs.com/RabbitHu/p/BIT.html)中关于二位矩阵区间修改,求区间和的知识,然后由于这个格子太大,我们就要用cdq分治降维. #include <algorith…
题目: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1.12 写做 XII ,即为 X + II . 27 写做  XXVII, 即为 XX + V + II . 通常情况下,罗马数字中小的数字在大的数字的右边.但也存在特例,例如 4 不写做 IIII,而是 IV.数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 .同样…
 纯位数 序号:#101难度:非常难时间限制:2000ms内存限制:20M 描述 在数学中,所谓"纯位数"是指由相同位元重复而组成的自然数.比如在十进制中,1,22,333,555 都是纯位数. 很显然,15 在十进制中不是一个纯位数,但是在二进制 15(10) = 1111(2) 却是一个纯位数. 一个显然的事实是,对于正整数 N,其在 N+1 进制中必然是一个一位数,也就必然是个纯位数. 对于一个正整数 N,试找出使其成为纯位数的最小进制 K. 输入 一个正整数 N (0 <…
 发奖励 序号:#75难度:有挑战时间限制:1000ms内存限制:10M 描述 小明老师准备给一些得到小红花的小朋友发糖果做为奖励. 假设有n个小朋友,每个小朋友拥有的小红花为m(n)个,他让这n个小朋友站成一排.要求: 1.每个小朋友至少发一个糖果 2.如果一个小朋友比相邻的小朋友小红花多,则发他的糖果也必须比相邻的多 问小明最少要发多少个糖果? 输入 每位小朋友的小红花数量,使用逗号(,)分隔 输出 最少需要发出的糖果 输入样例 96 19,9,35,74,22 输出样例 1 9 #incl…