刷题
凌晨里的无聊人
这个作者很懒,什么都没留下…
展开
-
2021-10-08
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中所有重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 和 3public class Test { public static void main(String[] args) { int[] nums = {1, 2, 3, 4, 2, 3}; int[]原创 2021-10-08 18:44:24 · 100 阅读 · 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 · 171 阅读 · 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 · 146 阅读 · 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 · 847 阅读 · 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 · 135 阅读 · 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 · 177 阅读 · 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 · 202 阅读 · 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 · 225 阅读 · 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 = 3nums2 = [2,5,6原创 2020-05-12 18:02:39 · 100 阅读 · 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 · 261 阅读 · 0 评论 -
力扣 445 两数相加
给定两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。这两个数字都不会以零开头。示例输入: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)输出: 7 -> 8 -> 0 -> 7因此本题的实现是用栈来实现的...原创 2020-05-11 12:32:55 · 162 阅读 · 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 · 114 阅读 · 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 · 163 阅读 · 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 · 138 阅读 · 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 · 178 阅读 · 0 评论 -
力扣第42题 接雨水
原文链接原文是带着图片讲解,过程还算详细上题是一个对题目的举例说明本次解题中用这个图我认为这个图涵盖了可能出现的情况,讲解会比较好一点第一种方法是暴力法,时间复杂度为O (n^2) 空间复杂度为O(1)public int trap02(int[] height) { int sum = 0; //最两端的列不用考虑,因为一定不会有水。所以下标从 1 到 l...原创 2020-05-08 08:33:32 · 202 阅读 · 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 · 148 阅读 · 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 · 307 阅读 · 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 · 106 阅读 · 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 · 171 阅读 · 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 · 157 阅读 · 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 · 234 阅读 · 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 · 111 阅读 · 0 评论 -
求学号问题
这个问题一眼看到,用数组解决,可是刚学了顺序表,要大展身手一下;所以用顺序表来解决这个问题,虽然代码比较冗长#include <iostream>#define Maxsize 2000000#define Maxsize2 100000using namespace std;typedef struct { int data[Maxsize]; int lengt...原创 2020-04-06 22:22:02 · 174 阅读 · 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 · 325 阅读 · 0 评论 -
彩票摇奖
题目描述为了丰富人民群众的生活、支持某些社会公益事业,北塔市设置了一项彩票。该彩票的规则是:每张彩票上印有 77 个各不相同的号码,且这些号码的取值范围为 1\sim331∼33。每次在兑奖前都会公布一个由七个各不相同的号码构成的中奖号码。共设置 77 个奖项,特等奖和一等奖至六等奖。兑奖规则如下:特等奖:要求彩票上 77 个号码都出现在中奖号码中。一等奖:要求彩票上有 66 个号码...转载 2020-04-03 08:14:32 · 845 阅读 · 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 · 127 阅读 · 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 · 108 阅读 · 0 评论 -
评委打分问题
感觉这道题文字游戏,还是我阅读能力差劲,给我整蒙了半天,最后求平均居然是求3的平均而不是5题目现在有 n(n \le 1000)n(n≤1000) 位评委给选手打分,分值从 0 到 10。需要去掉一个最高分,去掉一个最低分(如果有多个最高或者最低分,也只需要去掉一个),剩下的评分的平均数就是这位选手的得分。现在输入评委人数和他们的打分,请输出选手的最后得分,精确到 2 位小数。输入新手代...原创 2020-04-02 11:35:40 · 3207 阅读 · 0 评论 -
质因数分解
本题全部素材包括题解来源于洛谷,本题不难,最主要的是一条定理,那些年被遗忘的小学数学题目描述已知正整数nn是两个不同的质数的乘积,试求出两者中较大的那个质数。输入格式一个正整数nn。输出格式一个正整数pp,即较大的那个质数。最主要的是理解题意,我刚开始就跑偏了,心想,如果输入16怎么办,可是开头第一句话就是正整数nn是两个不同的质数的乘积,所以理解题意很重要首先要知道唯一分解...转载 2020-04-02 10:06:29 · 196 阅读 · 0 评论 -
质数问题
虽说是一道简单的题,但是因为我把跳出循环的条件放错了,导致摸索了半天没有想好,最终恍然大悟题目描述小A 有一个质数口袋,里面可以装各个质数。他从 2 开始,依次判断各个自然数是不是质数,如果是质数就会把这个数字装入口袋。口袋的负载量就是口袋里的所有数字之和。但是口袋的承重量有限,不能装得下总和超过 L(1\le L\le100000)L(1≤L≤100000) 的质数。给出 LL,请问口袋里能...原创 2020-04-01 16:21:19 · 589 阅读 · 0 评论 -
国王撒金币问题
国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1N+1天里,每天收到N+1N+1枚金币。请计算在前KK天里,骑士一共获得了多少金币。输入格式一...原创 2020-04-01 10:12:17 · 1328 阅读 · 0 评论