
算法
Jackyyl729
这个作者很懒,什么都没留下…
展开
-
209.长度最小的子数组-leetcode-java
滑动窗口(双指针)class Solution { public int minSubArrayLen(int target, int[] nums) { int left = 0; int right = 0; int sum = 0; int min = Integer.MAX_VALUE; //外循环,控制left while (right < nums.length) { sum += nums[right++]; //判断是否总和大于原创 2021-06-04 11:06:18 · 220 阅读 · 0 评论 -
206.反转链表-leetcode
class Solution { public ListNode reverseList(ListNode head) { if(head==null||head.next==null) return head; //neaHead先指向空 ListNode newHead = null; //遍历head while (head!=null){ //每次遍历提取出head链表第一个,用temp存储第二个的地址。然后再head = temp; //使链表后一原创 2021-06-04 10:12:13 · 161 阅读 · 0 评论 -
15.三数之和-leetcode
双指针解题步骤:1.首先判断数组长度,<3直接返回空ans。2.对数组进行排序3.排序后判断nums[i]是否大于零,大于零直接返回ans(排序之后,后面的数值都大于零,sum一定也大于零不满足要求)。4.创建左右指针分别指向nums[i]的右边和数组的最后一个。5.如果nums[i] + nums[left] + nums[right]==0,添加进ans,然后移动letf和right,使left和right不等于现在的值,因为三个数确定了nums[i]和任意的一个数,另一个也就固定了,原创 2021-06-03 10:55:54 · 158 阅读 · 1 评论 -
1.两数之和-leetcode
一,暴力求值,两层for循环class Solution { public int[] twoSum(int[] nums, int target) { int len = nums.length - 1; for (int i = 0; i <= len; i++) { for (int j = i + 1; j <= len; j++) { if (target == (nums[j] + nums[i])) { return new int[原创 2021-06-03 09:55:12 · 105 阅读 · 0 评论 -
递归与回溯区别(附leetcode相关题)
一.递归是一种算法结构:为了描述问题的某一状态,必须用到该状态的上一状态,而描述上一状态,又必须用到上一状态的上一状态……这种用自已来定义自己的方法,称为递归定义。形式如 f(n) = n*f(n-1), if n=0,f(n)=1.二.回溯是一种算法思想,可以用递归实现。从问题的某一种可能出发, 搜索从这种情况出发所能达到的所有可能, 当这一条路走到” 尽头 “的时候, 再倒回出发点, 从另一个可能出发, 继续搜索. 这种不断” 回溯 “寻找解的方法, 称作” 回溯法 “。三.leetcode递归原创 2020-11-08 21:50:29 · 423 阅读 · 1 评论