题目一:给定一个数组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相关推荐

  1. B站左程云算法视频高级班01

    题目1:给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且要不能用非基于比较的排序 [               ]假设是长度为9的数组 首先遍历数组 找出min 和 ma ...

  2. B站左程云算法视频高级班05

    题目一:在一个无序数组中,求第k小的数 快排:荷兰国旗问题 BFPRT 有讲究的选择一个数 之后的步骤和快排一样 假设整个方法叫f函数 f(arr, k) 1)0~4一组 5~9一组 0~14一组 剩 ...

  3. B站左程云算法视频笔记(01

    1.位运算 异或 ^ ,可理解为不进为相加,满足结合律和交换律 a^a=0: a^0=a: 交换a和b a=a^b: b=a^b: a=a^b: 但必须满足是位置不同的(同一内存位置自己异或结果为0) ...

  4. B站左程云算法视频基础提升02

    岛问题 一个矩阵中只有0和1两种值,每个位置都可以和自己的上下左右相连,如果一片1连在一起,这个部分叫做一个岛,求一个矩阵有多少个岛 思路:遍历,infect class Solution {publ ...

  5. B站左程云算法视频笔记05

    大数据 有一个包含100亿个URL的大文件,假设每个URL占用64B,请找出其中所有重复的URL (布隆过滤器或者哈希函数分流) [补充]某搜索公司一天的用户搜索词汇是海量的(百亿数据量),请设计一种 ...

  6. 左程云算法笔记(四)哈希表和有序表的使用、链表

    左程云算法笔记(四) 哈希表的使用 有序表的使用 链表 单链表反转 (LC206) 双向链表反转 打印两个有序链表的公共部分 合并两个有序链表(LC21) 判断一个链表是否为回文结构 (LC234) ...

  7. LeetCode左程云算法课笔记

    左程云算法课笔记 剑指Offer 位运算 ^运算符理解 寻找出现双中的单数 取出一个数最右边1的位置 找所有双出现中的两个单数 整数二进制奇数位偶数位交换 数组中全部出现k次返回出现一次的数 链表 判 ...

  8. 左程云算法笔记总结-基础篇

    基础01(复杂度.基本排序) 认识复杂度和简单排序算法 时间复杂度 big O 即 O(f(n)) 常数操作的数量写出来,不要低阶项,只要最高项,并且不要最高项的系数 一个操作如果和样本的数据量没有关 ...

  9. CSDN专访左程云,算法之道

    算法的庞大让很多人畏惧,程序员如何正确的学习并应用于面试.工作中呢?今天,CSDN邀请了IBM软件工程师.百度软件工程师.刷题5年的算法热爱者左程云,来担任CSDN社区问答栏目的第二十六期嘉宾,届时会 ...

  10. 算法与数据结构——算法基础——二叉树(java)(b站左程云课程笔记整理)

    二叉树 了解一个二叉树的递归序.先序.中序.后序 递归序:每个数会被打印三次(可以理解为前中后) 先序:头左右 中序:左头右 后序:左右头 public static class Node {publ ...

最新文章

  1. win7 下jenkins配置与使用
  2. PPT将图片变为平行四边形形状
  3. linux版_微软爱 Linux:安全杀毒软件 Defender ATP 要出 Linux 版了! | Linux 中国
  4. 兼容sdk7iOS7的issue解决小片段总结
  5. Python常用模块 之 re模块
  6. mac上设定prosody 用户
  7. 试图将一个数学定理证明到最底层的数哲原理...
  8. Web前端大作业 HTML+CSS+JS 防天天生鲜官网 9页
  9. docker技术简介
  10. c语言闹钟程序教学,C++实现闹钟程序的方法
  11. STM32 LL库延时函数 LL_mDelay解析
  12. DevC++ 调试的时候闪退解决办法
  13. 炮轰三国服务器维护,炮轰三国上红色要多少个精华 | 手游网游页游攻略大全
  14. 一IT项目经理的总结
  15. python的StringIO
  16. picgo免费搭建个人图床
  17. 速卖通平台的未来在于走品牌化道路
  18. autopilot news
  19. 【前端】css3实现三阶魔方原型
  20. 电脑删除文件显示计算机管理员,为什么电脑文件夹删不掉?需要管理员权限删除如何解决...

热门文章

  1. 【算法】小团的车辆调度(美团2021校招题)
  2. Windows xp Ms08067漏洞复现
  3. [密码学]对称密钥加密、非对称密钥加密和混合加密的基本原理
  4. 智慧供应链的学习笔记(库存管理、配补货、仓间调拨、控制塔等)
  5. poi导出excel报错Failed to read zip entry source
  6. 一起来看流星雨在线观看/在线播放/全集下载/在线直播全集
  7. 电力拖动计算机系统考试,安徽工程大学期末考试《电力拖动自动控制系统》往年简答题答案范围总结.doc...
  8. 磁共振成像原理-物理基础2(质子在外部磁场的情况)
  9. 高一信息技术认识计算机网络课件,中图版高中信息技术认识计算机网络课件.pptx...
  10. AutoJs学习-音量键控制脚本运行