B站左程云算法视频高级班04
题目一:给定一个数组arr,长度为N,且每个值都是正数,代表N个人的体重。再给定一个正数limit,代表一艘船的载重,一下是坐船规则:
1)每艘船最多只能坐俩个人
2)乘客的体重和不能超过limit
返回如果同时让这N个人过河至少需要几条船
先排序:假设
【1,1,3,3,3,4,4,5,5,5,7,7,9,9,9】 limit = 10
先看小于等于limit/2的最右的位置
如果没有则返回N条船
双指针
【L】+【R】 ? limit
大于时 L左移
小于等于时,R右移
最后,统计
统计数量:勾号a个,x号b个,三角c个
一共需要a+【b/2】(向上取整)+c条船
//请保证arr有序
public static int minBoat(int[] arr, int limit){//arr排个序if(arr == null || arr.length == 0){return 0;}//遍历数组arr,如果发现某个值>limit,怎么也装不下,直接返回if(arr[arr.length - 1] <= 1imit / 2){return (arr.length + 1) / 2;}if(arr[0] > limit / 2){return arr.length;}int lessR = -1;for(int i = arr.length - 1; i>= 0; i--){if(arr[i] <= (limit /2)){lessR = i;break;}}int L = lessR;int R = lessR + 1;//X号的个数, L + 1 , 对号的个数 L + 1 - X的个数int lessUnused = 0;while(L >= 0){int solved = 0;while(R < arr.length && arr[L] + arr[R] <= limit){R++;solved++;}if(solved == 0){lessUnused++L--;} else {L = Math.max(-1, L - solved);}}int lessAll = lessR + 1;//左半区总个数 <= limit / 2的区域int lessUsed = lessAll - lessUnused; //画对号的量int moreUnsolved = arr.length - lessR - 1 - lessUsed; // >2 limit/2区中,没搞定的数量return lessUsed + ((lessUnused + 1) >> 1) + moreUnsolved;
}
题目二:给定一个字符串str,求最长的回文子序列,注意区分子序列和子串的不同(范围上尝试的模型)
str[i……j]
str = 1 1 2 a b 3 c d 2 e 1
0 1 2 3 4 5 6 7 8 9 10
str[i……j]
1)不i不j dp[i-1][j-1]
2)以i不j dp[i][j-1]
3)不i以j dp[i+1][j]
4)以i以j dp[i+1][j-1] + 2
题目三:给定一个字符串str,如果可以在str的任意位置添加字符,请返回在添加字符最少的情况下,让str整体都是回文字符串的一种情况
1)dp[i+1][j]+1
2)dp[i][j-1]+1
3)dp[i+1][j-1]
题目四:给定一个字符串str,返回把str全部切成回文子串的最小分割数
str=ABA 返回0
str = ACDCDCDAD 返回2
aabaakck
1)a f(1)
2)aa f(2)
3)aab 不行
4)aaba 不行
5)aabaa f(5)
6)aabaak 不行
7)aabaakc不行
8)aabaakck不行
public static int minParts(String s){if(s == null || s.length () == 0){return 0;}if(s.length() == 1){return 1;}return process(s.toCharArray(), 0);
}//str[i..]最少能分成多少回文的部分
//返回最少的部分数
public static int process(char[] str, int i){if(i == str.length){return 0;}//尝试每一个end,如果str[i..end]这个部分是回文,就去尝试这个部分是作为回文的第一块int ans = Integer.MAX_VALUE;for(int end = i; end < str.length; end++){if(valid(str, i, end)){//str[i..]拆成:第一块为str[i..end] 后续的str[end + 1]怎么拆最省的问题ans = Math.min(ans, 1 + process(str, end + 1));}}return ans;
}//验证str[L..R]这一段是不是回文 需要遍历吗? 不遍历O(1)
public static boolean valid(char[] str, int L, int R){}
验证回文通过预处理的技巧,实现复杂度为O(1)
题目五:
dp[i][j] i....j有多少种保留方案是回文串
1)以i以j
2)不i不j
3)不i以j
4)以i不j
dp[i][j-1] = 2)+4)
a b a {a} {b} {a} {aa} {aba}
012 0 1 2 0 2 0 1 2
开头必须 结尾必须
1)以0 以2 {aa} {aba}
2)不0 以2 {a}
3)不0 不2 {b}
4)以0 不2 {a}
dp[i][j] str[i……j] 所有可能的回文情况都算,有多少回文串?
1)以i以j
2)不i不j
3)不i以j
4)以i不j
dp[i][j-1] 3)+4)
dp[i+1][j+1] 3)
dp[i+1][j] 2)+3)
dp[i][j]
2) 3) 4) dp[i][j-1]+dp[i+1][j]-dp[i+1][j+1]
以i以j [i] == [j] dp[i+1][j-1] + 1
B站左程云算法视频高级班04相关推荐
- B站左程云算法视频高级班01
题目1:给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且要不能用非基于比较的排序 [ ]假设是长度为9的数组 首先遍历数组 找出min 和 ma ...
- B站左程云算法视频高级班05
题目一:在一个无序数组中,求第k小的数 快排:荷兰国旗问题 BFPRT 有讲究的选择一个数 之后的步骤和快排一样 假设整个方法叫f函数 f(arr, k) 1)0~4一组 5~9一组 0~14一组 剩 ...
- B站左程云算法视频笔记(01
1.位运算 异或 ^ ,可理解为不进为相加,满足结合律和交换律 a^a=0: a^0=a: 交换a和b a=a^b: b=a^b: a=a^b: 但必须满足是位置不同的(同一内存位置自己异或结果为0) ...
- B站左程云算法视频基础提升02
岛问题 一个矩阵中只有0和1两种值,每个位置都可以和自己的上下左右相连,如果一片1连在一起,这个部分叫做一个岛,求一个矩阵有多少个岛 思路:遍历,infect class Solution {publ ...
- B站左程云算法视频笔记05
大数据 有一个包含100亿个URL的大文件,假设每个URL占用64B,请找出其中所有重复的URL (布隆过滤器或者哈希函数分流) [补充]某搜索公司一天的用户搜索词汇是海量的(百亿数据量),请设计一种 ...
- 左程云算法笔记(四)哈希表和有序表的使用、链表
左程云算法笔记(四) 哈希表的使用 有序表的使用 链表 单链表反转 (LC206) 双向链表反转 打印两个有序链表的公共部分 合并两个有序链表(LC21) 判断一个链表是否为回文结构 (LC234) ...
- LeetCode左程云算法课笔记
左程云算法课笔记 剑指Offer 位运算 ^运算符理解 寻找出现双中的单数 取出一个数最右边1的位置 找所有双出现中的两个单数 整数二进制奇数位偶数位交换 数组中全部出现k次返回出现一次的数 链表 判 ...
- 左程云算法笔记总结-基础篇
基础01(复杂度.基本排序) 认识复杂度和简单排序算法 时间复杂度 big O 即 O(f(n)) 常数操作的数量写出来,不要低阶项,只要最高项,并且不要最高项的系数 一个操作如果和样本的数据量没有关 ...
- CSDN专访左程云,算法之道
算法的庞大让很多人畏惧,程序员如何正确的学习并应用于面试.工作中呢?今天,CSDN邀请了IBM软件工程师.百度软件工程师.刷题5年的算法热爱者左程云,来担任CSDN社区问答栏目的第二十六期嘉宾,届时会 ...
- 算法与数据结构——算法基础——二叉树(java)(b站左程云课程笔记整理)
二叉树 了解一个二叉树的递归序.先序.中序.后序 递归序:每个数会被打印三次(可以理解为前中后) 先序:头左右 中序:左头右 后序:左右头 public static class Node {publ ...
最新文章
- win7 下jenkins配置与使用
- PPT将图片变为平行四边形形状
- linux版_微软爱 Linux:安全杀毒软件 Defender ATP 要出 Linux 版了! | Linux 中国
- 兼容sdk7iOS7的issue解决小片段总结
- Python常用模块 之 re模块
- mac上设定prosody 用户
- 试图将一个数学定理证明到最底层的数哲原理...
- Web前端大作业 HTML+CSS+JS 防天天生鲜官网 9页
- docker技术简介
- c语言闹钟程序教学,C++实现闹钟程序的方法
- STM32 LL库延时函数 LL_mDelay解析
- DevC++ 调试的时候闪退解决办法
- 炮轰三国服务器维护,炮轰三国上红色要多少个精华 | 手游网游页游攻略大全
- 一IT项目经理的总结
- python的StringIO
- picgo免费搭建个人图床
- 速卖通平台的未来在于走品牌化道路
- autopilot news
- 【前端】css3实现三阶魔方原型
- 电脑删除文件显示计算机管理员,为什么电脑文件夹删不掉?需要管理员权限删除如何解决...
热门文章
- 【算法】小团的车辆调度(美团2021校招题)
- Windows xp Ms08067漏洞复现
- [密码学]对称密钥加密、非对称密钥加密和混合加密的基本原理
- 智慧供应链的学习笔记(库存管理、配补货、仓间调拨、控制塔等)
- poi导出excel报错Failed to read zip entry source
- 一起来看流星雨在线观看/在线播放/全集下载/在线直播全集
- 电力拖动计算机系统考试,安徽工程大学期末考试《电力拖动自动控制系统》往年简答题答案范围总结.doc...
- 磁共振成像原理-物理基础2(质子在外部磁场的情况)
- 高一信息技术认识计算机网络课件,中图版高中信息技术认识计算机网络课件.pptx...
- AutoJs学习-音量键控制脚本运行