数据结构与算法
MagicianThirteen
这个作者很懒,什么都没留下…
展开
-
找到所有数组中消失的数字
给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。 示例 1: 输入:nums = [4,3,2,7,8,2,3,1] 输出:[5,6] 示例 2: 输入:nums = [1,1] 输出:[2] 提示: n == nums.length 1 <= n <= 105 1 <= nums[i] <= n 进阶:你能在不使用额外空间且时间复杂度为 O(n)原创 2022-05-20 10:17:58 · 179 阅读 · 0 评论 -
合并两个有序数组
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。 示例 1: 注意这里的0只是占位符,占nums2的位原创 2022-05-07 10:35:33 · 156 阅读 · 0 评论 -
移动零的算法分析
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums = [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums = [0] 输出: [0] 第一种方法:挪,双指针形式,一个i用来遍历数组,然后记下非0元素,一个j用来作为数组顺序下标,只是把i指向的非0元素,往数组的顺位放 时间复杂度O(n) public void Move(int[] nums原创 2022-05-07 10:28:24 · 349 阅读 · 0 评论 -
两数之和的分析和优化
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例 1: 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 public class SumTwoNumber {原创 2022-03-10 12:18:40 · 114 阅读 · 0 评论 -
爬楼梯的分析和算法,以及优化
递归的解法,复杂度O(n) 这里可以看到f3,f4,被计算了多次,这里可以优化,用字典先存起来,要的时候再从里面拿,不用重复计算 private Dictionary<int, int> saveResult = new Dictionary<int, int>(); public int ClimbStairs(int n) { if (n == 1) return 1; if(n == 2) return 2原创 2022-03-08 12:02:45 · 228 阅读 · 0 评论 -
常用排序查找算法c#(冒泡,插入,选择,希尔,快排,二分,堆,归并)
排序模版: public static bool less(int a,int b) { return a - b < 0; } public static void exch(int[] a,int i,int j) { int t = a[i]; a[i] = a[j]; a[j] = t; } (1)冒泡排序 int[] arr = { 2, 3, 4, 67, 23, 99, 1 };原创 2020-07-13 15:07:27 · 291 阅读 · 0 评论 -
转载:斐波那契数列三种写法:c#
转载:斐波那契数列三种写法:c# 转载:斐波那契数列三种写法:c#转载 2020-07-08 14:59:08 · 185 阅读 · 0 评论