查询网站信息,东昌府网站建设公司,wordpress生成的网页,昆山网站建设机构502. IPO
题目
假设 力扣#xff08;LeetCode#xff09;即将开始 IPO 。为了以更高的价格将股票卖给风险投资公司#xff0c;力扣 希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限#xff0c;它只能在 IPO 之前完成最多 k 个不同的项目。帮助 力扣 设计完成最多…502. IPO
题目
假设 力扣LeetCode即将开始 IPO 。为了以更高的价格将股票卖给风险投资公司力扣 希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限它只能在 IPO 之前完成最多 k 个不同的项目。帮助 力扣 设计完成最多 k 个不同项目后得到最大总资本的方式。
给你 n 个项目。对于每个项目 i 它都有一个纯利润 profits[i] 和启动该项目需要的最小资本 capital[i] 。
最初你的资本为 w 。当你完成一个项目时你将获得纯利润且利润将被添加到你的总资本中。
总而言之从给定项目中选择 最多 k 个不同项目的列表以 最大化最终资本 并输出最终可获得的最多资本。
答案保证在 32 位有符号整数范围内。
示例 1
输入k 2, w 0, profits [1,2,3], capital [0,1,1]
输出4
解释
由于你的初始资本为 0你仅可以从 0 号项目开始。
在完成后你将获得 1 的利润你的总资本将变为 1。
此时你可以选择开始 1 号或 2 号项目。
由于你最多可以选择两个项目所以你需要完成 2 号项目以获得最大的资本。
因此输出最后最大化的资本为 0 1 3 4。示例 2
输入k 3, w 0, profits [1,2,3], capital [0,1,2]
输出6答案
class Solution {public int findMaximizedCapital(int k, int w, int[] profits, int[] capital) {int len profits.length;int[][] arr new int[len][2];for(int i0;ilen;i){arr[i][0] capital[i];arr[i][1] profits[i];}Arrays.sort(arr,(a,b)-a[0]-b[0]);PriorityQueueInteger queue new PriorityQueue((a,b)-b-a);int index 0;for(int i0;ik;i){while(indexlen arr[index][0]w){queue.offer(arr[index][1]);index;}if(!queue.isEmpty()){w queue.poll();}else{break;}}return w;}
}427. 建立四叉树
题目
给你一个 n * n 矩阵 grid 矩阵由若干 0 和 1 组成。请你用四叉树表示该矩阵 grid 。
你需要返回能表示矩阵 grid 的 四叉树 的根结点。
四叉树数据结构中每个内部节点只有四个子节点。此外每个节点都有两个属性
val储存叶子结点所代表的区域的值。1 对应 True0 对应 False。注意当 isLeaf 为 False 时你可以把 True 或者 False 赋值给节点两种值都会被判题机制 接受 。isLeaf: 当这个节点是一个叶子结点时为 True如果它有 4 个子节点则为 False 。
class Node {public boolean val;public boolean isLeaf;public Node topLeft;public Node topRight;public Node bottomLeft;public Node bottomRight;
}答案
class Solution {public Node construct(int[][] grid) {return deal(grid,0,0,grid.length,grid.length);}Node deal(int[][] grid,int r0,int c0,int r1,int c1){boolean same true;for(int ir0;ir1;i){for(int jc0;jc1;j){if(grid[i][j]!grid[r0][c0]){same false;break;}}if(!same){break;}}if(same){return new Node(grid[r0][c0]1,true);}Node curr new Node(true,false,deal(grid,r0,c0,(r0r1)/2,(c0c1)/2),deal(grid,r0,(c0c1)/2,(r0r1)/2,c1),deal(grid,(r0r1)/2,c0,r1,(c0c1)/2),deal(grid,(r0r1)/2,(c0c1)/2,r1,c1));return curr;}}148. 排序链表
题目
给你链表的头结点 head 请将其按 升序 排列并返回 排序后的链表 。
输入head [4,2,1,3]
输出[1,2,3,4]输入head [-1,5,3,4,0]
输出[-1,0,3,4,5]示例 3
输入head []
输出[]答案
class Solution {public ListNode sortList(ListNode head) {PriorityQueueListNode queue new PriorityQueue((a,b)-a.val-b.val);while(head!null){queue.offer(head);head head.next;}ListNode dummy new ListNode();ListNode tail dummy;while(!queue.isEmpty()){ListNode curr queue.poll();tail.next curr;tail tail.next;}tail.next null;return dummy.next;}
}79. 单词搜索
题目
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中返回 true 否则返回 false 。
单词必须按照字母顺序通过相邻的单元格内的字母构成其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
输入board [[A,B,C,E],[S,F,C,S],[A,D,E,E]], word ABCCED
输出true答案
class Solution {int[][] dirs {{1,0},{-1,0},{0,1},{0,-1}};int m,n;public boolean exist(char[][] board, String word) {m board.length;n board[0].length;for(int i0;im;i){for(int j0;jn;j){if(board[i][j]word.charAt(0)){if(deal(board,word,i,j,0)){return true;}}}}return false;}boolean deal(char[][] board,String word,int i,int j,int k){if(kword.length()){return true;}if(i0 || im || j0 || jn || word.charAt(k)!board[i][j]){return false;}char temp board[i][j];board[i][j] 0;boolean flag false;for(int[] dir : dirs){flag flag || deal(board,word,idir[0],jdir[1],k1);}board[i][j] temp;return flag;}
}