力扣labuladong——一刷day18

这篇具有很好参考价值的文章主要介绍了力扣labuladong——一刷day18。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

双指针技巧处理数组问题,常用的是左右指针,和快慢指针文章来源地址https://www.toymoban.com/news/detail-739289.html


一、力扣26. 删除有序数组中的重复项

class Solution {
    public int removeDuplicates(int[] nums) {
        int i, j;
        for(i = 0,j = 0; j < nums.length;){
            if(nums[i] == nums[j]){
                j ++;
            }else{
                nums[++i] = nums[j++];
            }
        }
        return i + 1;
    }
}

二、力扣83. 删除排序链表中的重复元素

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if(head == null)return null;
        ListNode pre = head, p = head;
        while(p != null){
            if(p.val == pre.val){
                p = p.next;
            }else{
                pre.next = p;
                pre = pre.next;
                p = p.next;
            }
        }
        pre.next = null;
        return head;
    }
}

三、力扣27. 移除元素

class Solution {
    public int removeElement(int[] nums, int val) {
        if(nums.length == 0){
            return 0;
        }
        int i , j;
        for(i = 0, j = 0; j < nums.length;){
            if(nums[j] == val){
                j ++;
            }else{
                nums[i++] = nums[j++];
            }
        }
        return i;
    }
}

四、力扣283. 移动零

class Solution {
    public void moveZeroes(int[] nums) {
        for(int i = 0,j = 0; j < nums.length;){
            if(nums[j] == 0){
                j ++;
            }else{
                int temp = nums[i];
                nums[i] = nums[j];
                nums[j] = temp;
                i ++;
                j ++;
            }
        }
    }
}

五、力扣167. 两数之和 II - 输入有序数组

class Solution {
    public int[] twoSum(int[] numbers, int target) {
        int[] res = new int[2];
        for(int left = 0, right = numbers.length-1; left < right;){
            int cur = numbers[left] + numbers[right];
            System.out.println(cur);
            if(cur > target){
                right --;
            }else if(cur < target){
                left ++;
            }else{
                res[0] = left+1;
                res[1] = right+1;
                break;
            }
        }
        return res;
    }
}

六、力扣344. 反转字符串

class Solution {
    public void reverseString(char[] s) {
        for(int i = 0, j = s.length-1; i < j; i ++,j--){
            char temp = s[i];
            s[i] = s[j];
            s[j] = temp;
        }
    }
}

七、力扣最长回文子串

class Solution {
    String res;
    int count = 1;
    public String longestPalindrome(String s) {
        res = s.substring(0,1);
        for(int i = 0; i <s.length(); i ++){
            fun(s,i,i);
            if(i + 1 < s.length()){
                fun(s,i , i + 1);
            }
        }
        return res;
    }
    public void fun(String s, int left, int right){
        while(left >=0 && right < s.length()){
            if(s.charAt(left) == s.charAt(right)){
                left --;
                right ++;
            }else{
                break;
            }
        }
        left ++;
        right --;
        if((right - left + 1) > count){
            count = right - left + 1;
            res = s.substring(left,right+1);
        }
    }
}

到了这里,关于力扣labuladong——一刷day18的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 力扣labuladong一刷day59天动态规划

    力扣labuladong一刷day59天动态规划 一、509. 斐波那契数 题目链接:https://leetcode.cn/problems/fibonacci-number/description/ 思路:这是非常典型的一道题,下面是优化过的代码,a,b就是dp数组,因为每计算一个值,需要前两个值,这个a,b就是用来记录前两个值,避免重复计算,递推公式便

    2024年01月21日
    浏览(48)
  • 力扣labuladong一刷day63天单词拆分

    力扣labuladong一刷day63天单词拆分 一、139. 单词拆分 题目链接:https://leetcode.cn/problems/word-break/description/ 思路:s是否能被拆分成字典中的单词,单词数量是不限的,故是完全背包问题,不限数量的单词是否能组成字符串s,可以看的出来,并不是要求你长度相等就可以,还得有

    2024年01月21日
    浏览(35)
  • 力扣labuladong一刷day39天最近公共祖先问题

    力扣labuladong一刷day39天最近公共祖先问题 一、236. 二叉树的最近公共祖先 题目链接:https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/ 思路:寻找最近公共祖先,在前序的位置判断,如果找到一个就返回,然后在后序的位置收尾,即左右子树都遍历过了,如果都找到的话

    2024年02月04日
    浏览(37)
  • 力扣labuladong一刷day40天计算完全二叉树节点数

    力扣labuladong一刷day40天计算完全二叉树节点数 一、222. 完全二叉树的节点个数 题目链接:https://leetcode.cn/problems/count-complete-tree-nodes/ 思路:计算完全二叉树直接全遍历的话很浪费时间,但是可以利用完全二叉树的特性来解题, 每到一个节点我们就计算它的left = node.left深度,

    2024年02月04日
    浏览(41)
  • 算法训练day18Leetcode找树左下角的值112路径总和106从中序和后续遍历构造二叉树

    找出深度最大的叶子节点,左遍历在前 我们来分析一下题目:在树的最后一行找到最左边的值。 首先要是最后一行,然后是最左边的值。 如果使用递归法,如何判断是最后一行呢,其实就是深度最大的叶子节点一定是最后一行。 如果对二叉树深度和高度还有点疑惑的话,请

    2024年01月21日
    浏览(50)
  • 18. 四数之和(力扣LeetCode)

    给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复): 0 = a, b, c, d n a、b、c 和 d 互不相同 nums[a] + nums[b] + nums[c] + nums[d] == target 你

    2024年02月19日
    浏览(44)
  • LeetCode75——Day18

    1732. Find the Highest Altitude There is a biker going on a road trip. The road trip consists of n + 1 points at different altitudes. The biker starts his trip on point 0 with altitude equal 0. You are given an integer array gain of length n where gain[i] is the net gain in altitude between points i​​​​​​ and i + 1 for all (0 = i n). Return the h

    2024年02月08日
    浏览(41)
  • day19【LeetCode力扣】160.相交链表

    1.题目描述 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交**:** 题目数据 保证 整个链式结构中不存在环。 注意 ,函数返回结果后,链表必须 保持其原始结构

    2024年01月18日
    浏览(38)
  • 力扣python刷题day03|LeetCode203、707、206

    题目 题目链接:203:移除链表元素 方法一: 知识点: 设置虚拟头结点 题目 来源:力扣(LeetCode) 提示: 0 = index, val = 1000 请不要使用内置的 LinkedList 库。 调用 get、addAtHead、addAtTail、addAtIndex 和 deleteAtIndex 的次数不超过 2000 。 方法一:单链表法 方法二:双链表法 (有点难

    2024年02月16日
    浏览(41)
  • 力扣python刷题day04|LeetCode24、19、160、142

    题目 来源:24:两两交换链表中的节点 建议使用虚拟头结点,这样会方便很多,要不然每次针对头结点(没有前一个指针指向头结点),还要单独处理。 接下来就是交换相邻两个元素了,此时一定要画图,不画图,操作多个指针很容易乱,而且要操作的先后顺序 方法: 题目

    2024年02月16日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包