IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【每日面经】4.3 -> 正文阅读

[数据结构与算法]【每日面经】4.3

算法题:设计LRU缓存

package EveryDay.Simulation;

import org.w3c.dom.NodeList;

import java.util.HashMap;
import java.util.List;

public class LRU {
    public static void main(String[] args) {
    }
    static void solution(){
    }
    static class Node{
        Node pre ;
        Node next ;
        int value;
        int key;
        Node(int value){
            this.value = value;
        }
        Node(int key , int value){
            this.key = key;
            this.value = value;
        }
    }
    static class MyList{
        Node head = null;
        Node tail = null;
        //编写三个方法分别是
        //添加尾节点
        void add(Node node){
            if(node == null) return;
            if(head == null){//链表为空
                head = node;
                tail = node;
            }else{
                tail.next = node;
                node.pre = tail;
                tail = node;
            }
        }
        //删去头节点
        Node poll(){
            if(head == null)return null;
            if(head == tail)return head;
            Node tmp = head;
            head = head.next;
            head.pre = null;
            tmp.next = null;
            return tmp;
        }
        //更新某个节点(要移动到末尾)
        void moveToTail(Node node){
            if(node == tail)return;
            if(node == head){
                head = head.next;
                head.pre = null;
            }else{
                node.pre.next = node.next;
                node.next.pre = node.pre;
            }
            node.pre = tail;
            node.next = null;
            tail.next = node;
            tail = node;
        }
    }
    static class MyCache{
        HashMap<Integer , Node> map = new HashMap<>();
        MyList list  = new MyList();
        int capacity;
        MyCache(int cap){
            this.capacity = cap;
        }
        //新增操作 更新操作
        void set(int key , int value){
            if(map.containsKey(key)){
                //更新
                map.get(key).value = value;
                list.moveToTail(map.get(key));
            }else{
                //新增
                Node node = new Node(key, value);
                map.put(key , node);
                list.add(node);
                if(map.size() > capacity){
                    //新增时缓存满了
                    map.remove(list.poll());
                }
            }
        }


        //读取操作
        Integer get(int key){
            if(map.containsKey(key)){
                Node tmp = map.get(key);
                list.moveToTail(tmp);
                return tmp.value;
            }
            return null;
        }



    }
}

算法题:最小的k个数(topk问题)

参考k神的代码,思想是使用快排,这是最优解:因为题中仅仅只说找出就行,那么tmp左边肯定是小于的数,若tmp的下标就是k那么说明tmp右边的k个数就是最小的k个数,Arrays.copyof就行。
https://leetcode-cn.com/leetbook/read/illustration-of-algorithm/ohwddh/

算法题:寻找第k大

算法题:连续子数组的最大和

算法题:最长无重复子串

算法题:每k个节点反转链表

算法题:删除链表倒数第n个节点

算法题:岛屿数量

算法题:N皇后问题

参考题解:
https://leetcode-cn.com/problems/n-queens/solution/gen-ju-di-46-ti-quan-pai-lie-de-hui-su-suan-fa-si-/
了解n皇后的解题思想即可,面试出现频率不高。
n皇后的经典在于使用回溯进行剪枝,最终找到答案,其实上这是一个树的深度遍历
在这里插入图片描述

n皇后扩展:

  1. 解数独(和n皇后的思路是一样的穷举并进行回溯剪枝)
  2. 24点游戏(穷举后看看有没有优化)
  3. 扫雷游戏同样是需要标记(目的是为了剪枝),但是不需要回溯
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:36:03  更:2022-04-04 12:37:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 9:51:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码