回顾前面刷过的算法(3)
创始人
2024-11-14 19:34:37
0

今天简单描述了一下算法思路并手敲了一下下面三个算法,算法题目是刷不完的,但是解题思想是有限的,我们需要学习的就是解题思想,代码展示如下

    //打家劫舍     //思路: 定义一个dp[i],表示偷前 i - 1 个房屋能偷到的最大金额     //则有递推关系式 dp[i] = max(dp[i - 1], dp[i - 2] + nums[i - 1])     public int rob(int[] nums) {         if (nums == null || nums.length == 0) {             return 0;         }         int pre = 0, curr = nums[0];         for (int i = 2; i <= nums.length; i++) {             int temp = Math.max(curr, pre + nums[i - 1]);             pre = curr;             curr = temp;         }         return curr;     }       //多数元素     //思路: 方法有很多,这里采用的是每次消除两个不同元素,因为多数元素的数量是大于总数的一半     //所以消除到最后,剩余的元素一定是多数元素     public int majorityElement(int[] nums) {         if (nums == null || nums.length == 0) {             return -1;         }         int count = 0, currentNum = -1;         for (int num : nums) {             if (count == 0) {                 currentNum = num;                 count++;             } else {                 if (num == currentNum) {                     count++;                 } else {                     count--;                 }             }         }         return currentNum;     }             //LRU缓存     //思路: 采用双链表+HashMap实现,hashMap存储key与结点的对应关系便于查找,     //双链表存储结点便于增删     class LRUCache {         private int size;         private final int capacity;         private final DLinkedNode head;         private final DLinkedNode tail;         private final Map cache = new HashMap<>();          class DLinkedNode {             int key;             int value;             DLinkedNode next;             DLinkedNode pre;              public DLinkedNode() {             }              public DLinkedNode(int _key, int _value) {                 key = _key;                 value = _value;             }         }          public LRUCache(int capacity) {             this.size = 0;             this.capacity = capacity;             head = new DLinkedNode();             tail = new DLinkedNode();             head.next = tail;             tail.pre = 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) {                 DLinkedNode newNode = new DLinkedNode(key, value);                 cache.put(key, newNode);                 addToHead(newNode);                 size++;                 if (size > capacity) {                     DLinkedNode temp = removeTail();                     cache.remove(temp.key);                     size--;                 }             } else {                 node.value = value;                 moveToHead(node);             }         }          private void moveToHead(DLinkedNode node) {             removeNode(node);             addToHead(node);         }          private void removeNode(DLinkedNode node) {             node.next.pre = node.pre;             node.pre.next = node.next;         }          private void addToHead(DLinkedNode node) {             node.next = head.next;             node.pre = head;             head.next.pre = node;             head.next = node;         }          private DLinkedNode removeTail() {             DLinkedNode temp = tail.pre;             removeNode(temp);             return temp;         }     }

相关内容

热门资讯

透视数据!菠萝德州透视脚本,p... 透视数据!菠萝德州透视脚本,pokerworld辅助器,解密教程(有挂黑科技);小薇(透视辅助)致您...
透视中牌率!aapoker能控... 透视中牌率!aapoker能控制牌吗,aapoker透视方法,教你教程(有挂攻略)1、aapoker...
透视玄学!wepoker私人局... 透视玄学!wepoker私人局俱乐部怎么进,wepoker怎么拿到好牌(都是真的是有挂)1.wepo...
透视透视!hhpoker德州机... 透视透视!hhpoker德州机器人,hhpoker怎么破解,wpk教程(有挂详情)所有人都在同一条线...
透视辅助!佛手大菠萝有挂吗,红... 透视辅助!佛手大菠萝有挂吗,红龙poker有辅助吗,切实教程(有挂辅助);1、佛手大菠萝有挂吗系统规...
透视脚本!we poker辅助... 透视脚本!we poker辅助器下载,wepoker有辅助工具吗(其实存在有挂);1、金币登录送、破...
透视透视!aapoker透视怎... 透视透视!aapoker透视怎么用,aapoker公共底牌,攻略教程(有挂教程);1、aapoker...
透视透视!hhpoker怎么破... 透视透视!hhpoker怎么破解,hhpoker有透视功能吗,详细教程(有挂攻略);1、游戏颠覆性的...
透视了解!poker worl... 透视了解!poker world辅助器,扑克之星辅助,必胜教程(有挂攻略)1、poker world...
透视能赢!wepoker免费透... 透视能赢!wepoker免费透视,wepoker软件辅助程序(竟然是有挂)1、wepoker软件辅助...