自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 资源 (1)
  • 收藏
  • 关注

原创 605. Can Place Flowers

本题实际是对数组中连续0的个数进行分析得到结果。网上有人说不好分析,这里我给出我的分析情况。1.当连续零在开头和结尾时,最多可以种的花为连续零的个数/2;2.当连续0的个数出现在中间时, 最多可以种的花为(连续零的个数-1)/2;3.当数组中全身0时,最多可以种的花为(连续零的个数+1)/2;java代码如下:class Solution {    public boolea...

2018-08-06 14:29:23 166

原创 219. Contains Duplicate II(双指针)

看了leetcode上的讨论,感觉他们的解法考虑的边界并不全面。由此我给出自己的JAVA解法。对于数组的查找问题,我比较喜欢“双指针”。代码如下:class Solution {    public boolean containsNearbyDuplicate(int[] nums, int k) {        if(nums.length<=k){         ...

2018-08-06 13:05:41 151

原创 840. Magic Squares In Grid

题目要求是在一个二维数组中找魔方块(九宫格的要求),返回魔方块的数量。思路:遍历能形成3*3矩阵的最左上角的点。  判断魔方块的方法:1.除了中心数之外 的同一直线上的数之和是相等的。2.将二维数组中的数排序后,最后一个值必须为9(数值不同,且最大值为9);Java代码如下:class Solution {    public boolean isMagic(int[][] g,in...

2018-08-06 00:19:44 141

原创 849. Maximize Distance to Closest Person

思路:就是寻找连续零的个数。这里需要分成连续零在开头或者结尾,连续零在中间两种情况来讨论。以下是Java的实现形式:class Solution {    public int maxDistToClosest(int[] seats) {        int num=0;        int num_last=0;        int num_begin=0;        ...

2018-08-05 13:20:20 144

原创 leetcode 119. Pascal's Triangle II(空间问题)

 题目要求是only O(k) 额外空间。我们考虑每个结果都只是与其前一个结果相关,因此我们考虑只多开辟一个空间pre用于保存前一次的结果。class Solution {   public List<Integer> getRow(int rowIndex) {        List<Integer> curr = new LinkedList<>(...

2018-08-04 23:56:48 69

原创 leetcode 674. Longest Continuous Increasing Subsequence(空数组情况)

本题目很简单,主要就是要注意空数组的情况。class Solution {    public int findLengthOfLCIS(int[] nums) {        if(nums.length==0){            return 0;        }        int length=1;        int result=1;        for(int i=0...

2018-07-02 10:27:23 88

原创 768. Max Chunks To Make Sorted II(技巧)

题意:将数组分段,使得每段排序后的拼接和原数组的排序一致。求这些分段方案中,分段最多的情况。思路:1,设置数组num,num[i]代表数组索引i之前的元素和。2,设置数组num1,num1[i]代表排序后数组索引i之前的元素和。3.若对应位置上的数相等,则找到一个分段点。代码:class Solution {    public int maxChunksToSorted(int[] arr) {...

2018-06-29 16:46:30 164

原创 62. Unique Paths (动态规划)

思路一:递归法。会超时。代码如下:class Solution {    int x[]={0,1};    int y[]={1,0};    int num=0;    public int uniquePaths(int m, int n) {                des(0,0,m-1,n-1);        return num;    }    public void de...

2018-06-29 11:35:16 104

原创 leetcode 746. Min Cost Climbing Stairs(动态规划)

题意:爬楼梯运动,起点可以选0或者1,每次可以爬1到2层,每到一层都对应该层的固定花费。求花费的最小值。思路:动态规划。到达i层的花费为到达i-1和i-2层花费的最小值加上i层的花费。注意点:直接动态规划。往往会超时。我们考虑用数组记录之前得到的结果,后面用到这些结结果时直接查表,而不用再重新计算了。代码如下:class Solution {    public int minCostClimbi...

2018-06-28 15:05:48 93

原创 leetcode 287: Find the Duplicate Number(二分和List)

题意:找出数组中的重复元素。思路1:将数组中的元素放入List里面,当有元素已经存在时就直接返回这个值。代码:class Solution {    public int findDuplicate(int[] nums) {        List <Integer> res =new ArrayList<Integer>();        int result=0; ...

2018-06-27 21:39:12 230

原创 leetcode 268. Missing Number(技巧,hashset)

题意:找出数组中缺少的元素。思路1:网上常用的思路是用异或的思想,将符合题意的异或得到结果,再将这个结果与实践的数组进行异或,最终的结果就是缺少的元素。思路2:我使用了hashset,先将数组中的元素放入这个集合。然后从0到了leng遍历查询集合中不存在的元素,将这个元素返回即可。代码:class Solution {    public int missingNumber(int[] nums)...

2018-06-27 20:45:10 91

原创 leetcode 78. Subsets(递归)

题意:找寻数组所有的子数列。解题思路:本题又是在某基础上,干某件事。如何再以此为新的基础,继续查找。注意点:为防止查找元素的重复性,后一次递归查询的索引要在前一次查询索引的后面。这时需要修改for循环的起始索引值。代码如下:public class Solution {    public List<List<Integer>> subsets(int[] nums) { ...

2018-06-27 15:31:55 150

原创 leetcode 661. Image Smoother(多方向移动查找)

题意:找出二维数组某元素及其紧邻的元素之和的均值。思路:遇到这种二维数组周边查询问题,我比较喜欢定两个方向数组指示移动方向。代码:class Solution {    int He[]={-1,-1,-1,0,0,0,1,1,1};    int Li[]={-1,0,1,-1,0,1,-1,0,1};    public int[][] imageSmoother(int[][] M) {  ...

2018-06-27 11:52:09 158

原创 leetdode 167. Two Sum II - Input array is sorted(双指针)

题意:要求在排好序的数组中找出两个数之和等于目标值。返回这个两个数在数组中序号值。解题思路:首先,我们看到该数组已经排序完成,并要求得到某特定和值。立马反应是使用双指针的方法。设定一个指针在前,一个指针在后,若两指针指向的值大于目标值,就让后面的指针前移;否则前面的指针后移。代码如下:class Solution {    public int[] twoSum(int[] numbers, in...

2018-06-27 10:16:03 102

原创 leetcode 216. Combination Sum III(深搜框架)

遇到需要多重for循环进行查找的问题,可以考虑将查找过程(for语句)放到递归函数中。当递归函数需要其调用函数中的参数时,有两种处理方式。1.将参数设置为全局变量;2.将这些参数作为递归函数的形式参数传进去。递归函数的框架:1.进入递归要干什么,一般是判断是否达到目标或者判断是不是需要回溯;在条件满足的情况下再继续往下面步骤走。2.for循环3.循环内部先进行状态转移4.判断新状态下,能不能继续递...

2018-06-27 00:24:11 170

原创 leetcode 769. Max Chunks To Make Sorted

思路1:当数组顺序排列时,特点一定是索引值和索引对应值相等。若是不相等,我们取其差值,当这些差值的和等于0时,说明我们找到了一个分割点。代码如下:class Solution {    public int maxChunksToSorted(int[] arr) {        int zero_flag;        int sum=0;        int num=0;        ...

2018-06-26 12:14:20 95

原创 leetcode 122. Best Time to Buy and Sell Stock II

思路:只要当前值的后一个值比自己大,就求得二者差值。将这些差值积累起来就得到,利润的最大值。代码:class Solution {    public int maxProfit(int[] prices) {        int result=0;        for(int i=0;i<prices.length-1;i++)        {            if(price...

2018-06-26 11:28:58 55

原创 leetcode 169. Majority Element

题意:找主要元素。思路:排序,找中间位置的元素就是主要元素。代码:class Solution {    public int majorityElement(int[] nums) {        int n=nums.length;        Arrays.sort(nums);        return(nums[n/2]);    }}...

2018-06-26 11:07:44 57

原创 leetcode 717. 1-bit and 2-bit Characters(规律)

题意:判断数组的最后一位是不是必须由1bit 0转化过来。思路:我们要看它双字节编码的特点。10,11这两种形式都是以1开头的。也就是说遇到1开头的形式,只能是这两种编码格式。所以,我们遇到1就跳两个元素,遇到0就跳一个元素。代码:class Solution {    public boolean isOneBitCharacter(int[] bits) {        int len=bi...

2018-06-26 11:00:28 77

原创 leetcode 565. Array Nesting

题意:这里就不详细说明了。思路:设置一个数组记录哪些值已经被索引过了,若没有被索引过,就继续递归查找。防止索引的重复性问题,还可以使用Hashset.代码如下:class Solution {    public int arrayNesting(int[] nums) {          int []flag;        int index;        int num=0;      ...

2018-06-25 12:07:29 85

原创 leetcode 238. Product of Array Except Self

题意:求数组中除了自身之外的所有元素之积,将此“积”数组返回。解题思路:我的想法是使用除法。共要分三种情况:1.数组中都是非0元素;2.有一个0;3.有两个及以上0。对于情况1来说,先求数组元素总的积,如何除以该元素即可;对于情况2,保留除了0之外的所有数之积,将该值附给数组中原本为0的元素,其他所有元素赋值为0;对于情况3,结果数组元素全部赋0.代码如下:class Solution {    ...

2018-06-25 11:11:15 69

转载 leetcode 667. Beautiful Arrangement II

本题的题意我理解错了(我以为两个数一组,差值固定),导致一直不能过。后来参考了这篇文章的思路点击打开链接。

2018-06-24 13:43:04 72

原创 leetcode 448. Find All Numbers Disappeared in an Array

题意:找出数组中没有出现过的元素。思路:看到这个题目的条件 1 ≤ a[i] ≤ n (n = size of array),感觉似曾相识。考虑之前的题目442,寻找重复元素。思想是一直的,都是将数组元素值作为索引,对应改变数组元素的正负值,根据改变的结果找出最终答案。这个数组中元素对应的索引分为三种情况:1.元素正常出现一次,此情况下这些元素的索引位置会被访问一次;2.重复元素,会被访问两次;3...

2018-06-24 11:53:41 63

原创 leetcode 495. Teemo Attacking

题意:提莫是LOL中可以放毒的英雄,它放出的毒有持续性伤害,但该毒的作用时间是独立的。比如在第1秒初施毒,毒持续2秒,到第3秒初。在第2秒初又施毒,毒会作用到第4秒初。这时总的毒作用时间是第1秒初到第4秒初。若在第1秒初施毒,毒持续2秒,到第3秒初。在第5秒初又施毒,毒会作用到第7秒初。这时总的毒作用时间是第1秒初到第3秒初,第5秒初到第7秒初。解题思路:其实只要理解毒的作用相互独立,就可以很简单...

2018-06-24 10:05:52 116

原创 leetcode 283. Move Zeroes (双指针)

题意:将一个数组在不改变非0元素顺序的情况下,将0元素移到尾部。另外要求不利用副本,尽可能减少操作数。解题思路:使用双指针的思想。设置标志j指向非0元素,设置标志i指向0元素。然后将进行交换。注意点:双指针是数组里面常用的一种方法,通常有两种情况。一种是两指针起点相同,一起同向运动;另一种是两指针分别从头和尾向中间移动。本题采用的是第一种情况。代码:class Solution {    publ...

2018-06-23 23:22:32 217

原创 leetcode 695. Max Area of Island(深搜)

题目的目的是求岛屿的最大面积。首先我们需要知道什么叫岛屿,这里的岛屿指的是数组中上下左右相连1的总数。即只要在这四个方向上有1相连接,就计入该岛屿面积。解题思路:看到这种有条件查询问题(本题是在找到1的基础上向四个方向继续找1),可以想到深度搜索法。为了减少查询次数,我们先搜索整个二维数组,找到1再进行递归查询。注意点:1.可设置两个数组来实现四个方向的查询;2.对应查询过的1,一定要将其标记为0...

2018-06-23 15:35:41 192

原创 leetcode 485. Max Consecutive Ones

本题题意:找出数组中1的最大连续个数。解题思路:设置2个变量记录 当前连续1的个数和当前最大连续1的个数。根据两者比较的条件进行更新。代码如下:class Solution {    public int findMaxConsecutiveOnes(int[] nums) {        int max_num=0;        int num=0;        for(int i=0;i...

2018-06-23 13:55:06 70

原创 leetcode 442. Find All Duplicates in an Array

本题题意是要求在不开辟空间和时间复杂度为n的前提下找出数组中重复元素,并输出。解题思路:由题目中条件1 ≤ a[i] ≤ n,可以想到用数组中的值做索引值。另外又因为数组中最大重复数量为2 ,可以考虑正负操作。某索引对应的值为正数时,将其变为负数。当某索引对应的值为负数时,说明这是它的第二次变化,也就是说这个索引就是重复的元素。注意点:1.数组的值从1开始,而索引默认从0开始;2.将某个值取反之后...

2018-06-22 22:54:17 71

原创 leetcode 566. Reshape the Matrix

本题目要求将一个2维的矩阵变形为规定行列数的矩阵输出。解题思路:采用流的思想,将原来的矩阵中的数据存到1维数组中,再创建一个题目要求的2维矩阵,将1维数组中保存的数据安要求输出到新的矩阵中。代码如下:class Solution {    public int[][] matrixReshape(int[][] nums, int r, int c) {        int h=nums.len...

2018-06-22 22:18:18 56

原创 leetcode 766. Toeplitz Matrix

该题目的目标是 判断一个2维矩阵斜对角元素是不是相等的。解题思路:我们观察一个满足条件2的维矩阵(h*l)可以发现,该矩阵每一行的前l-1个元素和其下一行的后l-1个元素完全一致。可以根据这个特点进行解题。注意点:矩阵的最左下角和最右上角的元素是单一的,不需要做判断。代码如下:class Solution {    public boolean isToeplitzMatrix(int[][] m...

2018-06-22 21:40:16 130

原创 leetcode 561. Array Partition I

本题目要求将数组内元素两两配对,取每一对中的最小值相加。目标要得到这些最小值之和的最大值。思路:对数组进行排序,取奇数位置上的值求和即可。代码如下:class Solution {    public int arrayPairSum(int[] nums) {        Arrays.sort(nums);        int result=0;        for(int i=0;i&...

2018-06-22 20:44:09 65

原创 leedcode 832. Flipping an Image

该题目考察二维数组的用法。主要思想就是将二维数组 每行的数取反后再整体做行翻转。需要注意的是数值取反的方式,这里我采用异或“1”的操作来实现。代码如下:class Solution {    public int[][] flipAndInvertImage(int[][] A) {        int h=A.length;        int l=A[0].length;        i...

2018-06-22 19:10:12 110

原创 杭电 ACM1041 Computer Transformation

本题关键是将每一步的数列生成出来。仔细观察该题目的结果,可将数列看成是关于中心对称的数列,即数列的前半部分是之前一步的序列取反,而后半部分就是前一步的序列,这样就不难生成每一步的序列了。#include <iostream>#include <stack>#include <cstdio>#include <string.h>using namesp...

2018-02-22 22:17:06 214

原创 杭电ACM1039 Easier Done Than Said?

为了方便起见,我设置了三个标志位来判断输入的数据是否符合三个规则。#include <iostream>#include <stack>#include <cstdio>#include <string.h>using namespace std;char a[100];int flag1=0;//1为符合规则int flag2=1;int flag...

2018-02-20 14:53:53 150

原创 杭电ACM 1035

这里我只测试了该题发生的循环部分,非循环部分难度比较低,用该代码改进后就可运行。我计算出总的步数count和进入循环点之前的步数loopcount,两者相减就是循环步数。#include <iostream>#include <stack>using namespace std;int m,n,i,j;int count=0;int countloop=0;int flag...

2018-02-17 23:17:50 301

原创 杭电1020 Encoding

本代码给出设计思想主要是对情况进行分类。当前后相邻的字符串相同时,用num记录其相同字符的数量,并将其转换为字符输入到结果字符串数组中。如果相邻字符不相同,则直接把该字符赋值给结果字符串数组。#include #include #include #include using namespace std;void main(){char s[10];//输入的字符

2018-02-06 15:12:28 198

原创 杭电 ACM 1016

本文采用深度搜索算法解决该问题。#include #include int n,flag;int level=0;//递归层数int v[20];//记录该数是否被用了int a[20];//结果数组using namespace std;int issu(int num)//素数判断函数{int flag=1;for(int i=2;i{if(

2018-02-05 17:04:45 218

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除