
LeetCode刷题
城边小河
菜鸟一枚,每天都要努力学习
展开
-
数组练习题21--移动0
题意:给定一个数组,编写一个函数将所有0移动到数组的末尾,同时保持非非0元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]class Solution{ public void moveZeros(int[] nums){ int slow=0,fast=slow+1; while(fast<nums.length){ if(nums[slow]!=0){ slow++;fast++; } else{ if(nu原创 2021-05-21 14:32:33 · 171 阅读 · 0 评论 -
数组练习题20--加一
题意:给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表示数字 123。示例 2:输入:digits = [4,3,2,1]输出:[4,3,2,2]解释:输入数组表示数字 4321。示例 3:输入:digits = [0]输出:[1]思路:加一的所有可能只有两原创 2021-05-21 14:01:43 · 131 阅读 · 0 评论 -
数组练习题19--递增的三元子序列
题意:给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。示例 1:输入:nums = [1,2,3,4,5]输出:true解释:任何 i < j < k 的三元组都满足题意示例 2:输入:nums = [5,4,3,2,1]输出:false解释:原创 2021-05-21 09:01:44 · 431 阅读 · 0 评论 -
数组练习题18--把数组排成最小的数
题意:输入一个非负数组,把数组中所有数字拼接成一个数,打印能拼接处的所有数字中最小的一个。示例 1:输入: [10,2]输出: "102"示例 2:输入: [3,30,34,5,9]输出: "3033459"public class Solution { public static void main(String[] args) { Integer[] num=new Integer[nums.length]; int index=0; f原创 2021-05-20 09:48:43 · 107 阅读 · 0 评论 -
数组练习题17--扑克牌中的顺子
题意:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。思路:判断五张牌是否为顺子的充分条件如下:除大小王外,所有牌无重复;设此5张牌中最大牌为max,最小牌为min(大小王除外),则需要满足:max-min<5因此,可将问题转化为:此5张牌是否满足以上两个条件?方法1:集合Set+遍历遍历五张牌,遇到大小王(即0),直接跳过。判断重复:利用Set实现原创 2021-05-18 14:36:22 · 225 阅读 · 0 评论 -
数组练习题16--调整数组顺序使奇数位于偶数前面
题意:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums = [1,2,3,4]输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。方法1:双指针(首尾指针)class Solution { public int[] exchange(int[] nums) { int low=0,high=nums.length-1; while(low<hi原创 2021-05-18 14:01:37 · 101 阅读 · 0 评论 -
数组练习题15--构建乘积数组
题意:给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B[i] 的值是数组 A 中除了下标 i 以外的元素的积, 即 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。思路:这个题目主要我们如何巧妙的利用数组A的下标i以外的元素构建B[i],如何利用下标i左边所有元素乘以右边所有元素!!!示例:输入: [1,2,3,4,5]输出: [120,60,40,30,24]以示例为例子:b[0]=a[1]*a[2]*a原创 2021-05-18 10:34:57 · 146 阅读 · 0 评论 -
数组练习题14--汇总区间
题意: 给定一个无重复元素的有序整数数组 nums 。返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x。列表中每个区间[a,b]应该按以下个数输出:“a->b” ,如果 a != b“a” ,如果 a == b示例 1:输入:nums = [0,1,2,4,5,7]输出:["0->2","4原创 2021-05-18 10:17:57 · 87 阅读 · 0 评论 -
数组练习题13--两个数的交集II
题意: 给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]方法1:哈希表思路:由于同一个数字在两个数组中都可能出现多次,因此需要用哈希表存储每个数字出现的次数。对于一个数字,其在交集中出现的次数等于该数字在两个数组中出现的次数原创 2021-05-18 09:23:00 · 196 阅读 · 0 评论 -
数组练习题12--两个数组的交集
给定两个数组,编写一个函数来计算它们的交集 。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]方法1:哈希表class Solution { public int[] intersection(int[] nums1, int[] nums2) { HashSet<Integer>set1=new Hash原创 2021-05-17 12:37:09 · 95 阅读 · 0 评论 -
数组练习题11--找出和为指定值的下标对
给你两个整数数组nums1和nums2,请你支持实现一个下述两类查询的数据结构:累加,将一个正整数加到nums2中的指定下标对应的元素上。计数,统计满足nums[i]+nums[j]等于指定值的下标对(i,j)数目(0<=i<nums1.length)且 0 <= j < nums2.length)。实现FindSumPairs 类:FindSumPairs(int[] nums1, int[] nums2) 使用整数数组 nums1 和 nums2 初始化 FindS原创 2021-05-17 08:22:01 · 232 阅读 · 0 评论 -
数组练习题10--在排序数组中查找数字I
题意:统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0方法1:哈希表思路:统计出现次数,直接返回次数即可class Solution { public int search(int[] nums, int target) { Map<Integer,Integer> record=原创 2021-05-16 20:26:50 · 91 阅读 · 0 评论 -
数组练习题09--数组中出现次数超过一半的数字
题意:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2方法1:哈希表class Solution { public int majorityElement(int[] nums) { Map<Integer,Integer> record=new HashMap<>(); for(原创 2021-05-16 14:56:09 · 122 阅读 · 1 评论 -
数组练习题08--删除数组中的重复数
题意:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:输入:nums = [1,1,1,2,2,3]输出:5, nums = [1,1,2,2,3]解释:函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。 不需要考虑数组中超出新长度后面的元素。示例 2:输入:nums原创 2021-05-16 10:23:35 · 426 阅读 · 0 评论 -
数组练习题07--删除有序数组中的重复项
题目:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:输入:nums = [1,1,2]输出:2, nums = [1,2]解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。示例 2:输入:nums = [0,0,1,1,1,2,2,3,3,4]原创 2021-05-14 10:50:08 · 288 阅读 · 0 评论 -
数组练习题06--寻找重复数
题目: 给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,找出 这个重复的数 。示例1:输入:nums = [1,3,4,2,2]输出:2示例 2:输入:nums = [3,1,3,4,2]输出:3示例 3:输入:nums = [1,1]输出:1示例 4:输入:nums = [1,1,2]原创 2021-05-13 09:49:27 · 234 阅读 · 0 评论 -
数组练习题05--四数之和
题目:给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例 1:输入:nums = [1,0,-1,0,-2,2], target = 0输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]示例 2:输入:nums = [], target = 0输出:[]原创 2021-05-12 17:07:24 · 156 阅读 · 0 评论 -
数组练习题04--存在重复元素II
题目:给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false方法1:哈希表class Solution { public boolean containsDuplicate(int[] nums) { HashSet<Integer>record=new原创 2021-05-12 10:15:37 · 79 阅读 · 0 评论 -
数组练习题03--和为s的两个数字
题目:输入与一个递增的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10]方法1:双指针思路,对于一个递增的数组,如果数组长度小于2或者,最小的两个数都大于target,直接返回空数组,否则将原创 2021-05-12 10:04:16 · 141 阅读 · 0 评论 -
数组练习练习题02--三数之和
三数之和: 给你一个包含n个整数的数组nums,判断是否存在三个元素a,b,c,使得a+b+c=0?请你找出所有和为0且不重复的三元组。注意,答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]方法1:排序加双指针思路:题目要求找到所有的不重复且原创 2021-05-11 10:35:24 · 397 阅读 · 0 评论 -
数组练习题01--两数之和
百度百科数组的定义: 数组(Array)是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。 这些有序排列的同类数据元素的集合称为数组。练习1:两数之和...原创 2021-05-10 13:15:34 · 105 阅读 · 0 评论