当前位置: 首页 > news >正文

java学习 leetcode 二分查找 图论

74 搜索二维矩阵

class Solution {public boolean searchMatrix(int[][] matrix, int target) {if(matrix == null || matrix.length == 0 || matrix[0].length == 0){return false;}int m = matrix.length;int n = matrix[0].length;int left = 0;int right = m*n -1;while(left <= right){int mid = left + (right -left)/2;int midvalue = matrix[mid/n][mid%n];if(midvalue == target){return true;}else if(midvalue < target){left =mid +1;}else{right = mid -1;}}return false;}
}

34 排序数组查找第一个最后一个位置

旋转排序数组、以及最小值,这类思路差不多

4.  寻找正序数组的中位数

这个比较难写,后面再看看,思路是:一个是划分数组,一个二分查找

// class Solution {
//     public double findMedianSortedArrays(int[] nums1, int[] nums2) {
//         //思路就是找到索引为 ,,这里的代码可能后面完善下
//         //(m + n) / 2  -> (m+n)/2+1的平均值
//         //奇数的话找到 (m + n)/2
//         int right_m = m = nums1.length;
//         int right_n = n = nums2.length;
//         int left_m = left_n = 0;
//         int m_mid = m/2;
//         int n_mid = n/2;//         if(nums1[m_mid]>nums2[n_mid]){
//             left_n = n_mid;
//             while(nums2[left_n] < nums1[right_n]){//             }
//         }
//     }
// }class Solution {public double findMedianSortedArrays(int[] nums1, int[] nums2) {// 确保 nums1 是较短的数组,减少二分搜索范围if (nums1.length > nums2.length) {return findMedianSortedArrays(nums2, nums1);}int m = nums1.length;int n = nums2.length;int left = 0, right = m;  // 在 nums1 上进行二分while (left <= right) {int partition1 = left + (right - left) / 2;           // nums1 的分割线右边第一个元素的索引int partition2 = (m + n + 1) / 2 - partition1;        // nums2 的分割线// 左半部分的最大值int maxLeft1 = (partition1 == 0) ? Integer.MIN_VALUE : nums1[partition1 - 1];int maxLeft2 = (partition2 == 0) ? Integer.MIN_VALUE : nums2[partition2 - 1];// 右半部分的最小值int minRight1 = (partition1 == m) ? Integer.MAX_VALUE : nums1[partition1];int minRight2 = (partition2 == n) ? Integer.MAX_VALUE : nums2[partition2];// 满足中位数分割条件:左 <= 右if (maxLeft1 <= minRight2 && maxLeft2 <= minRight1) {// 分奇偶计算中位数if ((m + n) % 2 == 0) {// 偶数个元素:取 (左最大 + 右最小) / 2.0return (Math.max(maxLeft1, maxLeft2) + Math.min(minRight1, minRight2)) / 2.0;} else {// 奇数个元素:左半部分最大值就是中位数return Math.max(maxLeft1, maxLeft2);}} else if (maxLeft1 > minRight2) {// nums1 分割线太靠右,需要左移right = partition1 - 1;} else {// maxLeft2 > minRight1,需要将 nums1 分割线右移left = partition1 + 1;}}// 理论上不会执行到这里throw new IllegalArgumentException("输入数组不是有序的");}
}

994腐烂的橘子

多源bfs

207课程表

拓扑排序,用到入度啥的,比较好理解

208前缀树

这个比较难些,后面再仔细看下

这样100就先刷完一遍了,感觉语法和算法以及变量声明等等,还是有很多不熟悉的地方,算法大致的流程都知道了,也算是有所收获,后面好好看下项目,做项目体会应用,结合着刷算法题,加油

http://www.lryc.cn/news/619381.html

相关文章:

  • 图论理论部分
  • 【C++ STL】list详解和模拟
  • Day52--图论--101. 孤岛的总面积(卡码网),102. 沉没孤岛(卡码网),103. 水流问题(卡码网),104. 建造最大岛屿(卡码网)
  • day50 图论基础 卡码网98. 所有可达路径
  • 15-docker的企业级私有仓库之docker-harbor
  • 若依plus SpringCloud [DUBBO] 多模块异常抛出 异常里面包了一层异常
  • docker load镜像后 名字和标签异常解决
  • 【Docker项目实战】使用Docker部署todo任务管理器
  • 飞算JavaAI云原生实践:基于Docker与K8s的自动化部署架构解析
  • python环境依赖冲突问题(1)
  • Docker 在 Linux 中的额外资源占用分析
  • Java设计模式全景解析:从演进历程到创新实践
  • 【网络运维】Playbook进阶: 管理变量
  • Windows11 运行IsaacSim GPU Vulkan崩溃
  • ADB 无线调试连接(Windows + WSL 环境)
  • 药房智能盘库系统:基于CV与时间序列预测的库存革命
  • vue3 el-select el-button 在同一行显示
  • Vue:实现一个无线滚动列表的解决方案
  • 【密码学实战】国密SM2算法介绍及加解密/签名代码实现示例
  • 2021 年全国硕士研究生招生考试真题笔记
  • 若依前后端分离版学习笔记(九)——登录和操作日志
  • Android中获取状态栏高度
  • 算法题打卡力扣第11题:盛最多水的容器(mid)
  • [AI React Web]`意图识别`引擎 | `上下文选择算法` | `url内容抓取` | 截图捕获
  • 【递归、搜索与回溯算法】穷举、暴搜、深搜、回溯、剪枝
  • BGE:智源研究院的通用嵌入模型家族——从文本到多模态的语义检索革命
  • 海洋通信系统技术文档(1)
  • 高可用实战之Nginx + Apache篇
  • QT常用类解析
  • ubuntu20.04下C++实现点云的多边形区域过滤(2种实现:1、pcl的CropHull滤波器;2、CUDA上实现射线法)