当前位置: 首页 > news >正文

做网站有哪些好公司奉贤集团公司网站建设

做网站有哪些好公司,奉贤集团公司网站建设,老兵老兵建设集团有限公司,做散热网站目录 19.删除链表的倒数第N个结点 82.删除排序链表中的重复元素Ⅱ 61. 旋转链表 86.分隔链表 146.LRU缓存 19.删除链表的倒数第N个结点 题意#xff1a; 给你一个链表#xff0c;删除链表的倒数第 n 个结点#xff0c;并且返回链表的头结点。 【输入样例】head [1,2,3,4,5…  目录 19.删除链表的倒数第N个结点 82.删除排序链表中的重复元素Ⅱ 61. 旋转链表 86.分隔链表 146.LRU缓存 19.删除链表的倒数第N个结点 题意 给你一个链表删除链表的倒数第 n 个结点并且返回链表的头结点。 【输入样例】head [1,2,3,4,5],n2 【输出样例】[1,2,3,5] 解题思路 1. 双指针p和q初始哈指向头节点 2. 移动q直到p和q之间相隔的元素为n 3. 同时移动p和q直到q指向链表结尾的null 4. p.next p.next.next /*** 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 removeNthFromEnd(ListNode head, int n) {ListNode dummyHead new ListNode(0,head);ListNode p dummyHead;ListNode q head;for(int i0; i n; i){q q.next;}while(q ! null){q q.next;p p.next;}p.next p.next.next;ListNode ans dummyHead.next;return ans;} } 时间 击败了100.00% 内存 击败了64.22% 82.删除排序链表中的重复元素Ⅱ 题意 给定一个已排序的链表的头 head  删除原始链表中所有重复数字的节点只留下不同的数字 。返回 已排序的链表 。 【输入样例】head [1,1,1,2,3] 【输出样例】[2,3] 解题思路 1. 定义一个哑节点指向链表的头节点 2. 指针cur指向哑节点遍历链表 3. 如果cur.next.val cur.next.next.val,将cur.next以及后面拥有相同元素x(xcur.next.val)的节点全部删除 4. 不断移除重复元素直到cur.next是空节点或元素值不等于x /*** 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 head;}ListNode dummy new ListNode(0,head);ListNode cur dummy;while(cur.next ! null cur.next.next ! null){if(cur.next.val cur.next.next.val){int x cur.next.val;while(cur.next ! null cur.next.val x){cur.next cur.next.next;//不断跳过重复值的数}}else{cur cur.next;//继续往下遍历}}return dummy.next;//指向head} } 时间 击败了100.00% 内存 击败了86.54% 61. 旋转链表 题意 给你一个链表的头节点 head 旋转链表将链表每个节点向右移动 k 个位置。 【输入样例】head [1,2,3,4,5],k2 【输出样例】[4,5,1,2,3] 解题思路 1. 定义一个哑节点指向链表的头节点 2. 遍历链表统计链表的长度优化移动次数为k%n; 3. 将原始链表形成闭环并计算count n-k%n,表示从当前节点开始遍历count次可以找到尾节点 4. 不断移动指针直到count 0此时定义一个新节点指向dummy.next作为新链表的头节点dummy.next赋值null实现断链   /*** 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 rotateRight(ListNode head, int k) {if(k 0 || headnull || head.next null){return head;}//一次遍历统计链表的长度n移动k次相当于移动k%n次int n 1;ListNode dummy head;while(dummy.next !null){dummy dummy.next;n;}int count n - k % n;if(count n){return head;}dummy.next head;//形成闭环while(count-- 0){dummy dummy.next;}ListNode result dummy.next;dummy.next null;return result;} } 时间 击败了100.00% 内存 击败了68.97% 86.分隔链表 题意 给你一个链表的头节点 head 和一个特定值 x 请你对链表进行分隔使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 【输入样例】head [1,4,3,2,5,2],x3 【输出样例】[1,2,2,4,3,5] 解题思路 1.借助两个链表一个存储小于x的节点一个存储大于等于x的节点之后将两个链表进行拼接即可。 /*** 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 partition(ListNode head, int x) {ListNode minNext new ListNode(0);ListNode minhead minNext;ListNode maxNext new ListNode(0);ListNode maxhead maxNext;while(head!null){if(head.val x){minNext.next head;minNext minNext.next;}else{maxNext.next head;maxNext maxNext.next;}head head.next;}maxNext.next null;minNext.next maxhead.next;return minhead.next;} } 时间 击败了100.00% 内存 击败了20.49% 146.LRU缓存 题意 请你设计并实现一个满足  LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类 LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中则返回关键字的值否则返回 -1 。void put(int key, int value) 如果关键字 key 已经存在则变更其数据值 value 如果不存在则向缓存中插入该组 key-value 。如果插入操作导致关键字数量超过 capacity 则应该 逐出 最久未使用的关键字。 函数 get 和 put 必须以 O(1) 的平均时间复杂度运行。 【输入样例】 [LRUCache, put, put, get, put, get, put, get, get, get] [[2], [1, 1], [2, 2], [1], [3, 3], [2], [4, 4], [1], [3], [4]] 【输出样例】 [null, null, null, 1, null, -1, null, -1, 3, 4] 解释 LRUCache lRUCache new LRUCache(2); lRUCache.put(1, 1); // 缓存是 {11} lRUCache.put(2, 2); // 缓存是 {11, 22} lRUCache.get(1); // 返回 1 lRUCache.put(3, 3); // 该操作会使得关键字 2 作废缓存是 {11, 33} lRUCache.get(2); // 返回 -1 (未找到) lRUCache.put(4, 4); // 该操作会使得关键字 1 作废缓存是 {44, 33} lRUCache.get(1); // 返回 -1 (未找到) lRUCache.get(3); // 返回 3 lRUCache.get(4); // 返回 4 解题思路哈希表双向链表 1. 双向链表按照被使用的顺序存储键值对最靠近头部的键值对是最近使用的最靠近尾部的键值对是最久未使用的。 2. 哈希表缓存数据的键映射到其在双向链表中的位置 3. 使用哈希表进行定位找出缓存项在双向链表中的位置并将其移动到双向链表的头部如果key不存着哈希表中则返回-1或者在链表的头部新建一个节点。 public class LRUCache {private MapInteger,DLinkedNode cache new HashMapInteger,DLinkedNode();private int size;private int capacity;private DLinkedNode head,tail;public LRUCache(int capacity) {this.size 0;this.capacity capacity;head new DLinkedNode();tail new DLinkedNode();head.next tail;tail.prev head;}public int get(int key) {DLinkedNode node cache.get(key);if(node null){//链表中不存在此值return -1;}//存在将其移动到双向链表的头部moveToHead(node);return node.value;}public void put(int key, int value) {DLinkedNode node cache.get(key);if(node null){//如果key不存着要创建一个新节点//需要判断插入之后长度是否会超过容量DLinkedNode newNode new DLinkedNode(key,value);cache.put(key,newNode);addToHead(newNode);size;//每加进来一个元素sizeif(size capacity){//删除尾部节点和哈希表中的对应项DLinkedNode tail removeTail();cache.remove(tail.key);--size;}}else{//key存在哈希表定位修改value移到头部node.value value;moveToHead(node);}}private void addToHead(DLinkedNode node){//添加到双向链表头部node.prev head;node.next head.next;head.next.prev node;head.next node;}private void removeNode(DLinkedNode node){//从当前位置移走node.prev.next node.next;node.next.prev node.prev;}private void moveToHead(DLinkedNode node){removeNode(node);addToHead(node);}private DLinkedNode removeTail(){DLinkedNode node tail.prev;removeNode(node);return node;} }class DLinkedNode{int key;int value;DLinkedNode prev;DLinkedNode next;public DLinkedNode(){}public DLinkedNode(int key, int value){this.key key;this.value value;} } /*** Your LRUCache object will be instantiated and called as such:* LRUCache obj new LRUCache(capacity);* int param_1 obj.get(key);* obj.put(key,value);*/ 时间 击败了23.27% 内存 击败了97.38%
http://www.yutouwan.com/news/390225/

相关文章:

  • 泾川县门户网站留言如何使用阿里云做网站
  • 有没有人通过网站建设卖东西的dedecms 网站导航
  • 自己做的网站加载很难网站大屏轮播图效果怎么做的
  • 南昌网站免费制作WordPress邮箱收集插件
  • 个人公益网站怎么制作用微软雅黑做网站可以吗
  • 网站更换空间后排名消失 首页被k两学一做注册网站吗
  • 福州专业网站建设价格修改wordpress注册页
  • 网页设计服务公司百度快照如何优化
  • 哪个网站学seo是免费的武陟做网站
  • 锡盟建设工程造价工程管理网站wordpress 图片变形
  • 12380网站建设wordpress 小程序 标签
  • 顺企网网站建设长春市网络公司
  • 大学生网站建设申报书法国新增确诊病例
  • 新乡做网站公司电话口碑好的邵阳网站建设
  • 专业营销型网站定制wordpress 验证码访问
  • 网站是用php还是asp 怎么区别杭州网站推广优化公司
  • 建设银行信用卡网站中小工厂erp管理系统
  • 陕西高端品牌网站建设营销网络分布图
  • 合肥营销型网站建设wordpress切换成中文
  • c 网站开发 简单例子手机网站免费优化
  • 网站做地区定位跳转公司域名邮箱怎么注册
  • 唐山网站建设设计网址导航推广
  • 荆州网站设计枞阳做网站
  • 甘肃崇信县门户网站杭州app开发公司都集中在哪里
  • 邮箱类网站模板电子网站模板
  • 丹徒区建设局网站wordpress 类似
  • 买过域名之前就可以做网站了吗?中国新闻最新消息简要
  • wordpress编辑器器更换公司网站优化推广
  • 网站开发得花多少钱网站建设yu
  • ui设计师与网站编辑有什么关系引流客户的最快方法是什么