
算法
Lokey_w
日拱一卒无有尽,功不唐捐终入海
展开
-
最短击中气球路径
问题 假设有不同颜色的气球用数字标识 n = 5, [1,2,3,4,5] 玩家可以用枪打破气球序列为 m = 11,[1,2,2,3,4,5,2,2,0,2,1],0为未击中 如果连续击中所有不同颜色气球,可以获得奖品,求最短获奖路径 示例 m = 11,n = 5,arr = [1,2,2,3,4,5,2,1,0,2,1] 有五种气球,玩家一共开了11枪 有效序列[1,2,2,3,4,5]长度为6 有效序列[3,4,5,2,1]长度为1 如果没有有效序列则返回-1 思路 找到一个有效序列,确定移动原创 2021-03-31 11:57:53 · 140 阅读 · 0 评论 -
算法随笔(六)
层序遍历二叉树 public int[] levelOrder(TreeNode root) { if(root == null) return new int[0]; Queue<TreeNode> queue = new LinkedList(); List<Integer> list = new ArrayList(); queue.add(root); while(!queue.isEmpty(原创 2021-03-28 15:01:25 · 107 阅读 · 0 评论 -
算法随笔 (五)
判断平衡二叉树 def isBalanced(self, root: TreeNode) -> bool: def recur(root): if not root: return 0; # 左右子树不平衡直接返回 -1 left = recur(root.left) if left == -1 :return -1 right = recur(root.ri原创 2021-03-26 19:48:40 · 121 阅读 · 0 评论 -
算法随笔(四)
最大不重复子串 动态规划 记录字母前一次出现位置 dp[i] = temp + 1 if temp < i - front else i - front def lengthOfLongestSubstring(self, s: str) -> int: index = {} temp = res = 0 for i in range(len(s)): front = index.get(s[i],-1)原创 2021-03-25 19:18:51 · 161 阅读 · 1 评论 -
算法随笔(三)
买卖股票的最佳时机 买卖一次 动态规划,记录每一次买卖的值 def maxProfit(self, prices: List[int]) -> int: first_buy = - prices[0]; frist_sell = 0; for i in range(1,len(prices)): #第一次购买价值 first_buy = max(first_buy,-prices[i]) #第一次卖的价值 fr原创 2021-03-24 11:26:08 · 80 阅读 · 0 评论 -
算法随笔(二)
剪绳子 dp方程 max(dp[i],dp[i-j]*dp[j],dp[i-j]*j,(i-j)*dp[j],(i-j)*j) public int cuttingRope(int n) { int[] dp = new int[n+1]; dp[1] = 1; dp[2] = 1; for(int i = 3;i <= n;i++){ for(int j = 1;j <= i/2;j++){原创 2021-03-23 16:46:25 · 100 阅读 · 0 评论 -
算法随笔(一)
翻转链表 public ListNode reverseList(ListNode head) { ListNode pre = null; ListNode iterator = head; while(iterator != null){ //记录下一个值 ListNode next = iterator.next; //后继改前驱 iterator.next原创 2021-03-22 11:14:49 · 153 阅读 · 0 评论