自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 【推荐系统学习1】 传统推荐系统

reference:https://developer.ibm.com/zh/articles/1103-zhaoct-recommstudy1/#icomments

2020-11-18 00:21:48 241

原创 [pytorch 笔记] 怎样在python script中选择GPU

我们知道在terminal 中可以通过 CUDA_VISIBLE_DEVICES=x python3 my_script.py 来选择使用的GPU。那么在python 脚本中怎样选择呢。可以通过如下简单操作import osos.environ["CUDA_VISIBLE_DEVICES"] = "x"import torch # this should be after device selection网上的另一种办法 torch.cuda.set_device(x) 经试验似乎并不起作用

2020-11-17 15:24:21 151

原创 leecode刷题笔记-136. 只出现一次的数字

本题利用xor位运算的性质,xor运算两数相同时结果为0, 两数不同结果为1. 且位运算符合交换律。对数组所有元素依次进行位运算,得到结果就是唯一出现一次的元素class Solution: def singleNumber(self, nums: List[int]) -> int: res = nums[0] for num in nums[1:]: res = num ^ res return res或者使.

2020-10-03 22:49:03 143

原创 python reduce() 函数

2020-10-03 22:43:59 124

原创 python bitwise operator 位运算

a^b: xor, (a and not b) or (not a and b)

2020-10-03 22:39:22 247

原创 剑指offer刷题笔记-32.从上到下打印二叉树 进阶

涉及到二叉树的题目一般用stack实现bfs或者dfs,最好避免迭代法。题目分层打印,与从左到右打印类似,依然使用bfs。之字形打印,只需要一个判定语句区分奇偶层然后用collections.deque双向队列实现快速的逆向打印。关于collections.deque的用法,见链接写代码思维练习:确定函数的输出res:list[list]需要那些变量:一个deque用来储存搜索节点,另一个deque用来储存每层的打印列表主体while循环的结束条件: deque为空,也就是整个树遍历完毕时.

2020-10-03 21:52:39 2292

原创 剑指 Offer刷题笔记-59.滑动窗口的最大值

不用暴力法此题难度是困难,的确没做出来。 暴力法是遍历数组,在每个window的数组中,找最大值,复杂度O(n*k)。window移动可以看作一个子数组去掉最前面的element,末尾加入一个新的element。那么这个新的element和前一个window去掉第一个element的最大值比较即可。那么问题变为怎样快速得到去掉第一个元素的数组的最大值。...

2020-10-03 20:53:30 107

原创 MatConvNet 安装排坑指南

首先来看官网的安装指南https://www.vlfeat.org/matconvnet/quick/% Install and compile MatConvNet (needed once).untar('http://www.vlfeat.org/matconvnet/download/matconvnet-1.0-beta25.tar.gz') ;cd matconvnet-1.0-beta25run matlab/vl_compilenn ;% Download a pre-trai

2020-09-29 10:35:49 326

原创 剑指offer刷题笔记-66. 构建乘积数组

又是一道思路非常简单,但是操作时需要技巧的题。基本思路就是每个元素B[i] = A[1:i-1]的阶乘*A[i+1:]的阶乘。为了避免暴力法求B中每个元素时都要算两遍阶乘,可以事先把A从左到右的阶乘和从右到左的阶乘算出来并储存。代码如下:class Solution: def constructArr(self, a: List[int]) -> List[int]: left = [] right = [] prod_l = 1 .

2020-09-19 19:14:08 137

原创 剑指offer刷题笔记-64. 求1+2+…+n

看某大神留言:python的 and 操作如果最后结果为真,返回最后一个表达式的值,or 操作如果结果为真,返回第一个结果为真的表达式的值class Solution: def sumNums(self, n: int) -> int: return n and (n + self.sumNums(n-1))如果n为0, and结果为False, 返回n。...

2020-09-16 22:09:37 90

原创 剑指offer刷题笔记-44. 数字序列中某一位的数字

这题和上个题有点类似,不太难。从1开始,一位数有9个,二位数有90个,三位900个。。。循环把这些个数乘以位数加起来就是在序列中的总位数,直到总位数大于n,这时我们就能知道n所属的数是个几位数。然后找到n输入哪个数和在这个数中所处的位,就能求出n对应的数字代码如下:class Solution: def findNthDigit(self, n: int) -> int: if n == 0: return 0 digit = 1 coun.

2020-09-16 19:28:02 102

原创 剑指offer刷题笔记-43. 1~n整数中1出现的次数

这题思路上没什么难度,具体操作上优点乱。思路就是分别求每一位上1的个数,用一个while循环遍历所有位。找几个例子找到一个统一的公式就行了。从个位digit = 1开始,个位每10个数里有一个1,十位每100个数里有10个1,以此类推,就是digit对应的位每10**(digit)个数有10**(digit-1)个1. 公式就是int(n/(10digit))*(10(digit-1))。 这个公式只考虑到整位数所包含的1,之后要考虑的是散数里包含的1,此时有两种情况下余下的数里还会包含1: 第一种情况.

2020-09-16 17:59:44 97

原创 Python运算符优先级

在这里插入图片描述

2020-09-15 12:15:40 62

原创 剑指offer刷题笔记-34 二叉树中和为某值的路径

此题思路很简单,使用回溯法,在当前sum减去当前node的val作为子节点的sum输入,直到叶节点。不过我没想清楚的是返回值如何储存,因为我想直接用pathSum函数作为递归函数,那么函数的返回值只能是所有子路径的list。那么子节点通过pathSum输出的路径和父节点的val结合比较困难。解决此问题其实只要在pathSum中再定义一个函数作为递归函数recur,然后在此函数外定义两个variable,path储存从root到当前节点的路径,output储存最后输出的路径的list。每到一个节点,把va.

2020-09-15 10:47:34 92

原创 五大常用算法类型

这个链接总结的很好还有一个解释的更详细的博客链接

2020-09-14 16:29:30 3031

原创 剑指offer刷题笔记-32.从上到下打印二叉树

二叉树的表示方为:node.left:左子节点的TreeNodenode.right: 右子节点的TreeNode打印时,用bfs,就需要用到queue的FIFO的性质,python中可以直接用list来完成queue的操作array.pop(0)可remove最左边的元素。代码如下# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self..

2020-09-14 15:15:24 123

原创 剑指offer刷题笔记-51数组中的逆序对

暴力解法数组每个数都和它之后的数比较大小:count = 0for i in range(len(array)): for j in range(i+1, len(array)): if array[i] > array[j]: count+=1O(n^2)的复杂度,必然超出时间限制。那么可以考虑divide-and-conquer的办法。我们发现,如果把一个数组分成两个sub array sub1, sub2,那么总的逆序对数量=sub1的逆序对数量 + sub2逆序对数量 .

2020-09-14 12:49:50 119

原创 剑指offer刷题笔记-12 矩阵中的路径

此题能想到的思路是遍历矩阵,以每个节点为开始用回溯法去分别以上,下,左,右为起始节点,去判断word[1:]是否存在。已经访问过的节点的字母,用特殊符号替代。但是在具体实施上没有能很快想清楚,主要是利用多指针移动的思维没有建立,需要多加练习。总结一下理清思路的办法:回溯法需要考虑以下几点:1. 结束条件: 当表示矩阵节点位置的指针越界时,return false。当当前矩阵节点的符号和word中当前字母不同时,return false。 当当前节点以访问过,return false。 当前面几个条件均未.

2020-09-14 09:41:25 137

原创 剑指offer刷题笔记-49丑数

第一眼知道是dp问题,但是理不清思路,发现dp问题的核心和难点在于抽象出最终最优解与子最优解之间的关系函数。此题中,需要用opt[n-1]…opt[1]来求opt[n], 但是1~n-1每个数都有*2,*3,5 三种可能作为opt[n]的可能解,过于复杂。看了解题思路很受启发,只需要从第一个数1开始,用三个index控制2, *3, *5的数的位置。下一个丑数就是这三个index对应的值的最小那个,然后把对应的index向右移动一位,循环此策略:class Solution(object): d.

2020-09-13 22:06:04 70

原创 动态规划编程题加课-手电过桥问题

此题最难的是切入思路。我一开始纠结于过桥顺序的多种情况。后来发现思路要从时间最大者切入。时间最大者t_n过桥的时间一定会被计入总时间,因为没有人可以带他。那么t_n过桥的顺序其实不重要,他过桥的策略只有两种:1. 带同伴过桥,同伴送手电回来。2. 带同伴过桥,第三者送手电回来。要有第三者回来,那么必然先于t_n, 有另外两人过河,然后二人中一个送回手电筒留在这边,t_n与同伴过河,先过河二人剩下的那个送回手电筒,此时对面留下了t_n与同伴。第一种情况的最优解是带时间最小者t_1过桥,然后t_1回来,此时.

2020-09-13 19:35:29 740

原创 剑指offer刷题笔记- 63. 股票的最大利润

第一思路是遍历数组,记录之前产生的最大利润和最低价格。因为题目规定先买再卖,每个iter卖出的可能最大利润都是当前价格减去历史最低价。再比较当前iter的利润与历史最大利润的大小,来更新历史最大利润。若当前价格小于历史最低价,则更新历史最低价。代码如下class Solution(object): def maxProfit(self, prices): """ :type prices: List[int] :rtype: int .

2020-09-13 16:57:44 121

原创 剑指offer刷题笔记 - 二维数组的查找

这里写自定义目录标题自己想的思路是比较target与矩阵中心值的大小,如果target大,则排除中心左上的1/4矩阵, 如果target小,则排除右下的1/4矩阵。 然后把剩下的3/4矩阵分割三份,recursively 调用函数查找三个矩阵。代码如下:下面展示一些 内联代码片。import numpy as npclass Solution: # array 二维列表 def Find(self, target, array): # write code here

2020-09-12 23:00:36 97

原创 markdown 示例

标题你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;增加了 图片拖拽 功能,你可以将本地的

2020-09-04 15:23:09 566

空空如也

空空如也

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

TA关注的人

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