【剑指offer@JZ41--JZ50】

基于深度强化学习的无地图移动机器人导航:让机器人在未知环境中智能前行 虽然仍然面临sim-to-real差距、安全性保证等挑战,但随着算法的不断改进和计算能力的提升,基于DRL的无地图导航技术将在服务机器人、工业自动化、太空探索等领域发挥越来越重要的作用,为人类生产和生活带来更大便利和价值。对于复杂环境下的动态目标导航问题,研究人员提出了多智能体协同控制算法(如Teamwork-Net算法),通过多个智能体分别控制机器人的运动速度与运动方向,协同实现更高效、更稳定的导航性能。深度强化学习结合了深度学习的感知能力和强化学习的决策能力,非常适合解决无地图导航问题。 阅读详情

JZ41:和为S的连续正数序列

题目描述:小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列?
解题思路:因为要连续,所以求的的这个序列公差为1(根据等差数列的求和公式:S = (1 + n) * n / 2),并且中间值就是这段数列平均值的大小,向上面20就是这段数列的平均值,假设序列长度为n,中间值就是S/N,知道序列长度和中间值,这个序列也就出来了,但有个问题,数列长度为奇数时,中间那个数正好是平均数,为偶数时,中间两个数相加除以2,才是平均数,到底n最大长度是多少,根据求和公式,就可以把最大的n算出来,遍历的时候也只需要遍历最大的n,

import java.util.ArrayList;
public class Solution{
    public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
       ArrayList<ArrayList<Integer>> list=new ArrayList<>();
        //这个n就是根据求和公式所得到得最大序列长,最小由题意知是2
        for(int n=(int)Math.sqrt(2*sum);n>=2;n--){
            //n&1等于1说明n不为0,sum%n==0说明序列为奇数,后面说明序列长为偶数,
            //后面是偶数的情况,余数是除数的一半,比如5、6、7、8、合为26,余数为2商为4.
            if ((n&1) ==1&&sum%n==0||(sum%n)*2 == n){
                ArrayList<Integer> answer=new ArrayList<>();
                //决定这个序列的起始值是几,sum/n是中间那个值,往前推(n-1)/2就是起始值,
                 for (int j = 0,k =(sum/n)-(n-1)/2;j<n;j++,k++){
                     answer.add(k);
                 } 
                list.add(answer);
            }
        }
        return list;
    }
}

JZ42:和为s的两个数组

题目描述:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
解题思路:左右夹击,来例子看,比如一个数组2、4、6、7、8、10、12给一个数为14,满足条件的有2和12乘积为24,4和10乘积为40,6和8乘积为48,不难发现,最外层的积就是最小的,定义两个指针,一个从最左边一个从最右边,不断向两边逼近,大了右边往左移,小了左边往右移。

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
        ArrayList<Integer> list=new ArrayList<>();
        if(array==null||array.length<2){//数组为空直接返回
            return list;
        }
        int left=0,right=array.length-1;
        while(left<right){//循环条件
            if(array[left]+array[right]==sum){
                list.add(array[left]);
                list.add(array[right]);
                return list;
            }
            else if(array[left]+array[right]>sum){
                right--;
            }
            else{
                left++;
            }
        }
        return list;
    }
}

JZ43:左旋字符串

题目描述:字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”
解题思路:跟字符串有关的题应该想到用字符串的常见方法去解决,这道题的思路就是先把n到str.length剪切出来,再用append方法把前面切出去的加到后面。

public class Solution {
    public String LeftRotateString(String str,int n) {
        if(str == null||n<0){
            return null;
        }
        String string = new String();
        if(n <= str.length()) {
            //substring包括前不包括后
            StringBuffer sb = new StringBuffer(str.substring(n, str.length()));
            String s1 = str.substring(0, n);
            string = sb.append(s1).toString();
             
        }
        return string;
    }
}

JZ44:翻转单词顺序列

题目描述:“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”
解题思路:用StringBuilder的append方法逐个逆序添加,需要注意的是i=0时不需要再添加空格了,所以单独处理一下

public class Solution{
    public String ReverseSentence(String str) {
        if (str.trim().length()==0) {//字符串为0返回字符串
            return str;
        }
        String[] arr=str.split(" ");
        StringBuilder sb=new StringBuilder();
        for (int i = arr.length-1; i >0; i--) {
            sb.append(arr[i]+" ");//z逐个添加
        }
        sb.append(arr[0]);
        return sb.toString();
    }
}

JZ45:扑克牌顺子·

题目描述:LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体育彩票啦。 现在,要求你使用这幅牌模拟上面的过程,然后告诉我们LL的运气如何, 如果牌能组成顺子就输出true,否则就输出false。为了方便起见,你可以认为大小王是0。
解题思路:首先把大小王的张数统计出来,用一个set去存放都有那些牌,因为set不允许重复。然后用大小王的张数加上set的size要是不等于5,说明有对子,等于5时,还要判断最大值和最小值得差在不在5之内,

import java.util.*;
public class Solution{
    public boolean isContinuous(int [] numbers) {
        if(numbers.length<5||numbers.length>5){//数组的长度不符合就直接返回错
            return false;
        }
        Arrays.sort(numbers);
        int count=0;
        TreeSet<Integer> set=new TreeSet<>();
        for(int i=0;i<numbers.length;i++){
            if(numbers[i]==0){//把大小王的张数统计出来
                count++;
            }else{
                set.add(numbers[i]);//利用了set不允许重复的性质,防止有对子出现
            }
        }
        if((count+set.size())!=5){//和不为5说明有对子
            return false;
        }
        if((set.last()-set.first())<5){
            //因为是顺子,是个公差为1的数列,最大值减最小值肯定在5之内
            return true;
        }
        return false;
    }
}

JZ46:孩子们的游戏

题目描述:游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,请你试着想下,哪个小朋友会得到这份礼品呢?(注:小朋友的编号是从0到n-1),如果没有小朋友,请返回-1
解题思路:直接用约瑟夫环公式求解

public class Solution
{
    public int LastRemaining_Solution(int n, int m)
    {
        if(n==0||m==0){
            return -1;
        }
        int s=0;
        for(int i=2;i<=n;i++)
        {
            s=(s+m)%i;//约瑟夫环公式
        }   
       return s ;
    }
}

JZ47:求1+2+3…n,

解题思路:直接等差数列求和公式搞定(Sn=n*(a1+an)/2)

public class Solution {
    public int Sum_Solution(int n) {
        int sum=n*(1+n)>>1;//右移相当于除以2
        return sum;
    }
}

JZ48:不用加减乘除做加法

解题思路:两个数异或相当于每一位相加,而不考虑进位;两个数相与,并左移一位:相当于求得进位;将上述两步的结果相加

public class Solution{
public int Add(int num1,int num2) {
    while( num2!=0 ){
        int sum = num1 ^ num2;
        int carray = (num1 & num2) << 1;
        num1 = sum;
        num2 = carray;
    }
    return num1;
    }
}

JZ49:把字符串转换成整数

题目描述:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
解题思路:先处理一下正负号,然后从前往后遍历,每次×10逐个相加。

public class Solution{
    public static int StrToInt(String str) {
        if(str==null||str.length()==0) {//如果输入的字符串为空。直接返回0
            return 0;
        }
        boolean tag=false;
        int sum=0;
        char[] arr=str.toCharArray();
        if(arr[0]=='-') {//如果第一个字符为负号,则标志位要进行变号。
            tag = true;
        }
        for(int i=0;i<arr.length;i++){
            if(i==0&&(arr[i]=='+'||arr[i]=='-')) {//第一个元素为正或者负才能继续往下判断
                continue;
            }
            if(arr[i]<'0'||arr[i]>'9') {//如果这个字符不在0到9范围内说明输入不合法
                return 0;
            }
            sum=sum*10+(arr[i]-'0');//到这儿就可以计算这个int数了
        }
        return tag?(0-sum):sum;//用三目运算符来return结果,为假说明
        //是整数,直接返回sum,否则返回负的sum
    }
}

JZ50:数组中重复的数字

题目描述:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2
解题思路:运用TreeSet不允许重复的性质,每添加一个就去看一下set的size涨了没,要是没涨就说明找到重复的这个值了

import java.util.TreeSet;
public class Solution {
    // 这里要特别注意~返回任意重复的一个,赋值duplication[0]
    public boolean duplicate(int numbers[],int length,int [] duplication) {
        if(length==0){
            return false;
        }
        TreeSet<Integer> set=new TreeSet();
        for(int i=0;i<numbers.length;i++){
            set.add(numbers[i]);
            if(set.size()!=i+1){
                duplication[0]=numbers[i];
                return true;
            }
        }
        return false;
    }
}
QGis 相关技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中...) 阅读详情

相关推荐

告别数据丢失焦虑:用Python手把手实现Reed-Solomon码(附完整代码)

本文详细介绍了如何使用Python实现Reed-Solomon纠错码(RS码),帮助开发者有效防止数据丢失。通过基础编解码实战、文件保护方案和高级性能优化技巧,读者可以轻松掌握这一前向纠错技术,应用于物联网、文件存储和网络传输等场景,提升数据可靠性。

weixin_42527160的博客 222

JZ50、JZ57、JZ56

JZ50、JZ57、JZ56

weixin_48434658的博客 564

高通9008模式隐藏技巧:不拆机用ADB命令+Diag协议进入EDL

本文深入解析高通EDL模式(紧急下载模式)的技术原理与实战应用,详细介绍了通过ADB命令和Diag协议无需拆机进入EDL的方法。涵盖硬件/软件触发方案、跨平台工具配置、Firehose协议解析及设备救砖流程,为开发者提供从基础到进阶的完整指南。

weixin_29191761的博客 1123

Java NIO 通道(Channel) 学习笔记

 一、通道(Channel):用于源节点与目标节点的连接。在 Java NIO 中负责缓冲区中数据的传输。Channel 本身不存储数据,因此需要配合缓冲区进行传输。    二、通道的主要实现类      java.nio.channels.Channel 接口:          |--FileChannel          |--SocketChannel          |--Serve...

YuZongTao 12万+

AFSIM仿真系统组件开发入门:手把手教你扩展传感器与武器模型

本文为AFSIM仿真系统组件开发入门指南,手把手教你如何扩展传感器与武器模型。通过深入解析AFSIM基于组件的体系结构,并结合构建自定义电子扫描阵列雷达传感器和协同交战智能武器系统两个实战案例,详细介绍了从C++插件开发、MATLAB算法集成到脚本接口暴露的完整流程,帮助你掌握定制AFSIM仿真的核心能力。

t8u9v0w1x的博客 488

国产麒麟系统PXE安装-UEFI引导

注意: 适用uefi引导 适用x86_64架构 一键部署脚本扣我 1.上传ISO到PXE服务器,拷贝ISO文件 # mkdir /kylin_iso # mount -o loop Kylin-Server-10-SP1-Release-Build04-20200711-x86_64.iso /kylin_iso/ 2.配置http,获取安装源 # yum -y install httpd # mkdir /var/www/html/{ks,kylin} # 注意一定是"/kylin_iso/

河静 5053

关系型数据库VS非关系型数据库

关系型数据库及其优缺点 关系型数据库(Mysql和Oracle):指采用了关系模型来组织数据的数据库,关系模型指的就是二维表模型,关系型数据库就是由二维表以及表与表之间的联系组成;常见的关系型数据库有Oracle、SQLServer、MySql 先来看一下关系型数据库的常见概念 关系:关系是一张表,像上图那样的一张表, 元组:表中的每行(即数据库中的每条记录)就是一个元组,也称记录, 属性:二维表中的每列就是属性,在数据库中被称为字段;数据库之间列无联系,行有联系 域:属性的取值范围,数据库中每一列的取值

chris__x的博客 542

JMeter 压测实战全教程

脚本结构:测试计划 → 线程组 → HTTP 请求 → 监听器运行方式:图形化调试,命令行生产压测核心指标:QPS、RT、错误率、CPU、GC。

weixin_48309090的博客 651

剑指JZ50—数组中重复的数字

题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 解题思路 下标法,由于已经给出了数字在0到n - 1的范围内,因此就可以把数字和对应的下标结合起来 方法一中的一个条件我们没有用到。也就是数据的范围是0-n-1。所以我们可以这么做: 设置一个指针i指向开头0,

jianghuia的博客 197

蓝牙Mesh安全机制全解析:如何防止你的智能门锁被黑客控制?

本文深入解析蓝牙Mesh安全机制,重点探讨如何保护智能门锁免受黑客攻击。详细介绍了蓝牙Mesh的多层次安全架构,包括密钥管理体系、设备入网流程及实战防护策略,帮助用户构建更安全的智能家居网络。

h3i4j的博客 729

IPD流程中的RR\OR\IR\PB\SR\AR\CR等名词汇总(基于新的产品包需求架构)

RR:Raw Requirement,原始需求=》IR:Initial Requirement,初始需求=》SR:System Requirement,系统需求=》AR:Allocated Requirement,分配需求=》CR:Process Change Requirement,流程变更需求。

a1809032425的博客 3188

【JZ50 第一个只出现一次的字符】

描述 在一个长为 字符串中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数) 数据范围: 0 ≤ n ≤ 10000,且字符串只有字母组成。 要求:空间复杂度 O(n),时间复杂度 O(n) 示例1 输入:"google" 返回值:4 示例2 输入:"aa" 返回值:-1 方法一:哈希表统计频率(推荐使用) 知识点:哈希表 哈希表是一种根据关键码(key)直接访问值(value)的一种数据结构。而这种直接访问意味着只要知道key就能在 O(1)

Sugar_wolf的博客 482

TensorFlow2深度学习实战(十四):目标检测算法 YOLOv4 解析

最易上手的【计算机视觉】小白教程!

不积跬步,无以至千里! 7632

【剑指offer@JZ1--JZ10】

以前总是断断续续的刷剑指offer,现在准备以10道题为一组进行整理分析方便复习查看,按牛客网上剑指offer的题号进行排序,欢迎浏览。 JZ1:二维数组中的查找 题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解题思路:这个题相对比较简单,两个for循环,一个控制数组长度,一个控制每个arr[i]的长度,找到就返回true; public static

chris__x的博客 404

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【剑指offer@JZ31--JZ40】

JZ31:从1到n,1出现的次数 题目描述:1~13中包含1的数字有1、10、11、12、13因此共出现6次,(从1 到 n 中1出现的次数?)。 解题思路:把这个数转化成字符数组,逐个去遍历统计 public class Solution { public int NumberOf1Between1AndN_Solution(int n) { int count=0; while(n>0){ String str=String.valu

chris__x的博客 361

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【剑指offer@JZ11--JZ20】

JZ11:二进制中1的个数 题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示 解题思路:每次 n & (n-1) 都会使得二进制数据的最右边的一个1变为0,所以有多少个1就会执行循环多少次 public class Solution { public int NumberOf1(int n) { int count=0; while(n!=0){ count++; n=n&(n-1

chris__x的博客 346

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【剑指offer@JZ21--JZ30】

JZ21:栈的压入弹出序列 题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 解题思路:新创建一个栈,把第一个数组压栈,如果第二个数组的元素和栈内的元素相等就弹出,遍历完之后,如果栈内为空,则说明是它弹出的一个序列 import java.util

chris__x的博客 316

【测试用例练习】六、水杯

先问一下什么杯子哈,比如有普通杯、保温杯、儿童杯、大水壶,不管哪种类型,大致从以下几个维度去测也是可以的 一、功能测试 1、水倒满会不会流出来 2、有没有规定倒水的安全线 3、水杯容量有没有刻度,刻度与标准容量是否一致 4、盖子拧紧水倒不出来 5、装热水会不会烫手 6、杯盖拧紧后会不会很难打开 7、如果是保温杯对保温功能进行测试 8、保温杯长期装凉水,会不会不保温 9、杯子的清洗是否方便,有没有带杯刷 10、杯子是否可以泡茶、泡咖啡等 11、杯子可不可以放冰箱 12、杯子的材质是否易碎 13、保温杯杯盖上会

chris__x的博客 882

剑指Offer——JZ41.和为S的连续正数序列【滑动窗口】【√N复杂度数学解法】

题目传送门 题解 暴力直接gun粗 对于连续区间的问题,前缀和滑动窗口都是不错的方案。 滑动窗口的解法的时间复杂度很显然是 O(N)O(N)O(N),实际时间复杂的可以常数降低至 O(N2)O(\frac{N}{2})O(2N​) 前缀的话,一遍求前缀数组,然后按照滑动窗口的方式。其实最终都是滑动窗口的思维方式,因为O(N2)O(N^2)O(N2) 枚举起终点的解法太垃圾了 还有一种官方没有的解法,时间复杂度可以降低至 O(N)O(\sqrt{N})O(N​): 如果长度为 nnn 的连续整数和

NIRVANA REBIRTH 363

【JZ47】**1+2...+n(&&短路原理)

pass

张林克的博客 222

JZ41 --- 和为S的连续正数序列

题目描述: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序 题解: 类滑动窗口,但是此题中滑动窗口大小可随意变动。 publ

qq_43632625的博客 194

【目标检测】小目标检测问题及解决方法

本部分主要节选自 《Augmentation for small object detection》。 针对目标检测中的小目标问题,主要有以下几种解决方法: (1) 增加输入图片分辨率 [1,2] (2) 混合多尺度特征 [3,4,5,6] (3) 用 GAN 来区分大物体/小物体特征,然后对小物体特征转化为更精细的特征以此加强小目标的检测 [7] (4) 检测小物体时增加上下文信息 [8,9,1...

Chris_zhangrx的博客 5223

《面试算法 LeetCode 刷题班》—— 1. 链表

本文内容是基于小象学院——林沐 《面试算法 LeetCode 刷题班》,后期仍将对相关内容进行不定期更新! 1.链表 文章目录1.链表LeetCode 206 链表逆序 a (E)LeetCode 92 链表逆序 b(M)LeetCode 141 &amp;amp; 142 链表求环(M) (快慢指针问题)LeetCode 86 链表划分(M)LeetCode 21 排序链表合并(2个)(E)LeetCo...

Chris_zhangrx的博客 3333

剑指Offer——JZ47.求1+2+3+...+n【使用&&特性控制递归边界】

题目传送门 题解 直接通项公式即可,不过不够亮点, 循环肯定是不允许的,如果使用递归,一般都需要if来控制边界 可以使用 && 的特性(如果前面false,则不判断后面)来控制递归边界 AC-Code class Solution { public: int Sum_Solution(int n) { n > 1 && (n += Sum_Solution(n-1)); return n; } }; ...

NIRVANA REBIRTH 384

剑指Offer:JZ41 - 和为S的连续正数序列(解题思路+Java代码)

小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!

枫叶火火的博客 258

Netty源码解析(八) —— channel的read操作

客户端channel在建立连接之后会关注read事件,那么read事件在哪触发的呢? NioEventLoop中 /** * 读事件和 accept事件都会经过这里,但是拿到的unsafe对象不同 所以后续执行的read操作也不一样 * NioServerChannel进行accept操作 ...

fanday的博客 2万+
上一篇: 关于测试你不得不知的面试问题
下一篇: 【Linux】日志查看方式都有哪些?
奇幻岛
博客等级 码龄8年 268粉丝 144原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值