![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程与算法
CIA_agent
这个作者很懒,什么都没留下…
展开
-
leetcode 137. 只出现一次的数字 II
思路,每个数都是 32 bit, 统计每个 bit 所有数在该 bit 位 1个个数,设该值为 sum, 若 sum%3!= 0, 说明仅出现一次的元素的该 bit 为 1, 循环 32次就能计算出来了。给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次。请你找出并返回那个只出现了一次的元素。nums 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次。输入:nums = [0,1,0,1,0,1,99]输入:nums = [2,2,3,2]原创 2023-09-08 23:22:46 · 364 阅读 · 0 评论 -
leetcode 983. 最低票价
思路,定义 dp[i] 为到第 i 天的最小 cost,则有,如果 i 不在 days 里面 dp[i] = dp[i-1], 如果 i 在 days 里面 dp[i] = min(dp[i-1]+costs[0], dp[i-7]+costs[1], dp[i-30]+costs[30])输入:days = [1,2,3,4,5,6,7,8,9,10,30,31], costs = [2,7,15]在第 1 天,你花了 costs[0] = $2 买了一张为期 1 天的通行证,它将在第 1 天生效。原创 2023-08-03 21:21:23 · 586 阅读 · 0 评论 -
leetcode 17.24. 最大子矩阵
其实最暴力的算法,矩阵内元素相加是可以做一些优化的,比如当前已经计算好了 (r1, c1) 开头,(r2, c2) 结束的子矩阵的和,那我们计算 (r1, c1) 开头,(r2, c2+1) 的时候就不用完全重新计算了。返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。思路:直接用最暴力的算法,计算 (i,j) 为 开头的节点的最大矩阵(m 行 n 列),这样时间复杂度是 m。输出:[0,1,0,1]原创 2023-07-19 09:14:35 · 242 阅读 · 0 评论 -
leetcode 1802. 有界数组中指定下标处的最大值
解释:数组 [1,1,2,1] 和 [1,2,2,1] 满足所有条件。abs(nums[i] - nums[i+1]) <= 1 ,其中 0 <= i < n-1。注意:abs(x) 等于 x 的前提是 x >= 0;否则,abs(x) 等于 -x。输入:n = 6, index = 1, maxSum = 10。输入:n = 4, index = 2, maxSum = 6。nums[i] 是 正整数 ,其中 0 <= i < n。返回你所构造的数组中的 nums[index]。原创 2023-07-16 18:02:45 · 382 阅读 · 0 评论 -
leetcode 316. 去除重复字母
给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。输入:s = “cbacdcbc”输入:s = “bcabc”s 由小写英文字母组成。原创 2023-07-15 22:14:03 · 332 阅读 · 0 评论 -
leetcode 1110. 删点成林
采用 dfs 的方式来做,首先判断 节点是否是根节点,如果结点是根节点,且不会被删除,那么就把该节点就会被添加到结果数组中,如果根节点被删除,那么其子节点会变成跟节点。如果节点值在 to_delete 中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的集合)。输入:root = [1,2,3,4,5,6,7], to_delete = [3,5]输入:root = [1,2,4,null,3], to_delete = [3]输出:[[1,2,null,4],[6],[7]]原创 2023-07-11 20:09:44 · 216 阅读 · 0 评论 -
剑指 offer 44 数字序列中某一位的数字
思路:以 13 为例, 因为 13>=10,故到 13 的时候数字肯定是两位数,我们可以把前面的 0,1,2,3…9 前面补 0 变成 00,01,…09, 这样相当于在全是两位数的 00,01,02,…99 中查找第 23位对应的数字。的格式作为一个字符序列,在这个序列中第 2 位(从下标 0 开始计算)是 2 ,第 10 位是 1 ,第 13 位是 1 ,以此类题,请你输出第 n 位对应的数字。第 23 为对应 数字 11 中的第2位(str=‘11’ 的 index 为 1 的那一位)原创 2023-07-10 11:13:41 · 75 阅读 · 0 评论 -
剑指offer 41 数据流中的中位数
如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。数据流里面不断吐出的是5,2,3…,则得到的平均数分别为5,(5+2)/2,3…进阶: 空间复杂度 O(n) , 时间复杂度 O(nlogn)1≤n≤1000 ,大小满足 1≤val≤1000。思路:可以用一个最大值堆和最小值堆可存一半的数据。原创 2023-07-09 19:38:59 · 241 阅读 · 0 评论 -
剑指 offer 36. 二叉搜索树与双向链表
思路:最常规的思路就是中序遍历,对于BST 数,中序遍历就是一个有序的列表,然后把列表转成一个双向队列就ok,由于题目要求空间复杂度 O(1), 我们可以在中序遍历的时候对原有的树做一些变换,在数的基础上进行调整,这样就不用再申请额外的空间了。数据范围:输入二叉树的节点数 0≤n≤1000,二叉树中每个节点的值 0≤val≤1000,要求:空间复杂度 O(1)(即在原树上操作),时间复杂度 O(n)输入题面图中二叉树,输出的时候将双向链表的头节点返回即可。2.返回链表中的第一个节点的指针。原创 2023-07-03 21:56:32 · 115 阅读 · 0 评论 -
BM70 兑换零钱(一)
描述给定数组arr,arr中所有的值都为正整数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个aim,代表要找的钱数,求组成aim的最少货币数。如果无解,请返回-1.数据范围:数组大小满足 0≤n≤10000 , 数组中每个数字都满足 0<val≤10000,0 ≤aim≤5000要求:时间复杂度 O(n×aim) ,空间复杂度 O(aim)。示例1输入:[5,2,3],20返回值:4示例2输入:[5,2,3],0返回值:0示例3输入:[3原创 2022-04-09 22:01:38 · 235 阅读 · 0 评论 -
BM61 矩阵最长递增路径
描述给定一个 n 行 m 列矩阵 matrix ,矩阵内所有数均为非负整数。 你需要在矩阵中找到一条最长路径,使这条路径上的元素是递增的。并输出这条最长路径的长度。这个路径必须满足以下条件:对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外。你不能走重复的单元格。即每个格子最多只能走一次。数据范围:1≤n,m≤1000,1≤matrix[i][j]≤1000进阶:空间复杂度 O(nm) ,时间复杂度 O(nm)例如:当输入为[[1,2,3],[4,原创 2022-04-06 22:12:58 · 461 阅读 · 0 评论 -
leetcode 寻找第 K 大(快排)
描述有一个整数数组,请你根据快速排序的思路,找出数组中第 k 大的数。给定一个整数数组 a ,同时给定它的大小n和要找的 k ,请返回第 k 大的数(包括重复的元素,不用去重),保证答案存在。要求:时间复杂度 O(nlogn),空间复杂度 O(1)数据范围:0≤n≤pow(10,5) , 1≤K≤n,数组中每个元素满足 0≤val≤10000000示例1输入:[1,3,5,2,2],5,3返回值:2基本思路还是快排的思路, 注意不要在if i < j:self.swap(a, i原创 2022-04-02 21:01:40 · 709 阅读 · 0 评论 -
剑指 offer 65 不用加减乘除做加法
描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。数据范围:两个数都满足 −10≤n≤1000进阶:空间复杂度 O(1),时间复杂度 O(1)示例1输入:1,2返回值:3示例2输入:0,0返回值:0解题思路对于整数,则很简单,直接按 与,或,异或等操作考虑进位就ok, 对于负数稍麻烦一些, 负数用补码表示, 假如用 n 位表示, 若一个数为负数,则其补码为 pow(2, n) - 相反数, 举个例子, -2 用补码表示为 1111111原创 2022-03-18 22:08:29 · 291 阅读 · 0 评论 -
剑指offer 11. 旋转数组的最小数字
描述有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。数据范围:1≤n≤10000,数组中任意元素的值: 0≤val≤10000要求:空间复杂度:O(1)O(1) ,时间复杂度:O(logn)O(logn)示例1输入:[3,4,5,1,2]返回值:1示例2输入:[3,100,200,3]原创 2022-03-01 23:16:01 · 108 阅读 · 0 评论 -
剑指offer 66. 机器人的运动范围
描述地上有一个rows行和cols列的方格。坐标从 [0,0] 到 [rows-1,cols-1]。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于threshold的格子。 例如,当threshold为18时,机器人能够进入方格[35,37],因为3+5+3+7 = 18。但是,它不能进入方格[35,38],因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?范围:1 <= rows, cols<= 10原创 2021-09-20 14:11:31 · 133 阅读 · 0 评论 -
剑指offer 46 孩子们的游戏(圆圈中最后剩下的数,约瑟夫环)
每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!_)。请你试着想下,哪个小朋友会得到这份礼品原创 2021-09-11 21:34:13 · 81 阅读 · 0 评论 -
剑指offer 24: 二叉树中和为某一值的路径
剑指offer24: 二叉树中和为某一值的路径描述输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。示例1输入:{10,5,12,4,7},22返回值:[[10,5,7],[10,12]]示例2输入:{10,5,12,4,7},15返回值:[]# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x)原创 2021-09-05 21:55:13 · 87 阅读 · 0 评论 -
2017阿里实习生招聘编程题之相亲约会
题目描述: 小张很多年过年都没有回家了。这次回家父母给他安排了很多个相亲的姑娘,有一个很长的名单,长度为N. 父亲安排约会,每次随机选择一个要相亲的对象,母亲则负责记录哪些姑娘已经约会过了。直到和所有的姑娘都约会完一遍以后,这个浩大的相亲工程才会结束。这些天父母在吵架,他们之间不会有任何言语沟通。所以父亲不知道哪些姑娘已经约会过了。因此下次约会的对象很可能是以前已经约会过的。如果小张要把所有的姑娘原创 2017-04-26 23:09:46 · 1113 阅读 · 0 评论 -
leetcode 714. 买卖股票的最佳时机含手续费
leetcode 714. 买卖股票的最佳时机含手续费给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每次交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。示例 1:输入: prices = [1, 3, 2, 8, 4, 9]...原创 2019-07-28 22:01:10 · 339 阅读 · 0 评论 -
leetcode 939. 最小面积矩形
给定在 xy 平面上的一组点,确定由这些点组成的矩形的最小面积,其中矩形的边平行于 x 轴和 y 轴。如果没有任何矩形,就返回 0。示例 1:输入:[[1,1],[1,3],[3,1],[3,3],[2,2]]输出:4示例 2:输入:[[1,1],[1,3],[3,1],[3,3],[4,1],[4,3]]输出:2提示:1 <= points.length <= 50...原创 2019-08-08 09:28:28 · 513 阅读 · 0 评论 -
leetcode 918. 环形子数组的最大和
给定一个由整数数组 A 表示的环形数组 C,求 C 的非空子数组的最大可能和。在此处,环形数组意味着数组的末端将会与开头相连呈环状。(形式上,当0 <= i < A.length 时 C[i] = A[i],而当 i >= 0 时 C[i+A.length] = C[i])此外,子数组最多只能包含固定缓冲区 A 中的每个元素一次。(形式上,对于子数组 C[i], C[i+1]...原创 2019-09-01 17:32:53 · 296 阅读 · 0 评论 -
leetcode 910. 最小差值 II
给定一个整数数组 A,对于每个整数 A[i],我们可以选择 x = -K 或是 x = K,并将 x 加到 A[i] 中。在此过程之后,我们得到一些数组 B。返回 B 的最大值和 B 的最小值之间可能存在的最小差值。示例 1:输入:A = [1], K = 0输出:0解释:B = [1]示例 2:输入:A = [0,10], K = 2输出:6解释:B = [2,8]示例 3...原创 2019-09-01 17:42:28 · 222 阅读 · 0 评论 -
238. 除自身以外数组的乘积
给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。来源:力扣(LeetCode)链接:https://leetcode-cn.com/p...原创 2019-09-08 17:25:26 · 139 阅读 · 0 评论 -
leetcode 907. Sum of Subarray Minimums
Given an array of integers A, find the sum of min(B), where B ranges over every (contiguous) subarray of A.Since the answer may be large, return the answer modulo 10^9 + 7.Example 1:Input: [3,1,2,4...原创 2019-06-16 21:32:25 · 428 阅读 · 0 评论 -
leetcode560. Subarray Sum Equals K
Given an array of integers and an integer k, you need to find the total number of continuous subarrays whose sum equals to k.Example 1:Input:nums = [1,1,1], k = 2Output: 2Note:The length of the a...原创 2019-03-13 20:28:06 · 106 阅读 · 0 评论 -
leetcode 207 Course Schedule
There are a total of n courses you have to take, labeled from 0 to n-1.Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair:...原创 2019-03-17 22:41:32 · 134 阅读 · 0 评论 -
如何判断2条线段是否相交(编程实现)?
我们在编程中有时可能会碰到一些问题,比如怎么判断2条线段是否相交,最常规的一种思路可能就是解方程,看是否有交点,但这种方法用代码实现感觉稍显复杂,时间复杂度大,且控制条件多,很容易出错,那我们有没有更简单的方法呢?我们在大约高中的时候应该都学过向量的叉积,2个向量做叉积,比如a向量 叉乘 b向量, 大小为|a||b|*sin(theta), 方向遵循右手定则,用右手4根指头从a向量指向b向量,原创 2017-10-02 16:21:14 · 12769 阅读 · 0 评论 -
#2016京东实习生笔试之生日礼物
2016京东实习生笔试之生日礼物题目描述BF的生日快到了,这一次,小东决定为BF送一份特别的生日礼物为其庆生。作为高智商中的佼佼者,BF在国外求学,因此小东无法与之一起庆生。小东计划送一个生日卡片,并通过特别的包装让BF永远难忘。她决定把卡片套装在一系列的信封A = {a1, a2, …, an}中。小东已经从商店中购买了很多的信封,她希望能够用手头中尽可能多的信封包装卡片。为防止卡片或信封被原创 2017-09-16 15:00:33 · 609 阅读 · 2 评论 -
LeetCode 69: Sqrt(x) 求根号x(牛顿迭代法和二分查找法)
题目: Implement int sqrt(int x). Compute and return the square root of x.分析:我们平常可能好少会自己去求解某个数的平方根,一般都是直接调用系统提供的函数,其实一般针对问题,并没有直接求解的公式,一般都是通过一个公式多次迭代来无限接近于这个解,这时,这个值就是我们要求的解。 下面我们简要介绍2中方法:牛顿迭代法和二分查找法。牛原创 2017-05-21 13:54:07 · 6970 阅读 · 1 评论 -
2017阿里实习生招聘编程题之墓室
题目描述: 一个摸金校尉要通过一个矩形墓室,入口的位置为(0,0),出口位置为(m,n)。墓室中散步着一些散光发射器,某些激光发射器之间有激光。m,n和激光的起始和终止位置(x1,y1,x2,y2)均为整数。请问他能否不碰到激光,成功通过墓室。题目分析: 首先通过深度优先遍历(DFS)根据直线是否相交确定所有的激光线段所构成的连通分量,例如,右图有3个连通分量,分别记录每个连通分量的横坐标的最小值和原创 2017-04-27 14:36:11 · 425 阅读 · 0 评论 -
LeetCode 11 Container With Most Water算法分析及其变体
题目: Given n non-negative integers a1, a2, …, an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find tw原创 2017-05-17 11:09:22 · 624 阅读 · 0 评论 -
求2个排序数组的中间元素的值(leetcode4:Median of Two Sorted Arrays)
题目:给定2个数组nums1和nums2,长度分别为m和n,求2个数组中间的元素,总时间复杂度为O(log(m+n))。There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time com原创 2017-05-15 11:20:25 · 389 阅读 · 0 评论 -
2017网易实习生招聘编程题之魔力手环(矩阵幂)
题目描述: 小易拥有一个拥有魔力的手环上面有n个数字(构成一个环),当这个魔力手环每次使用魔力的时候就会发生一种奇特的变化:每个数字会变成自己跟后面一个数字的和(最后一个数字的后面一个数字是第一个),一旦某个位置的数字大于等于100就马上对100取模(比如某个位置变为103,就会自动变为3).现在给出这个魔力手环的构成,请你计算出使用k次魔力之后魔力手环的状态。 题目链接:输入描述: 输入数据包原创 2017-04-29 14:25:42 · 1300 阅读 · 0 评论 -
平面最近点距离问题(分治法)
问题描述:给定平面上n个点,每个点坐标分别为(x,y),求其中的一对点,使得在n个点组成的所有点对中,该点对的距离最小。 最简单的做法是找到所有点对的距离,然后求最小值,但这样做效率太低,时间复杂度为O(n*n), 求最小值的问题,我们很容易联想到分治法,但是分治法一般是用在一维的条件下,那么问题来了,当扩展到二维的情况下,如何使用分治法呢? 一般想到分治法,我们一般最开始可能就会想到,把n原创 2017-04-28 11:35:53 · 19717 阅读 · 9 评论 -
2017百度秋招真题笔试之十字架
题目描述小A很喜欢十字架,并喜欢用各种方式产生十字架的样子。小A不满足简单的十字架输出效果,所以重新定义了一种高大上的十字架输出方式。给一个n(1≤n≤10) , 输出对应的图形,具体形式如下:1.当n=1的时候,输出一个小写字母"o" :o2.当n≥2的时候,复制n=n-1时候的图像,并且在n-1图像的上、下、左、右都粘贴一个一模一样的图形。如n=2时,在原图"o"的上下左右都粘贴一个"o原创 2017-04-11 10:32:15 · 2820 阅读 · 0 评论 -
数组中的逆序对(剑指offer)
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述:题目保证输入的数组中没有的相同的数字数据范围: 对于%50的数据,size<=10^4 对于%75的数据,size<=10^5 对于%100的数据,siz原创 2017-10-13 09:35:50 · 446 阅读 · 0 评论 -
字典树(Trie、prefix tree)及其应用(求一个数组中的最大异或值)
trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值(字符串结尾的那个结点)。trie中的键通常是字符串,但也可以是其它的结构。原创 2017-10-16 13:53:11 · 688 阅读 · 0 评论 -
整数中1出现的次数(从1到n整数中1出现的次数)
求出1-13的整数中1出现的次数,并算出100-1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。分析:可以分别计算该整数个位数中1出现的次数,十位数中1出现的次数,百位数中1出现...原创 2019-03-05 22:27:03 · 584 阅读 · 0 评论 -
leetcode 395. Longest Substring with At Least K Repeating Characters
Find the length of the longest substring T of a given string (consists of lowercase letters only) such that every character in T appears no less than k times.Example 1:Input:s = “aaabb”, k = 3Outp...原创 2019-03-24 20:26:14 · 119 阅读 · 0 评论 -
leetcode 131 Palindrome Partitioning分割回文串
Given a string s, partition s such that every substring of the partition is a palindrome.Return all possible palindrome partitioning of s.Example:Input: “aab”Output:[[“aa”,“b”],[“a”,“a”,“b”]]...原创 2019-03-24 20:20:13 · 132 阅读 · 0 评论