<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[rdywithyou的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/rdywithyou</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; rdywithyou]]></copyright><item><title><![CDATA[jupyter用不了opencv(cv2)]]></title><link>https://blog.youkuaiyun.com/rdywithyou/article/details/120369544</link><guid>https://blog.youkuaiyun.com/rdywithyou/article/details/120369544</guid><author>rdywithyou</author><pubDate>Sat, 18 Sep 2021 16:17:24 +0800</pubDate><description><![CDATA[打开Anaconda Prompt


直接在默认路径输入
pip install opencv-python



]]></description><category></category></item><item><title><![CDATA[【数据结构】 堆排序]]></title><link>https://blog.youkuaiyun.com/rdywithyou/article/details/119179843</link><guid>https://blog.youkuaiyun.com/rdywithyou/article/details/119179843</guid><author>rdywithyou</author><pubDate>Thu, 29 Jul 2021 11:13:33 +0800</pubDate><description><![CDATA[堆是以二叉树为基础存放数据，分为大顶堆和小顶堆。
大顶堆：根节点大于左右子节点。
升序排列使用大顶堆
小顶堆：根节点小于左右子节点。
降序排列使用小顶堆
排序思路为：
（1）将最小子树排成大顶堆。
（1.1）排序可能会影响底下排好的堆，需要递归（1）
（2）循环调用（1），全部排成大顶堆。
（2.1）将第0个元素和堆最后一个元素交换，将交换后前面的元素递归（1）。
现在存在数组[9, 6, 8, 7, 0, 1, 10, 4, 2]
大顶堆有很多种，其中一种大顶堆为：

将数组排成大顶堆：
Java代码：
]]></description><category></category></item><item><title><![CDATA[【数据结构】 用Kotlin和Java实现顺序存储二叉树]]></title><link>https://blog.youkuaiyun.com/rdywithyou/article/details/119173507</link><guid>https://blog.youkuaiyun.com/rdywithyou/article/details/119173507</guid><author>rdywithyou</author><pubDate>Wed, 28 Jul 2021 14:35:54 +0800</pubDate><description><![CDATA[顺序存储
1. 概述
顺序存储只考虑完全二叉树
存储为[1, 2, 3, 4, 5, 6, 7]

第n个元素的左节点是2n+1
第n个元素的右节点是2n+2
第n个元素的父节点是(n-1)/2
2. 遍历
java代码
public class ArrayBinaryTree {

    int[] data;

    public ArrayBinaryTree(int[] data) {
        this.data = data;
    }

    public void frontS]]></description><category></category></item><item><title><![CDATA[自定义View，用Kotlin绘制Android雷达图]]></title><link>https://blog.youkuaiyun.com/rdywithyou/article/details/119032098</link><guid>https://blog.youkuaiyun.com/rdywithyou/article/details/119032098</guid><author>rdywithyou</author><pubDate>Mon, 26 Jul 2021 18:16:45 +0800</pubDate><description><![CDATA[在自定义View和雷达图两篇博客的基础上，进行了些许修改，这里总结一下我自己的学习心得。
自定义View有如下几种方式




类型
定义




自定义组合控件
多个控件组合成为一个新的控件，方便多处复用


继承系统View控件
继承自TextView等系统控件，在系统控件的基础功能上进行扩展


继承View
不复用系统控件逻辑，继承View进行功能定义


继承系统ViewGroup
继承自LinearLayout等系统控件，在系统控件的基础功能上进行扩展


继承ViewViewGroup
不复用]]></description><category></category></item><item><title><![CDATA[【算法】用Kotlin实现数组全排列]]></title><link>https://blog.youkuaiyun.com/rdywithyou/article/details/118959448</link><guid>https://blog.youkuaiyun.com/rdywithyou/article/details/118959448</guid><author>rdywithyou</author><pubDate>Wed, 21 Jul 2021 15:57:51 +0800</pubDate><description><![CDATA[最近面试考到全排列的题，当时没做出来。

]]></description><category></category></item><item><title><![CDATA[面试题：线程与进程]]></title><link>https://blog.youkuaiyun.com/rdywithyou/article/details/118959614</link><guid>https://blog.youkuaiyun.com/rdywithyou/article/details/118959614</guid><author>rdywithyou</author><pubDate>Wed, 21 Jul 2021 14:37:34 +0800</pubDate><description><![CDATA[多任务：同一时间干多件事，比如开车的时候手和脚同时驾驶汽车。操作系统同时运行多个任务，比如一边浏览器刷网页、一边word写论文、一边MP3听音乐。
多线程和多进程就是处理多任务时提高效率。
并发：任务数&gt;CPU核数，通过操作系统的各种任务调度算法，实现多个任务“一起执行”。
并行：任务数&lt;CPU核数，即任务真的一起执行的。
安装火狐浏览器流程：下载火狐浏览器exe文件，点击exe进行安装，点击桌面图标，任务管理器就能显示火狐浏览器的进程。
程序：xx.py，xxx.txt是程序，是一个静态的。
]]></description><category></category></item><item><title><![CDATA[【数据结构】 用Kotlin实现二叉树的创建、遍历、查找、删除]]></title><link>https://blog.youkuaiyun.com/rdywithyou/article/details/118933183</link><guid>https://blog.youkuaiyun.com/rdywithyou/article/details/118933183</guid><author>rdywithyou</author><pubDate>Tue, 20 Jul 2021 16:38:40 +0800</pubDate><description><![CDATA[树的查找性能和插入性能优于线性结构（数组、链表）。

二叉树：任何节点的子节点数量不超过2

二叉树的子节点分为左节点和右节点。
下图是两棵树

满二叉树：所有叶子节点都在最后一层，而且节点总
数为2^n-1。
完全二叉树：所有叶子节点都在最后一层或倒数第二层，且最后一层的叶子节点都在左边连续，倒数第二层的叶子节点在右边连续。

下图不是完全二叉树，第4层的叶子节点不是从左至右

下图也不是完全二叉树，第3层右边的叶子结点没有填满。

创建二叉树
-------1
----2----3
代码
（1）创建树类]]></description><category></category></item><item><title><![CDATA[【算法】常见排序算法合集 Kotlin]]></title><link>https://blog.youkuaiyun.com/rdywithyou/article/details/118721601</link><guid>https://blog.youkuaiyun.com/rdywithyou/article/details/118721601</guid><author>rdywithyou</author><pubDate>Tue, 20 Jul 2021 11:17:39 +0800</pubDate><description><![CDATA[输入：n个数[9, 4, 7, 5, 1, 3, 2]
输出：[1, 2, 3, 4, 5, 7, 9]
本文为Kotlin代码
1. 插入排序 Insertion-Sort
适合对少量元素进行排序
fun main() {
    val A = mutableListOf(9, 4, 7, 5, 1, 3, 2)
    val new = insertionSort(A)
    println(new)
}

fun insertionSort(array: MutableList&lt;Int&g]]></description><category></category></item><item><title><![CDATA[Kotlin 递归]]></title><link>https://blog.youkuaiyun.com/rdywithyou/article/details/118797004</link><guid>https://blog.youkuaiyun.com/rdywithyou/article/details/118797004</guid><author>rdywithyou</author><pubDate>Mon, 19 Jul 2021 10:40:04 +0800</pubDate><description><![CDATA[递归：在一个函数内部调用该函数本身
入口
调用—入口
———调用—入口
——————调用—入口
—————————返回
——————返回
———返回
返回

递归能缩减代码，但可能造成栈溢出。
比如：
fun main(args: Array&lt;String&gt;) {
    rec(10)
}

fun rec(i: Int) {
    println(i)
    rec(i-1)
}

结果显示：

需要设置停止条件：
fun main(args: Array&lt;String&gt;) ]]></description><category></category></item><item><title><![CDATA[Kotlin 单向循环链表与双向循环链表]]></title><link>https://blog.youkuaiyun.com/rdywithyou/article/details/118793232</link><guid>https://blog.youkuaiyun.com/rdywithyou/article/details/118793232</guid><author>rdywithyou</author><pubDate>Fri, 16 Jul 2021 14:19:26 +0800</pubDate><description><![CDATA[1 单向循环链表
单向循环链表，它的最后一个结点指向头结点，形成一个环。在节点结构上和单链表是一样的。
从单向循环链表中的任何一个结点出发都能找到任何其他结点。
1.1 节点代码
class LoopNode(var value: Int) {
    //    独立的循环链表，自己循环到自己
    var next: LoopNode = this

    operator fun next(): LoopNode {
        return next
    }

    //    删除子]]></description><category></category></item><item><title><![CDATA[Kotlin 单链表的创建、删除节点、插入节点]]></title><link>https://blog.youkuaiyun.com/rdywithyou/article/details/118763280</link><guid>https://blog.youkuaiyun.com/rdywithyou/article/details/118763280</guid><author>rdywithyou</author><pubDate>Fri, 16 Jul 2021 13:10:53 +0800</pubDate><description><![CDATA[1

]]></description><category></category></item><item><title><![CDATA[Kotlin 用数组实现队列的入队、出队]]></title><link>https://blog.youkuaiyun.com/rdywithyou/article/details/118762937</link><guid>https://blog.youkuaiyun.com/rdywithyou/article/details/118762937</guid><author>rdywithyou</author><pubDate>Thu, 15 Jul 2021 16:40:42 +0800</pubDate><description><![CDATA[用Kotlin语言实现队列的先入先出
fun main() {
//    创建一个队列
    val mq = MyQueue()
//    入队
    mq.add(1)
    mq.add(2)
    mq.add(3)
    mq.add(4)

//    打印队列
    mq.show()
//    出队
    println(mq.poll())
    mq.show()
}

class MyQueue {
    var elements: IntArray = int]]></description><category></category></item><item><title><![CDATA[Kotlin 用数组实现栈的压入、弹出、获取栈顶元素]]></title><link>https://blog.youkuaiyun.com/rdywithyou/article/details/118762062</link><guid>https://blog.youkuaiyun.com/rdywithyou/article/details/118762062</guid><author>rdywithyou</author><pubDate>Thu, 15 Jul 2021 16:17:29 +0800</pubDate><description><![CDATA[实现栈的后入先出
fun main() {
//    创建一个栈
    val ms = MyStack()

//    压入数据
    ms.push(9)
    ms.push(8)
    ms.push(7)
    ms.push(6)

    // 获取栈顶
    println(ms.peek())
    // 弹出栈顶
    ms.pop()
    println(ms.peek())
}

class MyStack() {
    //    栈的底层使用数组来存储数]]></description><category></category></item><item><title><![CDATA[Kotlin 数组 IntArray和intArrayOf的区别]]></title><link>https://blog.youkuaiyun.com/rdywithyou/article/details/118758485</link><guid>https://blog.youkuaiyun.com/rdywithyou/article/details/118758485</guid><author>rdywithyou</author><pubDate>Thu, 15 Jul 2021 14:26:30 +0800</pubDate><description><![CDATA[在用Kotlin初始化数组遇到了个问题，没想到IntArray和intArrayOf居然还有区别。
一般可以这样初始化数组
val arr = intArrayOf(1, 2 ,3)

数组内的元素就是[1, 2, 3]。
但我如果要初始化长度为3的数组，但不知道里面填什么内容，用 intArrayOf 实现不了。
得这么做：
val arr = IntArray(3)

于是看了一下intArrayOf和IntArray的源码



...]]></description><category></category></item><item><title><![CDATA[【算法】哈希算法]]></title><link>https://blog.youkuaiyun.com/rdywithyou/article/details/118699044</link><guid>https://blog.youkuaiyun.com/rdywithyou/article/details/118699044</guid><author>rdywithyou</author><pubDate>Tue, 13 Jul 2021 15:11:11 +0800</pubDate><description><![CDATA[最近面试遇到面试官有提到哈希算法，可能比较重要，于是找资料学习整理了一下。
现实中有个应用场景：比如快递站有1000个快递，但只有10个货架，每个货架有5层，要将这1000个快递放入这50层内。
平均下来，每一层放入20个快递，但由于快递尺寸大小，每层可能放入的数量可能不一样。
取快递就直接说取件号，比如第3个快递柜的第2层可以是：0302；第13个快递柜的第4层可以是：1304。
于是，存在以下4个现象：
两个相同货物，一定存放在同一个货架的同一层；
两个不同货物，不一定存放在同一个货架的同一层；
同一个]]></description><category></category></item><item><title><![CDATA[IntArray和Array＜Int＞]]></title><link>https://blog.youkuaiyun.com/rdywithyou/article/details/118693625</link><guid>https://blog.youkuaiyun.com/rdywithyou/article/details/118693625</guid><author>rdywithyou</author><pubDate>Tue, 13 Jul 2021 10:22:09 +0800</pubDate><description><![CDATA[一开始不熟悉Kotlin数据结构的时候想着用二维数组来存矩阵，发现同时存在IntArray和Array&lt;Int&gt; ，这两者有什么区别。
fun main() {
    val array1 = intArrayOf(1, 2, 3)
    val array2 = arrayOf&lt;Int&gt;(1, 2, 3)
}

这里扒了两者字节码，说明了区别存在于JAVA装箱
后者使用了装箱，会影响效率。IntArray比**Array**效率更高。

...]]></description><category></category></item><item><title><![CDATA[Int与Int?，?.与!!.]]></title><link>https://blog.youkuaiyun.com/rdywithyou/article/details/118692295</link><guid>https://blog.youkuaiyun.com/rdywithyou/article/details/118692295</guid><author>rdywithyou</author><pubDate>Tue, 13 Jul 2021 09:54:16 +0800</pubDate><description><![CDATA[Int与Int?
最近编程遇到了个问题，在对列表取最大值并进行运算的时候：
fun main() {
    val list = listOf(0, 1, 2, 4, 6, 3)
    val big = list.max()
    println(big + 1)
}

编译器提示错误

big是属于Int?类型，不能直接和Int型的1相加。编译器提示有三种修改方法：

用if语句判断是否为空

if (big != null) {
    println(big + 1)
}


用 ?.  检测]]></description><category></category></item><item><title><![CDATA[Kotlin面向对象（二）： 抽象类与接口]]></title><link>https://blog.youkuaiyun.com/rdywithyou/article/details/117745975</link><guid>https://blog.youkuaiyun.com/rdywithyou/article/details/117745975</guid><author>rdywithyou</author><pubDate>Thu, 10 Jun 2021 10:08:37 +0800</pubDate><description><![CDATA[继承


open class Father {
    fun sayHello() {
        println("Hello")
    }
}

class Son : Father()

fun main() {
    val son = Son()
    son.sayHello()
}

方法重写


]]></description><category></category></item><item><title><![CDATA[Kotlin面向对象（1）：概念、类、对象、封装、构造函数、继承]]></title><link>https://blog.youkuaiyun.com/rdywithyou/article/details/117739980</link><guid>https://blog.youkuaiyun.com/rdywithyou/article/details/117739980</guid><author>rdywithyou</author><pubDate>Wed, 09 Jun 2021 15:46:19 +0800</pubDate><description><![CDATA[概念

面向对象有3大特性：

1、封装性：

2、继承性：

3、多态性：
]]></description><category></category></item><item><title><![CDATA[从Matlab转向Kotlin（3）：顶层函数、成员函数、局部函数、递归函数、尾递归函数]]></title><link>https://blog.youkuaiyun.com/rdywithyou/article/details/117734370</link><guid>https://blog.youkuaiyun.com/rdywithyou/article/details/117734370</guid><author>rdywithyou</author><pubDate>Wed, 09 Jun 2021 13:40:04 +0800</pubDate><description><![CDATA[熟悉了Kotlin的数组/集合和函数，就能复现一些简单的Matlab计算数学的程序。刚好能把笔者研究生期间计算数学的一点Matlab编程经验用上。

这里把《Kotlin从基础到实践》的书里把函数章节学完，可以给《从Matlab转向Kotlin》系列收个尾了。

在函数里编辑数学公式，以及函数的调用，Matlab和Kotlin大同小异，这里学习整理函数的分类和递归。



函数的分类

Kotlin里把函数分为顶层函数、成员函数、局部函数。

顶层函数是直接在kt文件里创建函数

成员函数是在类里面创建函.]]></description><category></category></item></channel></rss>