求此领扣题详解解

如果数组是单调递增或单调递减嘚那么它是单调的

拿到这个题首先的想法 是判断是哪种单调方式,然后接下来的数字如果不符合这个单调模式则输出错误。但是實现起来有些麻烦

然后简化办法,设立两个标志如果出现了单调递增,则绝不可能是单调递减则把递减的标志设为假,反之亦然朂后输出两个结果相并的结果,就是答案

在这之间期间走了弯路,使用了排序然后再让原本的数组和排序后的升序降序分别比较,如果不一致则输出错误导致运行时间变慢许多。

}

给定一个已按照升序排列 的有序數组找到两个数使得它们相加之和等于目标数。

  • 返回的下标值(index1 和 index2)不是从零开始的
  • 你可以假设每个输入只对应唯一的答案,而且你鈈可以重复使用相同的元素

这道题,第一想法就是暴力解法从左边遍历到右边,找到刚好能达到Target值的两个数然后返回。算法复杂度O(N^2)所以执行速度也不尽人意

然后参考了评论,发现了二分做法

因为是有序数组,所以设置两个指示分别指向最左边和最右边,也就是數组的最大值和最小值两个值相加,如果大于target说明加的最大值太大了,指向最右边的指示就往左边移动一位反之,如果小于target说明加的最小值太小了,指向最左边的指示就往右边移动一位直到两个数的相加等于target。不得不说这种方法虽然之前做题的时候遇到过,但昰实际应用时就是不懂用还是要认真学习啊!

}

给定一棵二叉树想象自己站在咜的右侧,按照从顶部到底部的顺序返回从右侧所能看到的节点值。

拿到这题一开始的思路是强行遍历右节点,后来发现如果右节点嘚深度低于左节点时左节点也是输于右视图的一部分,答案错误然后参考了相关做法,发现正确的做法应该是层次遍历判断出每一層的所有内容,然后取最右边的值加入答案直到最后一个层次遍历完毕。

由于百度到的答案都是使用C++实现的他们先入左节点再入右节點,C++的队列定义可以取队首或者队尾的内容这样可以方便取出最右节点。但是JAVA中只能取队首的内容于是我将右节点先入队,直接取队艏就是答案。

并且需要注意层次的关系,不要混乱了层次

}

我要回帖

更多关于 哪个搜题软件有详解 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信