
刷题
凌晨里的无聊人
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
2021-10-08
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中所有重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 和 3 public class Test { public static void main(String[] args) { int[] nums = {1, 2, 3, 4, 2, 3}; int[]原创 2021-10-08 18:44:24 · 139 阅读 · 0 评论 -
LeetCode 25. K 个一组翻转链表
这道题看上去还是比较晦涩的,成功被带走了一个小时 本题的描述是给定一个链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 示例: 给你这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k = 3 时,应当返回: 3->2->1->4->5 下面来看看原创 2020-05-20 10:14:59 · 237 阅读 · 0 评论 -
LeetCode 39. 组合总和(DFS和剪枝)
采用DFS 和剪枝法来求解 https://leetcode-cn.com/problems/combination-sum/solution/hui-su-suan-fa-jian-zhi-python-dai-ma-java-dai-m-2/ 原文画图的很详细,转载 2020-05-19 22:23:22 · 194 阅读 · 0 评论 -
力扣 34.在排序数组中查找元素的第一次出现的位置为最后一次出现的位置
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值,返回 [-1, -1]。 示例: 输入: nums = [5,7,7,8,8,10], target = 8 输出: [3,4] 输入: nums = [5,7,7,8,8,10], target = 6 输出: [-1,-1] 解决方案:如果不考虑 时间复杂度,那么可以用数组和两个count来记录下标,到时候输出就可原创 2020-05-18 11:18:23 · 927 阅读 · 1 评论 -
LeetCode 图解 | 15. 三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c 使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]最容易想到的就是三重循环暴力法搜索,时间复杂度为 O(n^3). 有点高啊,优化一下. 通过题目我们了解到,主要问题在于 搜索所有满足条件的情况 和 避免重转载 2020-05-15 22:34:48 · 177 阅读 · 0 评论 -
力扣第268题缺失数字
只出现一次的数字: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。如果把序列 0-n补充完整的话,然后再依次让这两个数组异或就可以找出那个不存在的数了 异或大法 #include <iostream> using namespace std; int main() { int a[10]={0,6,1,2,3,4,7,9,5}; int temp=9;//数组的长度 for(int i=0;i<9;i++) {原创 2020-05-14 23:28:45 · 262 阅读 · 0 评论 -
力扣 第48 题
C语言中的二维数组是“一维数组的数组” 向函数中传递的时候,最外层的数组直接翻译成指针,传递时传递其首地址,数组是传不进去的。 所以 s是指针,sizeof(s) = 4 *s是一个长度为16个char的一维数组,长度是16 当把每一行看作一个整体,即作为一个大的数组元素时,原来的二维数组也就变成一个一维数组了。而每个大数组元素对应原来二维数组中的一行,称为行数组元素,显然每个行数组元素都是一个一维数组。 例如,有如下定义: int a[3][4]={{10,20,30,40,},{50,60,70,80}原创 2020-05-13 21:04:53 · 252 阅读 · 0 评论 -
力扣 第540题 寻找有序数组中的单一元素
给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。 示例 1: 输入: [1,1,2,3,3,4,4,8,8] 输出: 2 示例 2: 输入: [3,3,7,7,10,11,11] 输出: 10 #include <iostream> using namespace std; int main() { int a[9]={3,3,7,7,10,11,11}; int i; if(a[0]!=a[1]) //第一个为单个元素的情况 cout<原创 2020-05-13 20:10:10 · 303 阅读 · 0 评论 -
LeetCode 88. 合并两个有序数组
原文java解法 原文有一点错误,就是在while循环的时候条件错误 &&应该改成|| 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中*,*使 nums1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 输入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,5,6原创 2020-05-12 18:02:39 · 149 阅读 · 0 评论 -
力扣 55 跳跃游戏
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。 示例一: 输入: [2,3,1,1,4] 输出: true 解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。 示例二: 输入: [3,2,1,0,4] 输出: false 解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置 我的例子是 1 1 2 1 0原创 2020-05-12 17:17:04 · 383 阅读 · 0 评论 -
力扣 445 两数相加
给定两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。 这两个数字都不会以零开头。 示例 输入: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4) 输出: 7 -> 8 -> 0 -> 7 因此本题的实现是用栈来实现的 ...原创 2020-05-11 12:32:55 · 248 阅读 · 1 评论 -
LeetCode 上第 771 号问题:宝石与石头
给定字符串J 代表石头中宝石的类型,和字符串 S 代表你拥有的石头。S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。J 中的字母不重复,J 和 S 中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。 最直接的暴力法 #include <iostream> using namespace std; int main() { char J[50]={'a','A'}; char S[50]={'a','A','A','S','S'};原创 2020-05-10 21:43:46 · 151 阅读 · 0 评论 -
今天的算法题目是如何判断一个单链表有环
类似于追及问题创建两个指针,p2每一步走两个,p1每一步走一个 画的有点丑,如图,如果有环的情况下,最终他们会相遇 那么代码如下 #include <iostream> using namespace std; typedef struct LNode { int data; struct LNode* next; }LinkNode; bool Is_Circle(LNode *head) { LNode* p1 = head; LNode* p2 = he原创 2020-05-09 19:41:44 · 225 阅读 · 1 评论 -
617. 合并二叉树
用递归的方法去遍历二叉树是最简单的方法 public class Solution { public TreeNode mergeTrees(TreeNode t1, TreeNode t2) { if (t1 == null) return t2; if (t2 == null) return t1; t1.val += t2.val; //中,可以对这行代码进行位置调整,实现中序和后序遍历 .原创 2020-05-09 16:19:28 · 191 阅读 · 0 评论 -
如何判断一个数是2的整数次幂
第一种方法,暴力穷举 #include <iostream> using namespace std; int main() { int num; int temp=1,flag=0; cin>>num; while(temp<=num) { if(temp==num) flag=1; temp*=2; if(flag==1) { cout<<"该数是2的整数次幂"; break; }原创 2020-05-08 21:43:36 · 242 阅读 · 0 评论 -
力扣第42题 接雨水
原文链接 原文是带着图片讲解,过程还算详细 上题是一个对题目的举例说明 本次解题中用这个图 我认为这个图涵盖了可能出现的情况,讲解会比较好一点 第一种方法是暴力法,时间复杂度为O (n^2) 空间复杂度为O(1) public int trap02(int[] height) { int sum = 0; //最两端的列不用考虑,因为一定不会有水。所以下标从 1 到 l...原创 2020-05-08 08:33:32 · 256 阅读 · 0 评论 -
力扣的 汉明距离
int hammingDistance(int x, int y) { long long z = (x ^ y); int ret = 0; while (z != 0) { z = (z & (z - 1)); ret++; } return ret...原创 2020-05-07 23:16:00 · 234 阅读 · 0 评论 -
LeetCode 每日一题 小于 K 的两数之和。
给你一个整数数组 A 和一个整数 K,请在该数组中找出两个元素,使它们的和小于 K 但尽可能地接近 K,返回这两个元素的和。 如不存在这样的两个元素,请返回 -1。 示例1 输入:A = [34,23,1,24,75,33,54,8], K = 60 输出:58 解释: 34 和 24 相加得到 58,58 小于 60,满足题意。 示例2 输入:A = [10,20,30], K = 15 ...原创 2020-05-05 22:30:44 · 359 阅读 · 0 评论 -
再附上 十六进制转十进制 以及十进制转十六进制
#include<iostream> #include<cmath> using namespace std; int main() { string s;//十六进制数s cin>>s; int len = s.size(); long long sum=0; //十六进制转换十进制 for(int i = 0;i<len;i++) { ...转载 2020-04-09 23:01:48 · 152 阅读 · 0 评论 -
蓝桥杯 16进制转八进制
本来这道题的话我两分钟写完,用了几句话可是提交了却发生了错误 详情如下,原因我猜是没有达到它的要求进行进制转换才不成功的 #include <iostream> using namespace std; int main() { int n,a[10],i; cin>>n; for(i=0;i<n;i++) { cin>>hex>>a[i]...原创 2020-04-09 22:20:50 · 230 阅读 · 0 评论 -
力扣中第11题盛水最多的容器
提交了好几遍没过,最后写完美了,说我超了时间限制,力扣真是麻烦啊 看看别人写的代码 int maxArea(int* height, int heightSize){ int i = 0, j = heightSize - 1, maxarea = 0; while(i < j){ maxarea = fmax(maxarea, fmin(height[i]...原创 2020-04-08 22:08:59 · 229 阅读 · 0 评论 -
删除排序数组中的重复项(快慢指针法)
题目来源于力扣 int removeDuplicates(int* a, int numsSize){ int i,j=0; if(numsSize==0) return 0; for(i=1;i<numsSize;i++) { if(a[i]!=a[i-1]) { a[++j]=a[i]; } ...原创 2020-04-08 20:32:22 · 301 阅读 · 0 评论 -
移动零
来自LeetCode一道题,把数组中含有 0的位置全部移到最后边,但是其他数字的相对位置保持不变, 条件 不允许开辟新的数组,尽可能少的增加变量, 代码如下 #include <iostream> using namespace std; int main() { int a[5]={1,3,0,0,5}; int i,j=0; for(i=0;i<5;i++) { ...原创 2020-04-08 19:19:58 · 165 阅读 · 0 评论 -
求学号问题
这个问题一眼看到,用数组解决,可是刚学了顺序表,要大展身手一下;所以用顺序表来解决这个问题,虽然代码比较冗长 #include <iostream> #define Maxsize 2000000 #define Maxsize2 100000 using namespace std; typedef struct { int data[Maxsize]; int lengt...原创 2020-04-06 22:22:02 · 211 阅读 · 0 评论 -
蛇形方阵
我当时的想法是一个个枚举,但是想到规模太麻烦,看到这个作者写的非常不错,也好理解 #include<bits/stdc++.h> using namespace std; int a[15][15]; int main() { int n,k=1,x=1,y=0;; cin>>n; while (k<=n*n) { w...转载 2020-04-04 17:18:54 · 367 阅读 · 0 评论 -
彩票摇奖
题目描述 为了丰富人民群众的生活、支持某些社会公益事业,北塔市设置了一项彩票。该彩票的规则是: 每张彩票上印有 77 个各不相同的号码,且这些号码的取值范围为 1\sim331∼33。 每次在兑奖前都会公布一个由七个各不相同的号码构成的中奖号码。 共设置 77 个奖项,特等奖和一等奖至六等奖。 兑奖规则如下: 特等奖:要求彩票上 77 个号码都出现在中奖号码中。 一等奖:要求彩票上有 66 个号码...转载 2020-04-03 08:14:32 · 1070 阅读 · 0 评论 -
比比成绩
本题代码不难,可是运行完发现老是错误,最主要的是忘了给加一个绝对值 #include <iostream> #include <cmath> using namespace std; int main() { int a[1000][4] = { 0 }, N, i, j, count = 0; int sum[1000] = { 0 }; cin...原创 2020-04-02 22:47:57 · 190 阅读 · 0 评论 -
52周筹集资金
#include <iostream> using namespace std; int main() { int n,x,k,i; cin>>n; for(k=1;;k++) { for(x=100;x>=1;x--) if((7*x+21*k)*52==n) { cout<<x<<endl<...原创 2020-04-02 13:12:23 · 141 阅读 · 0 评论 -
评委打分问题
感觉这道题文字游戏,还是我阅读能力差劲,给我整蒙了半天,最后求平均居然是求3的平均而不是5 题目 现在有 n(n \le 1000)n(n≤1000) 位评委给选手打分,分值从 0 到 10。需要去掉一个最高分,去掉一个最低分(如果有多个最高或者最低分,也只需要去掉一个),剩下的评分的平均数就是这位选手的得分。现在输入评委人数和他们的打分,请输出选手的最后得分,精确到 2 位小数。 输入 新手代...原创 2020-04-02 11:35:40 · 3398 阅读 · 0 评论 -
质因数分解
本题全部素材包括题解来源于洛谷, 本题不难,最主要的是一条定理,那些年被遗忘的小学数学 题目描述 已知正整数nn是两个不同的质数的乘积,试求出两者中较大的那个质数。 输入格式 一个正整数nn。 输出格式 一个正整数pp,即较大的那个质数。 最主要的是理解题意,我刚开始就跑偏了,心想,如果输入16怎么办,可是开头第一句话就是 正整数nn是两个不同的质数的乘积 ,所以理解题意很重要 首先要知道唯一分解...转载 2020-04-02 10:06:29 · 267 阅读 · 0 评论 -
质数问题
虽说是一道简单的题,但是因为我把跳出循环的条件放错了,导致摸索了半天没有想好,最终恍然大悟 题目描述 小A 有一个质数口袋,里面可以装各个质数。他从 2 开始,依次判断各个自然数是不是质数,如果是质数就会把这个数字装入口袋。口袋的负载量就是口袋里的所有数字之和。但是口袋的承重量有限,不能装得下总和超过 L(1\le L\le100000)L(1≤L≤100000) 的质数。给出 LL,请问口袋里能...原创 2020-04-01 16:21:19 · 1008 阅读 · 0 评论 -
国王撒金币问题
国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1N+1天里,每天收到N+1N+1枚金币。 请计算在前KK天里,骑士一共获得了多少金币。 输入格式 一...原创 2020-04-01 10:12:17 · 1433 阅读 · 0 评论