算法练习与笔记
记录每次算法题的记录和想法和思路
放飞自我的鱼
这个作者很懒,什么都没留下…
展开
-
C#70. 爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶采用动态规划,使用滚动数组。public class Solution { public int C原创 2020-06-13 14:43:07 · 370 阅读 · 0 评论 -
C#240. 搜索二维矩阵 II
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 target = 5,返回 true。给定 target = 20,原创 2020-06-12 11:16:22 · 217 阅读 · 0 评论 -
C#88. 合并两个有序数组
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3输出: [1,2,2,3,5,6]采用双指针进行。定义两个指针I,J原创 2020-06-12 10:18:38 · 269 阅读 · 0 评论 -
C#169. 多数元素
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2使用哈希表题解。题意分析,找出多数元素它大于N/2,每次出现就在KEY对应的VALUE加一,在一次循环中,当给定的list[nums[i]]。就是value值大于数组长的n/2。直接就可以确定多数元素。public class So原创 2020-06-09 14:11:38 · 158 阅读 · 0 评论 -
C#29. 顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]限制:0 <= matrix.length <= 1000 <= matrix[i].length <= 100采原创 2020-06-05 23:00:05 · 318 阅读 · 0 评论 -
C#238. 除自身以外数组的乘积(学习笔记)
给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。进阶:你可以在常数空间复杂度内完成这个题目吗?采用的左右积来实现。初始化 res 数组,对于给定索引 i,res[i] 代表的是 i 左侧所有数字的乘积。构造方式与之前相同,只是我们试图节原创 2020-06-04 23:37:47 · 447 阅读 · 0 评论 -
C#算法面试题64.求1+2+…+n之和
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。看到累加想到使用递归,但是不能用关键字,递归需要出口,使用逻辑运算符来实现出口。&&运算符A&&B,如果A返回false,A&&B为false,表达式执行A。||运算符A||B,如果A返回true,A||B为true,表达式执行A。public class Solution { publi原创 2020-06-02 11:42:29 · 465 阅读 · 0 评论 -
C#拥有最多糖果的孩子
给你一个数组 candies 和一个整数 extraCandies ,其中 candies[i] 代表第 i 个孩子拥有的糖果数目。对每一个孩子,检查是否存在一种方案,将额外的 extraCandies 个糖果分配给孩子们之后,此孩子有 最多 的糖果。注意,允许有多个孩子同时拥有 最多 的糖果数目。看到这个直接考虑的枚举方法。一次便利获取最大值max,二次便利则将整数加上num[i]+n判断>=max,这时候返回一个TURE。反之返回flase。public class Solution {原创 2020-06-01 21:44:23 · 159 阅读 · 0 评论 -
C#寻找重复数
给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。不能更改原数组(假设数组是只读的)。只能使用额外的 O(1) 的空间。时间复杂度小于 O(n²) 。数组中只有一个重复的数字,但它可能不止重复出现一次。开始思考时时准备使用字典来,健对值简单粗暴,然后发现不符合题目说的空间复杂度,于是就考虑别的方法。从leetcode上看到二分法可以解决,利用n+1个数,每个数都在1到n之间。原创 2020-05-26 14:38:16 · 1072 阅读 · 0 评论