随笔分类 - 数据结构与算法LetterCode
摘要:主要是用双指针思想 public static void reverseString(char[] s) { int length = s.Length; //两个指针一个从第1个,一个从最后一个开始, //两两交换 int left = 0; int right = length - 1; ; w
阅读全文
摘要:我们可以先对数组进行排序,然后再比较。因为排序之后如果有相同的,那么相同的值肯定是挨着的,我们只需要在排序之后两两比较即可 static void Main(string[] args) { int[] nums = { 1, 1, 2,6,5,2,1 }; var flag = containsD
阅读全文
摘要:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 //双指针思路 public static int removeDuplicates(i
阅读全文
摘要:给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 输入: nums = [1,2,3,4,5,6,7], k = 3 输出: [5,6,7,1,2,3,4] 解释:向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3
阅读全文
摘要:买卖股票的最佳时机 给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 示例 1: 输入: pric
阅读全文
摘要:class BinarySearch { /// <summary> /// 查找方法 /// </summary> /// <param name="nums">数据</param> /// <param name="target">目标值</param> /// <returns></retur
阅读全文
摘要:#region 暴⼒递归 时间复杂度是(O(2^n)) /* 这里面存在巨大的浪费 只有 f(n - 1) + f(n - 2) ⼀ 个加法操作,时间为 O(1)。 * 这个算法的时间复杂度为 O(2^n),指数级别,爆炸 * 观察递归树,很明显发现了算法低效的原因:存在⼤量重复计算 * 重叠⼦问题
阅读全文