剑指offer刷题笔记--Num51-60

1--数组中的逆序对(51)

主要思路:

        基于归并排序,视频讲解参考:数组中的逆序对

#include <iostream>
#include <vector>class Solution {
public:int reversePairs(std::vector<int>& nums) {if(nums.size() <= 1) return 0;return mergeSort(nums, 0, nums.size() - 1);}int mergeSort(std::vector<int>& nums, int left, int right){if(left >= right) return 0;int mid = left + (right - left) / 2;int count1 = mergeSort(nums, left, mid);int count2 = mergeSort(nums, mid+1, right);int count3 = merge(nums, left, mid, mid+1, right); return count1 + count2 + count3;}int merge(std::vector<int>& nums, int l1, int r1, int l2, int r2){std::vector<int> tmp;int count = 0;int i = l1, j = l2;while(i <= r1 && j <= r2){if(nums[i] > nums[j]){count = count + l2 - i;tmp.push_back(nums[j]);j++;}else{tmp.push_back(nums[i]);i++;}}while(i <= r1){tmp.push_back(nums[i]);i++;} while(j <= r2){tmp.push_back(nums[j]);j++;}for(int i = l1, k = 0; i <= r2; i++, k++){nums[i] = tmp[k];}return count;}};int main(int argc, char *argv[]){std::vector<int> test = {7, 5, 6, 4};Solution S1;int Res = S1.reversePairs(test);std::cout << Res << std::endl;return 0;
}

2--两个链表的第一个公共结点(52)

主要思路:

        两个指针分别指向 A 链表和 B 链表,先让两个指针走完自己的链表,再去走别人的链表,这样两个指针走的总路程是相等的;因此两个指针最终肯定会相遇,相遇的地点要么在结尾(不相交),要么在共有的结点中(相交),只需找到第一个共有的结点即可,此时两个指针指向同一个结点; (所以题目都可以这么浪漫的吗。。。 2023 07 20)

#include <iostream>
#include <vector>struct ListNode {int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};class Solution {
public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {if(headA == NULL || headB == NULL) return NULL;ListNode *A = headA;ListNode *B = headB;while(A != B){if(A != NULL){A = A->next; // 先走完A}else{A = headB; // 再走B}if(B != NULL){B = B->next; // 先走完B}else{B = headA; //  再走A}}return A; // 走的总路程相等,A最终肯定会和B相遇,要么在NULL(不相交),要么在第一个共同的结点(相交)}
};int main(int argc, char *argv[]){ListNode *Node1 = new ListNode(4);ListNode *Node2 = new ListNode(1);ListNode *Node3 = new ListNode(8);ListNode *Node4 = new ListNode(4);ListNode *Node5 = new ListNode(5);Node1->next = Node2;Node2->next = Node3;Node3->next = Node4;Node4->next = Node5;ListNode *Node6 = new ListNode(5);ListNode *Node7 = new ListNode(0);ListNode *Node8 = new ListNode(1);Node6->next = Node7;Node7->next = Node8;Node6->next = Node3;Solution S1;ListNode *Res = S1.getIntersectionNode(Node1, Node6);std::cout << Res->val << std::endl;return 0;
}

3--在排序数组中查找数字 I(53-I)

主要思路:

        假如数组不是有序的,可以使用哈希,哈希表 key 表示数组的元素,value表示出现的次数,最后只需查询 key 为target对应的个数即可;

#include <iostream>
#include <vector>
#include <map>class Solution {
public:int search(std::vector<int>& nums, int target) {if(nums.size() == 0) return 0;std::map<int, int> hash;for(int i = 0; i < nums.size(); i++){if(hash.find(nums[i]) != hash.end()) hash[nums[i]] += 1;else hash[nums[i]] = 1;}if(hash.find(target) != hash.end()) return hash[target];else return 0;}
};int main(int argc, char *argv[]){std::vector<int> test = {5, 7, 7, 8, 8, 10};int target = 8;Solution S1;int res = S1.search(test, target);std::cout << res << std::endl;return 0;
}

主要思路:

        由于题目是有序的,因此使用二分法查询;

        查找第一个比 target 大的数(右边界 right),查找第一个比 target 小的数(左边界 left),则与target 相同的数目为:right - left - 1;

#include <iostream>
#include <vector>
#include <map>class Solution {
public:int search(std::vector<int>& nums, int target) {if(nums.size() == 0) return 0;int i = 0, j = nums.size() - 1;// 查找右边界while(i <= j){int mid = i + (j - i) / 2;if(target < nums[mid]) j = mid - 1;else i = mid + 1;}int right = i;i = 0;// 查找左边界while(i <= j){int mid = i + (j - i) / 2;if(target <= nums[mid]) j = mid - 1;else i = mid + 1;}int left = j;return right - left - 1;}
};int main(int argc, char *argv[]){std::vector<int> test = {5, 7, 7, 8, 8, 10};int target = 8;Solution S1;int res = S1.search(test, target);std::cout << res << std::endl;return 0;
}

4--0~n-1中缺失的数字(53-II)

主要思路:

        由于数组是有序的,可以使用二分法来查找缺失的数字;

        当 nums[mid] == mid 时,缺失的数字肯定在右区间,执行 i = mid + 1;

        否则执行 j = mid - 1,最后返回左指针即可;

#include <iostream>
#include <vector>class Solution {
public:int missingNumber(std::vector<int>& nums) {int i = 0, j = nums.size() - 1;while(i <= j){int mid = i + (j - i) / 2;if(nums[mid] == mid) i = mid + 1;else j = mid - 1;}return i;}
};int main(int argc, char *argv[]){std::vector<int> test = {0, 1};Solution S1;int res = S1.missingNumber(test);std::cout << res << std::endl;return 0;
}

5--二叉搜索树的第k大结点(54)

主要思路:

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/4048.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS-Block

Blocks的学习 Block的分类 Block根据其类型可以分为三类&#xff1a; 全局Block&#xff08;NSGlobalBlock&#xff09;栈Block&#xff08;NSMallocBlock&#xff09;堆Block&#xff08;NSStackBlock&#xff09; 而其区分的规则为&#xff1a; 如果没有引用局部变量&…

arping命令 ip地址冲突检测 根据ip查mac地址

arping命令介绍 arping 命令主要用来获取ip对应的mac地址&#xff0c;更新本地arp缓存表。平时主要用来探测ip地址是否冲突即同一个网络里&#xff0c;同一个ip不同mac地址的情况。ip地址冲突将导致网络故障。 arping常用命令参数 arping [参数] ip -U 强制更新邻近主机的a…

关于电脑显示器屏幕看不出灰色,灰色和白色几乎一样无法区分,色彩调整方法

问题&#xff1a; 电脑显示器屏幕看不出灰色&#xff0c;灰色和白色几乎一样无法区分。白色和灰色有色差。 解决方法&#xff1a; 打开“控制面板” ->“色彩管理” ->“高级” ->“校正显示器” 在下一步调节中调成中间这一个实例的样子就可以了 进行微调&#x…

【hadoop】部署hadoop全分布模式

hadoop全分布模式 全分布模式特点部署全分布模式准备工作正式配置hadoop-env.shhdfs-site.xmlcore-site.xmlmapred-site.xmlyarn-site.xmlslaves对NameNode进行格式化复制到另外两台虚拟机启动 对部署是否成功进行测试 全分布模式特点 真正的分布式环境&#xff0c;用于生产具…

【Vue】day02-Vue基础入门

目录 day02 一、今日学习目标 1.指令补充 2.computed计算属性 3.watch侦听器 4.综合案例 &#xff08;演示&#xff09; 二、指令修饰符 1.什么是指令修饰符&#xff1f; 2.按键修饰符 3.v-model修饰符 4.事件修饰符 三、v-bind对样式控制的增强-操作class 1.语法…

边缘检测之loG算子

note // 边缘检测之loG算子&#xff1a;对高斯函数求二阶导数 // G(x,y) exp(-1 * (x*x y*y) / 2 / sigma / sigma) // loG(x,y) ((x*x y*y - 2 * sigma * sigma) / (sigma^4)) * exp(-1 * (x*x y*y) / 2 / sigma /sigma) /* [ 0,0,-1,0,0; 0,-1,-2,-1,0; -1,-2,16,-2…

uni-app实现emoj表情包发送(nvue版)

uni-app实现表情包发送&#xff0c; vue实现思路直接使用grideview网格布局加载emoj表情包即可实现&#xff0c;很简单&#xff0c;但是nvue稍微复杂&#xff0c;这里采用的方案是nvue提供的组件list 看效果 代码 <template><view style"margin-right: 10rpx;m…

如何使用自有数据微调ChatGLM-6B

构建自己的数据集 数据格式&#xff1a;问答对 官网例子 ADGEN 数据集任务为根据输入&#xff08;content&#xff09;生成一段广告词&#xff08;summary&#xff09;。 { "content": "类型#上衣*版型#宽松*版型#显瘦*图案#线条*衣样式#衬衫*衣袖型#泡泡袖…

3.8 Bootstrap 面包屑导航(Breadcrumbs)

文章目录 Bootstrap 面包屑导航&#xff08;Breadcrumbs&#xff09; Bootstrap 面包屑导航&#xff08;Breadcrumbs&#xff09; 面包屑导航&#xff08;Breadcrumbs&#xff09;是一种基于网站层次信息的显示方式。以博客为例&#xff0c;面包屑导航可以显示发布日期、类别或…

Stable Diffusion + EbSynth + ControlNet 解决生成视频闪烁

一、安装 1.1、安装ffmpeg 下载地址&#xff1a; 解压&#xff0c;配置环境变量 E:\AI\ffmpeg\bin 检查是否安装成功 1.2、安装SD的 EbSynth 插件 插件地址 https://github.com/s9roll7/ebsynth_utility 报错&#xff1a;ModuleNotFoundError: No module named extension…

【广州华锐互动】AR远程巡检系统在设备维修保养中的作用

随着科技的不断发展&#xff0c;AR(增强现实)远程巡检系统在设备检修中发挥着越来越重要的作用。这种系统可以将AR技术与远程通信技术相结合&#xff0c;实现对设备检修过程的实时监控和远程指导&#xff0c;提高设备检修的效率和质量。 首先&#xff0c;AR远程巡检系统可以帮助…

单片机尽力少用位域操作

1、在51单片机中少用uint32_t类型&#xff0c;查看汇编真的好多条指令&#xff0c;尽力避免少用。 2、在32位单片机中&#xff0c;u8、u16、u32类型操作起来基本没有什么影响&#xff0c;下图是我做的测试&#xff0c;可能测试不全面&#xff0c;按照当前测试&#xff0c;在32…

Kubernetes_1.27.3_Harbor结合Nacos实战

Nacos 实战 作者:行癫(盗版必究) 一:Nacos简介 1.简介 ​ Nacos是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台;Nacos 致力于帮助您发现、配置和管理微服务;Nacos 提供了一组简单易用的特…

实战 ➾【Red Hat 搭建部署VSFTPd服务】

实战 ➾【Red Hat 搭建部署VSFTPd服务】 &#x1f53b; 前言&#x1f53b; 一、vsFTPd服务部署&#x1f6a5; 1.1 vsFTPd服务安装&#x1f6a5; 1.2 vsFTPd服务的启动与关闭 &#x1f53b; 二、vsFTPd相关配置&#x1f6a5; 2.1 vsFTPd的相关配置文件&#x1f6a5; 2.2 配置匿名…

SpringSecurity(6.1.x版本) 认证,授权,自定义登录,内部机制探讨

SpringSecurity 文章目录 SpringSecurityCSRF跨站请求伪造攻击SFA会话固定攻击XSS跨站脚本攻击开发环境搭建认证直接认证使用数据库认证自定义验证 其他配置自定义登录界面记住我功能 授权基于角色授权基于权限授权使用注解权限判断 内部机制探究授权校验流程安全上下文安全上下…

【JAVA】方法的使用:方法语法、方法调用、方法重载、递归练习

&#x1f349;内容专栏&#xff1a;【JAVA从0到入门】 &#x1f349;本文脉络&#xff1a;JAVA方法的使用&#xff0c;递归练习 &#x1f349;本文作者&#xff1a;Melon_西西 &#x1f349;发布时间 &#xff1a;2023.7.19 目录 1. 什么是方法(method) 2 方法定义 2.1 方法…

C语言——文件操作(超全超详细)

C语言——文件操作 1. 什么是文件 磁盘上的文件是文件 但是在程序设计中&#xff0c;我们一般谈的文件有两种&#xff1a;程序文件、数据文件&#xff08;从文件功能的角度来分类的&#xff09; 1.1 程序文件 包括源程序文件&#xff08;后缀为.c&#xff09;&#xff0c;目…

教程 | 如何10秒内一键生成高质量PPT

Hi! 大家好&#xff0c;我是赤辰&#xff01; 近期新进的学员不少职场小白&#xff0c;对AI工具提效办公很感兴趣&#xff0c;今天火速给大家安排&#xff0c;ChatGPTMindShow强强联合&#xff0c;30秒内快速生成PPT&#xff0c;对于策划小白来说简直是福音呀&#xff01; 市…

用百度地图api获取当前定位,获取经纬度——前端笔记

问题&#xff1a; 做一个按钮&#xff0c;点击后可以获取到当前位置的经纬度&#xff0c;并渲染地图。 效果如下: 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head><title>获取当前定位测试<…

精选了6款好用的AI绘画工具,值得一试

近几年来&#xff0c;伴随着AI技术的发展&#xff0c;设计领域发生了巨大的变化。AI绘图工具的出现很大程度上减轻了设计师的工作负担&#xff0c;本文精选了6款优秀的AI绘图工具为大家推荐&#xff0c;一起来看看吧&#xff01; 1、即时灵感 即时灵感作为国产的AI绘图工具&a…