回顾前面刷过的算法(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;         }     }

相关内容

热门资讯

绝活儿辅助!广西老友玩老是输怎... 绝活儿辅助!广西老友玩老是输怎么办(辅助挂)都是真的有辅助app(讲解有挂)在进入广西老友玩老是输怎...
法门辅助!福建13水插件(辅助... 法门辅助!福建13水插件(辅助挂)一贯是有辅助技巧(有挂技术)1、许多玩家不知道福建13水插件辅助怎...
办法辅助!潮友会app下载官方... 办法辅助!潮友会app下载官方辅助器(辅助挂)真是真的是有辅助app(有挂教程)该软件可以轻松地帮助...
妙招辅助!邯郸胡乐挂辅助(辅助... 妙招辅助!邯郸胡乐挂辅助(辅助挂)好像存在有辅助插件(有挂方略)1、上手简单,内置详细流程视频教学,...
教程书辅助!乐酷辅助(辅助挂)... 教程书辅助!乐酷辅助(辅助挂)其实存在有辅助脚本(有挂细节)乐酷辅助能透视中分为三种模型:乐酷辅助模...
学习辅助!决战卡五星辅助(辅助... 学习辅助!决战卡五星辅助(辅助挂)本来真的是有辅助软件(有人有挂)学习辅助!决战卡五星辅助(辅助挂)...
绝活辅助!边锋嘉兴麻将辅助器(... 绝活辅助!边锋嘉兴麻将辅助器(辅助挂)真是真的有辅助神器(新版有挂)1、边锋嘉兴麻将辅助器公共底牌简...
举措辅助!枫叶辅助器(辅助挂)... 举措辅助!枫叶辅助器(辅助挂)本来存在有辅助技巧(竟然有挂)1、下载好枫叶辅助器正确养号方法之后点击...
讲义辅助!点我达辅助(辅助挂)... 讲义辅助!点我达辅助(辅助挂)一直存在有辅助技巧(有人有挂)1、点我达辅助辅助器安装包、点我达辅助辅...
模块辅助!威信茶馆有挂的吗(辅... 模块辅助!威信茶馆有挂的吗(辅助挂)一直真的是有辅助脚本(揭秘有挂)1、玩家可以在威信茶馆有挂的吗线...