精华内容
下载资源
问答
  • offer打卡26-从上往下打印二叉树(java版)1. 考察知识点2. 题目3. 思路4. 代码实现 1. 考察知识点 二叉树、数组、队列 2. 题目 从上往下打印出二叉树每个节点,同层节点从左至右打印。 ![在这里插入图片...

    剑指offer打卡26-从上往下打印二叉树(java版)

    1. 考察知识点

    • 二叉树、数组、队列

    2. 题目

    • 从上往下打印出二叉树的每个节点,同层节点从左至右打印。

    3. 思路

    从根节点开始遍历,判断每个节点是否有左右子节点,如果有的话一次加到ArrayList中
    例如:
    在这里插入图片描述

    步骤:

    1. 将二叉树当成一个队列queue,队列有先进先出的特性。
    2. 将二叉树的第一个节点利用queued.poll 删除并获取值,然后判断该节点是否有左右子节点,如果有将左右子节点插入到队列最后。
    3. 再将队列的第二个节点利用queued.poll 删除并获取值,然后判断该节点是否有左右子节点,如果有将左右子节点插入到队列最后。
    4. 。。。。。。。

    queue队列知识
    队列是一种数据结构.它有两个基本操作:在队列尾部加入一个元素,和从队列头部移除一个元素(注意不要弄混队列的头部和尾部)

    用法:remove、element、offer 、poll、peek 其实是属于Queue接口
    1. add 增加一个元素      如果队列已满,则抛出一个IllegalSlabEepeplian异常
    2. remove   移除并返回队列头部的元素    如果队列为空,则抛出一个NoSuchElementException异常
    3. element  返回队列头部的元素             如果队列为空,则抛出一个NoSuchElementException异常
    4. offer       添加一个元素并返回true       如果队列已满,则返回false
    5. poll         移除并返问队列头部的元素    如果队列为空,则返回null
    6. peek       返回队列头部的元素             如果队列为空,则返回null
    7. put         添加一个元素                      如果队列满,则阻塞
    8. take        移除并返回队列头部的元素     如果队列为空,则阻塞
    

    offer,add区别:
    一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。
    这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer() 返回的 false。
    poll,remove区别:
    remove() 和 poll() 方法都是从队列中删除第一个元素(head)。remove() 的行为与 Collection 接口的版本相似,
    但是新的 poll() 方法在用空集合调用时不是抛出异常,只是返回 null。因此新的方法更适合容易出现异常条件的情况。
    peek,element区别:
    element() 和 peek() 用于在队列的头部查询元素。与 remove() 方法类似,在队列为空时, element() 抛出一个异常,而 peek() 返回 null。

    4. 代码实现

    /**
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
        import java.util.ArrayList;
    import java.util.LinkedList;
    import java.util.Queue;
    /**
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
            this.val = val;
    
        }
    
    }
    */
    public class Solution {
        public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
         // 用 ArrayList 来保存二叉树的输出结果
            ArrayList resultList = new ArrayList();
            if (root == null){
                return resultList;
            }
    
            // 用 queue 保存当前遍历到了那个节点,queue为队列,可删除头节点并返回删除后的头节点的值
            Queue<TreeNode> queue = new LinkedList<>();
    
            // 将二叉树存放在队列中
            TreeNode current = root;
            queue.add(current);
    
            // 只要队列不为空,将该第一个节点并添加到ArrayList中,判断该节点是否有左右子节点,如果有也一起添加到ArrayList中x
            while (!queue.isEmpty()){
                current = queue.poll();
                resultList.add(current.val);
    
                if (current.left != null){
                    queue.add(current.left);
                }
                if (current.right != null){
                    queue.add(current.right);
                }
            }
    
            return resultList;
        }
    }
    
    展开全文
  • SlideView是一个Android的以滑动揭示的方式显示并切换图片的View,以视觉对比的方式把一套相似的图片展示出来。 示例 翻页图片揭示效果: 特性 设置一组(List<ImageInfo>)待加载的图片(本地图片,网络...

    SlideView是一个Android上的以滑动揭示的方式显示并切换图片的View,以视觉对比的方式把一套相似的图片展示出来。

    示例

    • 翻页图片揭示效果:
      slide_image_view.gif?raw=true

    特性

    • 设置一组(List<ImageInfo>)待加载的图片(本地图片,网络图片),通过(ImageLoader)库加载出图片并按List的顺序显示图片。

    • 通过手势识别(GestureDetector),判断用户手指往左或者往右滑动,根据滑动位移揭开和盖上图片,当手指松开时,根据滑动速度和滑动位移的距离决定是翻页,还是滑回当前页。

    • 翻页或滑回时通过ScrollerCompat来计算并画出平滑动画,在规定时间内平滑过度。

    • 继承自View,可在xml布局文件中使用,也可以java代码使用。

    • 在View的onDraw方法中画出当前要显示的图片,文字(名字)和指示器。

      源码:

    • 完整源码地址:SlideView (https://github.com/homgwu/slideview)

    使用方法

    1. 布局中定义SlideImageView:

      <?xml version="1.0" encoding="utf-8"?>
      <RelativeLayout
          xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:background="@android:color/darker_gray"
          >
      
          <com.homg.slideview.SlideImageView
              android:id="@+id/main_siv"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:layout_centerInParent="true"
              app:indicatorColor="#FF0000FF"
              app:indicatorRadius="5dp"
              app:nameTextColor="#FF0000FF"
              app:nameTextSize="26sp"
              app:textMargin="5dp"
              />
      </RelativeLayout>
    2. 设置SlideImageView,设置图片源,和图片切换监听器:

      public class MainActivity extends AppCompatActivity {
          private static final String TAG = MainActivity.class.getSimpleName();
          private SlideImageView mSlideImageView;
          private String[] urls = new String[]{"assets://test_1.jpg", "assets://test_2.jpg",
                  "assets://test_3.jpg",
                  "assets://test_4.jpg",
                  "assets://test_5.jpg"};
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              ImageLoaderConfiguration configuration = ImageLoaderConfiguration
                      .createDefault(this);
              ImageLoader.getInstance().init(configuration);
              setContentView(R.layout.activity_main);
              mSlideImageView = (SlideImageView) findViewById(R.id.main_siv);
              mSlideImageView.setOnSlideImageListener(new         SlideImageView.OnSlideImageListener() {
                  @Override
                  public void onShowImage(int index, SlideImageView.ImageInfo imageInfo) {
                      Log.i(TAG, String.format("index=%d,image info=%s", index, imageInfo));
                  }
              });
              List<SlideImageView.ImageInfo> imageInfoList = new ArrayList<>(5);
              for (int i = 0; i < urls.length; i++) {
                  SlideImageView.ImageInfo tempInfo = new SlideImageView.ImageInfo(urls[i], "Image-" + i);
                  imageInfoList.add(tempInfo);
              }
              mSlideImageView.setImageInfos(imageInfoList);
          }
      }
    3. build.gradle中加入ImageLoader的依赖:

      dependencies {
          compile fileTree(dir: 'libs', include: ['*.jar'])
          compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
      }

    转载于:https://www.cnblogs.com/homg/p/7291793.html

    展开全文
  • 上往下打印出二叉树每个节点,同层节点从左至右打印。 解题思路 条件反射地想通过递归解决,结果硬是没有找到合适解决思路,也许递归方式不是很适合这种类型题目吧~ 利用队列先进先出(FIFO)特性...

    题目描述

    从上往下打印出二叉树的每个节点,同层节点从左至右打印。

    解题思路

    条件反射地想通过递归解决,结果硬是没有找到合适的解决思路,也许递归的方式不是很适合这种类型的题目吧~
    利用队列的先进先出(FIFO)特性解决。每从队列头部获取一个节点,就将该节点的左右子节点存入队列的尾部。如此往复,直至队列为空。这篇博客内的图片和表格很形象的展示了程序运行过程中队列内值的变化过程:

    二叉树样例:
    这里写图片描述
    打印二叉树每层节点时队列内值的变化:
    这里写图片描述

    Python代码

    def PrintFromTopToBottom(self, root):
        queue = []
        result = []
        if root == None:
            return result
    
        queue.append(root)
        while queue:
            newNode = queue.pop(0)
            result.append(newNode.val)
            if newNode.left != None:
                queue.append(newNode.left)
            if newNode.right != None:
                queue.append(newNode.right)
        return result

    带测试的Python代码:

    class Solution:
       #从上往下打印出二叉树的每个节点,同层节点从左至右打印
        def PrintFromTopToBottom(self, root):
            array = []
            result = []
            if root == None:
                return result
    
            array.append(root)
            while array:
                newNode = array.pop(0)
                result.append(newNode.val)
                if newNode.left != None:
                    array.append(newNode.left)
                if newNode.right != None:
                    array.append(newNode.right)
            return result
    
        # 给定二叉树的前序遍历和中序遍历,获得该二叉树
        def getBSTwithPreTin(self, pre, tin):
            if len(pre)==0 | len(tin)==0:
                return None
    
            root = treeNode(pre[0])
            for order,item in enumerate(tin):
                if root .val == item:
                    root.left = self.getBSTwithPreTin(pre[1:order+1], tin[:order])
                    root.right = self.getBSTwithPreTin(pre[order+1:], tin[order+1:])
                    return root
    
    class treeNode:
        def __init__(self, x):
            self.left = None
            self.right = None
            self.val = x
    
    if __name__ == '__main__':
        flag = "printTreeNode"
        solution = Solution()
        preorder_seq = [1, 2, 4, 7, 3, 5, 6, 8]
        middleorder_seq = [4, 7, 2, 1, 5, 3, 8, 6]
        treeRoot1 = solution.getBSTwithPreTin(preorder_seq, middleorder_seq)
        if flag == "printTreeNode":
            newArray = solution.PrintFromTopToBottom(treeRoot1)
            print(newArray)

    相关链接:

    顺序打印二叉树节点:初级版本(当前页)

    顺序打印二叉树节点:中级版本

    顺序打印二叉树节点:高级版本

    展开全文
  • Offer 04....题目要求判断target是否在数组中,所以肯定是要遍历数组,鉴于这个二维数组特点,可以从左下角开始走起,遍历到数比targert大就往上走,比target小就往右走。 图片详解: Code:

    剑指 Offer 04. 二维数组中的查找

    题目描述

    在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    Leetcode二维数组中的查找。1

    解题思路

    1. 从左下角开始遍历

    题目要求判断target是否在数组中,所以肯定是要遍历数组的,鉴于这个二维数组的特点,可以从左下角开始走起,遍历到的数比targert大就往上走,比target小就往右走。

    图片详解:
    在这里插入图片描述
    Code:

        def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:
            i = len(matrix)-1 # 行
            j = 0 # 列
            while i > -1 and j < len(matrix[0]):
                cur = matrix[i][j]
                if cur < target:
                    j += 1
                elif cur > target:
                    i -= 1
                else:
                    return True
            return False
    

    时间复杂度:O(m+n)。访问到的下标的行最多增加n次,列最多减少m次
    空间复杂度:O(1)

    在这里插入图片描述
    总结:注意下标不要溢出,也可以从右上角开始

    2. 二分查找

    逐行遍历二维数组,对每行数据进行二分查找。
    Code:

    class Solution:
        def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:
            def binary_search(nums,target):
                left = 0
                right = len(nums)-1
                while left <= right:
                    mid = (left+right)//2
                    if nums[mid] == target:
                        return True
                    elif nums[mid] <target:
                        left = mid+1
                    else:
                        right = mid-1
                return False
         for line in matrix:
           if not line:
               return False
            # 如果这一行的最后一个元素小于target,没必要二分搜索了
           if line[-1] < target:
               continue
           res = binary_search(line,target)
           if res == True:
               return res
       return False
    
    

    在这里插入图片描述
    时间复杂度:最坏的时候:n行 * 二分搜索的时间复杂度O(log n)
    写这道题的时候发现如下,平时都没注意到,以为not [[]] is True ,这是不对哒!!!

    >>> a = [[]]
    >>>not a
    False
    >>>not a[0]
    True
    

    references


    1. 剑指 Offer 04. 二维数组中的查找 ↩︎

    展开全文
  • 然后却发现我爱它爱的缺没有那么深沉,正如标题而言,你若要实现一个鼠标点击屏幕,然后屏幕上的图片就在鼠标位置出现,你会怎么做,然后你为什么会这样做,请读者先暂停阅读,思考并实现了再下看....这是一个挺...
  • offer复习递归

    2020-08-11 04:34:50
    该开始接触递归一脸懵逼,那时在做二叉树三种... 在思想分为从递归和从下递归,有时在从上往下递归时会有大量重复,比如我们经常举例子-斐波那契数列  如下图所示:  ![在这里插入图片描述](https://img-b
  • Javascript实现图片导航

    2021-01-31 03:11:20
    (当然这里做什么原型已确定)我们要做一个图片导航,一屏显示5张图片,用户能点“一张”/“下一张”按钮,实现移动切换图片,如果前没有图片了则“一张”是无效状态,如果往后没有图片了则“下一张”是...
  • 初学Android,手势缩放图片(四十八)

    千次阅读 2012-09-17 11:18:30
    下面例子是用手势来缩放图片,手指右划是放大,左是缩小下面效果在手机模拟器呈现只能是鼠标光标划动了package WangLi.IO.GestureZoom; import android.app.Activity; import android.graphics.Bitmap;...
  • offerC++ (22题往后)

    2020-06-11 09:17:03
    二叉搜索树与双向链表新改变功能快捷键合理创建标题,有助于目录生成如何改变文本样式插入链接与图片如何插入一段漂亮代码片生成一个适合你列表创建一个表格设定内容居中、居左、居右SmartyPants创建一...
  • 贝塞尔曲线: 贝塞尔曲线于1962,由法国工程师...上面的图片,我们可以见到一个白色的区域,边缘为弧形,这条弧线便是我们用贝塞尔曲线画出来的,然后我们要实现随着手指的滑,弧线慢慢变直线,下滑再慢慢变弧
  • 文字旁边搭配图片时,发现图片比文字靠上,原来默认情况是图片顶对齐而文字底对齐,通过设置css...在中文里,基线通常在文字底部往上1/5位置,这个取值对图片和文字对齐意义不大。 top,是当前元素与本行中最高
  • 这里,要把选择 和 截剪后的图片存到sdcard 目录中,那么就要有操作sdcard 的权限   &lt;!-- sdcard中写入数据的权限 --&gt; &lt;uses-permission android:name="android....
  • 用手机淘宝浏览商品详情时,商品图片是放在后面,在第一个ScrollView滚动到最底下时会有提示,继续拖动才能浏览图片。仿照这个效果写一个出来并不难,只要定义一个Layout管理两个ScrollView就行了,当第一个...
  • android图片橡皮擦功能和快速染色

    千次阅读 2014-11-23 09:57:24
    (1)染色功能实现 1.选中“染色”复选框,页面...2.当手指离开屏幕时,画轨迹与ImageTouchView进行渲染即染色(染色程度预留接口可以设置),如图2,(多次染色效果是往上即越染越深,要保证染色后对Ima
  • 我双指缩放比例 按照往上的算法 第一组手指距离/第二组手指距离得出缩放比例 但是我发现这个缩放比例不对,都没人尝试过吗?当手机缩放图片到最小时,继续缩放,图片会先恢复到原来大小 再缩小!我感觉比例...
  • Android手势密码view笔记(二)

    千次阅读 2017-02-28 16:50:21
    我们还是接着我们一篇博客中内容下讲哈,一节 Android手势密码view笔记(一)我们已经实现了我们IndicatorView指示器view了:下面我们来实现下我们手势密码view:实现思路:1、我们照样需要拿到用户需要...
  • css难以理解属性:vertical-align

    千次阅读 2020-06-02 16:59:02
    middle指的是基线往上1/2 "x-height"高度。 中间对齐(vertical-align : middle)通常使用在图片上,将图片的垂直方向的中线与文本行的中线对齐。 行内元素的排列按照的所有元素的基线排列 行内元素没有高就无法...
  • 图片是后来添加上去的遇到的问题:今天,搞了一个属于自己的日历,碰到一个比较纠结的问题,就是那个日期(指的是“日”不是“年月”)面板的日期和星期面板的星期怎么也不对应,查看其他的月份,结果是日期面板...
  • 在用Picasso做照片墙功能时,遇到的坑,记录一下: ...发现没,当我手指 由上往下移【即 浏览看过的图片】 及时相隔很近的距离,我没滑很远的距离,但是每次图片都要重新载入一次。 更改成: 加上.fit().c
  • 前端学习

    2016-11-10 12:31:00
    大部分指的是Web前端开发,这个词是从网页制作演变过来的,名称有着很明显的时代特征。在互联网的演化过程中,网页制作是Web1.0时代的产物,那时网站的主要内容都是静态的,用户使用网站的行为也以浏览为主。在这...
  • 这个图片也不怎么好,大写没注意到写好或不好,小写基本是对2.(1)拼音知识讲座一、错误示例及改正一、 笔画方向错笔画方向错,主要是整圆笔画和半圆笔画运笔方向错了。初学拼音者,有习惯将整圆笔画,按...
  • 思路:通过View.setOnTouchListener()提供Api获取到手指触摸屏幕坐标,然后通过Canvas.drawLine()在 bitmap 画出手指经过路径。 建议先参阅 Android开发:对图片进行简单编辑。第一步: 向 drawable ...
  • 关于background-position ...x y指的是背景在元素的起始位置(可以为负值,负值时将图片往左上拉),而不是背景图的起始位置 元素就像是背景的一堵窗,但只显示被窗覆盖的部分的背景,其余背景不显示 当...
  • Better-scroll 学习

    2020-05-25 15:43:40
    probeType:0/1/2/3 2是手指滚动 3是只要滚动就触发,惯性往上也是 bscroll.on(“scroll”,(position)=> {}) 2.上拉加载 pullUpLoad:true bscroll.on(“pullingUop”,()=> {}) 上拉加载更多,获取完数据后,...
  • 有关line-height见解

    2015-09-20 19:35:00
    基线是在英语书写4线3格中,从上往下数第三条线 1.line-height与行内框盒子模型  所有内联元素样式表现都与行内框盒子模型有关,例如图片的文字环绕效果。  以下面这段代码为例: <p>一段...
  • 标准意义上的高斯金字塔指的是不同分辨率的同一张图像所组成的图像结构,金字塔从上往下生成,图片的分辨率不断增大,称作上采样;金字塔从下往上生成,图片的分辨率不断减下,称作下采样。 i.下采样 下采样是对...
  • 手指 从上往下 滑动 能力 Tab 列表 观察列表后发现,列表会显示 最上边内容,继续滑动,顶部那张图片就开始 显示出来了,不知道这个能不能优化一下? <p><strong>版本号 1....
  • 先来一个效果图 ...   再上一张微信效果图对比: ...观察上面两张图,我们总结出这个图片手势关闭特点:... 正常状态按下,往上移动,是不能对图片进行移动,但是往下拉一下之后就可以上下左右随便移动; 要实现...

空空如也

空空如也

1 2 3 4
收藏数 72
精华内容 28
关键字:

往上指的图片