【LeetCode刷题-双指针】--259.较小的三数之和
259.较小的三数之和 方法:排序+双指针 class Solution { public int threeSumSmaller(int[] nums, int target) { Arrays.sort(nums); int k = 0; for(int i = 0;i<nums.length;i++){ int start = i + 1,end = nums.length - 1; while(start ...
leetcode刷题日记:168. Excel Sheet Column Title(Excel表列名称)
我不知道你看到这一道题目有什么感觉,我先告诉你我有什么感觉,在此之前我再给你写一组有相同模式的数字。 你先告诉我你有什么感觉,有没有感觉,没有感觉的话,那我们就来更深的了解一下: 我们分析最后一个,因为这些模式都是一样的。 可以看出 这一组数字中字符集为 { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 } \{1, 2, 3, 4, 5, 6, 7, 8, 9\} {1,2,3,4,5,6,...
【LeetCode刷题-滑动窗口】--340.至多包含K个不同字符的最长子串
340.至多包含K个不同字符的最长子串 class Solution { public int lengthOfLongestSubstringKDistinct(String s, int k) { int len = s.length(); if(len <= k){ return len; } //滑动窗口的左右指针 int left = 0,right = 0; //定义一个哈希映射 HashMap<Cha...
leetcode刷题日记:160. Intersection of Two Linked Lists(相交链表)
给出两个单链表的头结点headA与headB,让我们找出两个链表相接的起始节点,如果两个链表不存在相交结点返回null。 我们就先假设存在这样两个链表,链表1与链表2,假设链表1的长度为 L 1 L_1 L1和 L 2 L_2 L2,假设对于两个链表,从相交的结点向后数长度为 L 1 , 2 L_{1,2} L1,2,则在相交结点之前链表1的长度未 L 1 − L 1 , 2 L_1-L_{1, 2} L1...
leetcode刷题日记:125. Valid Palindrome(验证回文串)和136. Single Number(只出现一次的数字)
125.Valid Palindrome(验证回文串) 验证一个串之前我们需要对字符串进行处理将空格逗号什么的去掉,然后进行比较,比较的顺序如图所示: 在比较途中如果出现比较结果为假,就提前结束比较,此时我们可以判断这一个串不是回文串,反之如果没有提前结束,那就是回文串。 代码如下: bool isPalindrome(char* s) { int r = strlen(s); char *x = (char *)...
【LeetCode刷题-滑动窗口】--1658.将x减到0的最小操作数
1658.将x减到0的最小操作数 思路与算法: 根据题目描述,在每一次操作中,可以移除数组nums最左边和最右边的元素,因此,在所有的操作完成后,数组nums的一个前缀以及一个后缀被移除,并且它们的和恰好为x,前缀 以及后缀可以为空 记数组的长度为n,可以用left和right分别表示选择的前缀以及后缀的边界,如果left=-1,表示选择了空前缀;如果right=n表示我们选择了空后缀 由于数组nums中的元素均为...
【LeetCode刷题笔记】滑动窗口
992. K 个不同整数的子数组 解题思路: 滑动窗口 , 题目问题转化为: 求 「最多存在 K 个不同整数的子数组的个数」 与 「最多存在 K - 1 个不同整数的子数组的个数」 之差, 就是题目所求的 「恰好存在 K 个不同整数的子数组的个数」 , 最终问题就变成求解滑动窗口内,以 R 为右边界的、包含 k 个不同整数 的子数组个数,它其实就是窗口区间的长度 R - L &# ...
leetcode刷题日记:121. Best Time to Buy and Sell Stock( 买卖股票的最佳时机)
题目给了我们一组数prices,其中prices[i]表示第i天的股票价格,需要我们求出买卖股票所能获得的最大收益。 我们的第一想法就是从算出每一种买卖股票的情况然后求出里面的最大值,这样我们就能得到最大收益是多少,但是这种情况过于复杂他需要考虑前一天和后面所有天的情况,这无疑是复杂的,因为我们可以大致算出时间复杂度是 O ( n 3 ) O(n^3) O(n3),这在问题规模较小时还可以接受一旦问题规模上升,所需...
【LeetCode刷题-滑动窗口】-- 643.子数组最大平均数I
643.子数组最大平均数I 方法:滑动窗口 class Solution { public double findMaxAverage(int[] nums, int k) { int n = nums.length; int winSum = 0; //先求出第一个窗口的和 for(int i = 0;i<k;i++){ winSum += nums[i]; } //通过遍历求出除了第一窗口的和 int res ...
【LeetCode刷题-二分查找】-- 702.搜索长度未知的有序数组
702.搜索长度未知的有序数组 注意:数组是已经排好序的,因此可以将时间复杂度控制在对数级别,意味着需要将问题分解为两个子问题,这两个子问题都应该在对数级别的时间内完成: 定义搜索限制,即搜索的左右边界在定义的边界内进行二分查找 选取第一个和第二个索引,即0和1,作为左右边界,如果目标值不在这两个元素之中,那么它就在边界之外,即在右边,意味着左边界可以向右移动,而右边界需要扩展,为了保持对数时间复杂度,让right...