Leetcode做题记录----2

server/2025/3/14 1:12:05/

1、两数之和

思路:

1、不能使用相同元素,可以想到哈希表,,C#中可以通过字典建立当前值和下标的关系

2、显然,依次判断数组中的每个数即可

3、定义other == target -  num[ i ] 这个other就是我们用于在字典中进行寻找的另一个元素 

    public class Solution{public int[] TwoSum(int[] nums, int target){//Array.Sort(nums);//for (int i = 0; i < nums.Length; i++)//{//    for (int j = i + 1; j < nums.Length; j++)//    {//        if (nums[i] + nums[j] == target)//        {//            return new int[] { i, j };//        }//    }//}//return new int[0];//利用字典Dictionary<int,int> dic = new Dictionary<int,int>();for (int i = 0; i < nums.Length; i++){//目标元素 我们设目标元素为b 则另一个元素为aint other = target - nums[i];//如果找到目标元素 直接返回目标元素的位置 和当前的第一个元素的位置if (dic.ContainsKey(other)){return new int[]{dic[other],i};}//如果当前字典中没有第一个元素 即a 就将它添加至字典中if (!dic.ContainsKey(nums[i])){dic.Add(nums[i],i);}}return new int[0];}}

注释的部分是用双重循环写的,时间复杂度会高,所以不用,本体应该也可以使用双指针的方法。

1929、数组串联

思路:

最简单的方式就是,直接创建一个新的数组,为原数组的二倍,然后用一个for循环直接加进去就行。

代码: 

        public class Solution{public int[] GetConcatenation(int[] nums){int[] ans = new int[nums.Length*2];for (int i = 0; i < nums.Length; i++){ans[i] = nums[i];ans[i + nums.Length] = nums[i];}return ans;}}

206、反转链表 

思路:

1、本体给的是一个单向链表,也就是只存值和指向下一个位置,所以本体思路将指向性反转即:从1->2->3->4->5到 1<-2-<3-<4-<5  最后返回头结点5就行了

2.如此我们可以想到先把当前节点的下一个(current.next)拿出来先存为next,然后这个位置是不是就可以随便处理了,于是乎,我们就设置一个前置指针pre用来移位,于是继续的操作就是将pre =current,在这步之前得将pre的值先用了,不然就会因为修改而混乱,即current.next = pre;,最开始时pre可以设置为null,然后就是移动到下一个节点

代码:

    public class ListNode{public int val;public ListNode next;public ListNode(int val = 0, ListNode next = null){this.val = val;this.next = next;}}public class Solution{public ListNode ReverseList(ListNode head){ListNode pre = null;ListNode current = head;while (current != null){ListNode next = current.next;current.next = pre;pre = current;current = next;}return pre;}}

237、删除链表中节点的节点

思路:

1、链表中怎么删除节点?很简单将当前节点的下一个跳过下一个不就删除了下一个节点吗,即current.next = current.next.next;

2、仔细读题可以发现,题目要求的是 删除当前节点,那很简单了,就是按照1所说的换节点和值

public class Solution {public void DeleteNode(ListNode node) {node.val = node.next.val;node.next = node.next.next;}
}

19删除链表中的倒数第N个节点

思路:

1、可以先确定倒数第N个节点的前一个节点,然后将这个节点的next设置为倒数第N节点的下一个节点即可,那么怎么寻找呢,可以用个计数器进行寻找,但是这里可以用双指针定位的方式,即我先将一个快指针移动N+1次,然后在同时移动慢指针和快指针,那么此时两个指针同时移动,必然当快指针移动到最后一个时候,慢指针将会指向的是倒数N+1个位置,即我们寻找的倒数第N个节点的前一个。

2、在整个过程中,我们必须得维护初始的头结点,不然后面就找不到了,可以用虚拟节点的方式,最开始将虚拟节点的下一个指向头结点,就像一个路牌指向了一条公路,在公路上头结点这辆汽车将会奔驰,初始将快慢指针都赋予虚拟节点。

代码:

    public class Solution{public ListNode RemoveNthFromEnd(ListNode head, int n){ListNode dummy = new ListNode();dummy.next = head;ListNode slow = dummy;//用于找到倒数N+1ListNode fast = dummy;//用于定位for (int i = 0; i <= n; i++){//不断跑跑跑fast = fast.next;}while (fast != null){fast = fast.next;slow = slow.next;}slow.next = slow.next.next;return dummy.next;}}


http://www.ppmy.cn/server/174759.html

相关文章

贪心算法(5)(java)k次取反后最大化的数组和

题目&#xff1a;给定一个整数数组 nums 和一个整数 k&#xff0c;你可以进行最多 k 次取反操作。每次操作可以选择数组中的一个元素并将其取反&#xff08;即 x 变为 -x&#xff09;。最终返回经过 k 次取反操作后&#xff0c;数组可能的最大总和。 解法&#xff1a;分情况讨…

4个 Vue 路由实现的过程

大家好&#xff0c;我是大澈&#xff01;一个喜欢结交朋友、喜欢编程技术和科技前沿的老程序员&#x1f468;&#x1f3fb;‍&#x1f4bb;&#xff0c;关注我&#xff0c;科技未来或许我能帮到你&#xff01; Vue 路由相信朋友们用的都很熟了&#xff0c;但是你知道 Vue 路由…

具备多种功能的PDF文件处理工具

软件介绍 在日常办公和学习场景中&#xff0c;PDF文件使用极为频繁&#xff0c;而一款功能强大的PDF编辑软件能大幅提升处理效率。 今天要介绍的Adobe Acrobat Pro DC 2024.005.20414&#xff0c;就具备像编辑Word文档一样便捷编辑PDF的能力。 PDF文档在学习和工作中广泛应用…

江科大51单片机笔记【15】直流电机驱动(PWM)

写在前言 此为博主自学江科大51单片机&#xff08;B站&#xff09;的笔记&#xff0c;方便后续重温知识 在后面的章节中&#xff0c;为了防止篇幅过长和易于查找&#xff0c;我把一个小节分成两部分来发&#xff0c;上章节主要是关于本节课的硬件介绍、电路图、原理图等理论…

【微服务】Nacos 配置动态刷新(简易版)(附配置)

文章目录 1、实现方法2、配置依赖 yaml3、验证效果 1、实现方法 环境&#xff1a;Nacos、Java、SpringBoot等 主要是在boostrap.yaml中的data-id属性下配置refresh:true来实现动态更新 2、配置依赖 yaml 具体的版本参考官方的说明&#xff1a;官方版本说明 <!--读取boo…

Java常见面试技术点整理讲解——数据库相关(整理中,未完成)

主要整理数据库方面的技术及原理。涉及数据库的事务,范式,索引,结构,视图等问题。 以及比对各个数据库版本之间的差异,存储引擎的差异,最新数据库的使用等。 一:事务 事务是指由一系列数据库操作组成的一个完整的逻辑过程,不可拆分。其中,ACID是DBMS在写入或更新资料…

The 18th Northeast Collegiate Programming Contest H

题目连接 最大值最小&#xff0c;对于套路化的题目来说一般先想二分?(不行试试DP?再试试网络流?),我们先试着二分答案 m i d mid mid&#xff0c;考虑如何检查, 题目说可以选择任一点为根&#xff0c;不好考虑我们不妨先选择1作为根节点 因为要让两个点的距离都尽可能的小,…

Qt C++ 实际开发中宏编译的运用

Qt C 实际开发中宏编译的运用 在Qt C开发中&#xff0c;宏编译&#xff08;Preprocessor Macros&#xff09;是一种强大的工具&#xff0c;用于在编译时根据条件生成不同的代码。宏编译可以用于跨平台开发、调试、功能开关等场景。以下将详细介绍宏编译在Qt C实际开发中的应用…