牛客剑指offer刷题其他算法篇

文章目录

      • 构建乘积数组
        • 题目
        • 思路
        • 代码实现
      • 第一个只出现一次的字符
        • 题目
        • 思路
        • 代码实现
      • 替换空格
        • 题目
        • 思路
        • 代码实现
      • 调整数组顺序使奇数位于偶数前面(一)
        • 题目
        • 思路
        • 代码实现
      • 数组中出现次数超过一半的数字
        • 题目
        • 思路
        • 代码实现
      • 整数中1出现的次数(从1到n整数中1出现的次数)
        • 题目
        • 思路
        • 代码实现

构建乘积数组

题目

描述
给定一个数组 A[0,1,…,n-1] ,请构建一个数组 B[0,1,…,n-1] ,其中 B 的元素 B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1](除 A[i] 以外的全部元素的的乘积)。程序中不能使用除法。(注意:规定 B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2])
对于 A 长度为 1 的情况,B 无意义,故而无法构建,用例中不包括这种情况。

数据范围:1≤n≤10 ,数组中元素满足 ∣val∣≤10

示例1
输入:
[1,2,3,4,5]
返回值:
[120,60,40,30,24]

示例2
输入:
[100,50]
返回值:
[50,100]
牛客题目链接

思路

采用双重for循环,外循环i倒序遍历数组,内循环j顺序遍历数组,内循环中当i!=j时,乘上当前A[j](除 A[i] 以外的全部元素的的乘积),同时每次内循环遍历一遍后,需要将临时数据重置,结果在外循环中存储;

代码实现
public int[] multiply (int[] A) {if(A == null || A.length < 2){return new int[0];}int[] res = new int[A.length];int sum = 0;for(int i = A.length - 1;i>=0;i--){sum = 1;for(int j = 0; j < A.length;j++){if(i != j){sum *= A[j];}}res[i] = sum;}return res;}

第一个只出现一次的字符

题目

描述
在一个长为 字符串中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)

数据范围:0≤n≤10000,且字符串只有字母组成。
要求:空间复杂度 O(n),时间复杂度 O(n)

示例1
输入:
“google”
返回值:
4

示例2
输入:
“aa”
返回值:
-1
牛客题目链接

思路

采用HashMap + 两次for循环处理,第一次for循环记录每个字符出现的次数,第二次for循环找出第一个出现一次的字符。

代码实现
public int FirstNotRepeatingChar (String str) {if(str == null){return -1;}HashMap<Character,Integer> hash = new HashMap();for(int i = 0; i<str.length();i++){char a = str.charAt(i);if(hash.containsKey(a)){hash.put(a,2);//没必要统计字符出现的次数,不要设置不为1即可。}else{hash.put(a,1);}}for(int i = 0; i < str.length();i++){char a = str.charAt(i);if(hash.get(a) == 1){return i;}}return -1;}

替换空格

题目

描述
请实现一个函数,将一个字符串s中的每个空格替换成“%20”。
例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

数据范围:0≤len(s)≤1000 。保证字符串中的字符为大写英文字母、小写英文字母和空格中的一种。

示例1
输入:
“We Are Happy”
返回值:
“We%20Are%20Happy”

示例2
输入:
" "
返回值:
“%20”
牛客题目链接

思路

直接for循环判断拼接;

代码实现
public String replaceSpace (String s) {if(s == null || s.length() == 0){return s;}StringBuilder res = new StringBuilder();for(int i = 0; i < s.length();i++){char c = s.charAt(i);if(' ' == c){res.append("%20");}else{res.append(c);}}return res.toString();}

调整数组顺序使奇数位于偶数前面(一)

题目

描述
输入一个长度为 n 整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前面部分,所有的偶数位于数组的后面部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

数据范围:0≤n≤5000,数组中每个数的值 0≤val≤10000
要求:时间复杂度 O(n),空间复杂度 O(n)
进阶:时间复杂度 O(n/2),空间复杂度 O(1)

示例1
输入:
[1,2,3,4]
返回值:
[1,3,2,4]

示例2
输入:
[2,4,6,5,7]
返回值:
[5,7,2,4,6]

牛客链接地址

思路

采用双指针思路,一个指针用于记录奇数从前往后遍历,则结果数组前部分记录的都是奇数,一个指针用于记录偶数从后往前遍历,则结果数组后部分记录的都是偶数,直到都遍历完整个数组为止;

代码实现
 public  int[] reOrderArray(int[] array) {if (array == null || array.length == 0) {return array;}int[] res = new int[array.length];int l = 0;int li = l;int r = array.length - 1;int ri = r;while (l < array.length && r >= 0) {if (array[l] % 2 == 1) {//当前是奇数res[li++] = array[l];}l++;if (array[r] % 2 == 0) {//当前是偶数res[ri--] = array[r];}r--;}return res;}

数组中出现次数超过一半的数字

题目

描述
给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。

数据范围:n≤50000,数组中元素的值 0≤val≤10000
要求:空间复杂度:O(1),时间复杂度 O(n)

输入描述:
保证数组输入非空,且保证有解

示例1
输入:
[1,2,3,2,2,2,5,4,2]
返回值:
2

示例2
输入:
[3,3,3,3,2,2,2]
返回值:
牛客题目链接

思路

使用哈希表统计数组中数字出现的次数,然后判断即可;

代码实现
 public int MoreThanHalfNum_Solution (int[] numbers) {HashMap<Integer,Integer> hash = new HashMap();for(int num : numbers){if(hash.containsKey(num)){hash.put(num,hash.get(num)+1);} else{hash.put(num,1);}if(hash.get(num) > numbers.length /2){return num;}}return numbers[0];}

整数中1出现的次数(从1到n整数中1出现的次数)

题目

描述
输入一个整数 n ,求 1~n 这 n 个整数的十进制表示中 1 出现的次数
例如, 1~13 中包含 1 的数字有 1 、 10 、 11 、 12 、 13 因此共出现 6 次

注意:11 这种情况算两次

数据范围: 1≤n≤30000
进阶:空间复杂度 O(1) ,时间复杂度 O(lognn)

示例1
输入:
13
返回值:
6

示例2
输入:
0
返回值:
0

思路

直接遍历每一个数字的每一位是否为1进行累加;

代码实现
 public int NumberOf1Between1AndN_Solution(int n) {int res = 0;for(int i = 1; i <= n;i++){for(int j = i;j>0;j=j/10){if(j % 10 == 1){res++;}}}return res;}

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

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

相关文章

【力扣热题100】207. 课程表 python 拓扑排序

【力扣热题100】207. 课程表 python 拓扑排序 写在最前面207. 课程表解决方案&#xff1a;判断是否可以完成所有课程的学习方法&#xff1a;拓扑排序实现步骤Python 实现性能分析结论 写在最前面 刷一道力扣热题100吧 难度中等 https://leetcode.cn/problems/course-schedule…

探索C++14新特性:更强大、更高效的编程

探索C14新特性&#xff1a;更强大、更高效的编程 C14并没有太大的改动&#xff0c;就连官方说明中也指出&#xff0c;C14相对于C11来说是一个比较小的改动&#xff0c;但是在很大程度上完善了C11&#xff0c;所以可以说C14就是在C11标准上的查漏补缺。 C14在2014年8月18日正式…

C语言——I /深入理解指针(四)

一、回调函数是什么&#xff1f; 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另⼀个函数&#xff0c;当这个指针被⽤来调⽤其所指向的函数 时&#xff0c;被调⽤的函数就是回调函数。回调函数不是由该函数的实现…

计网Lesson7 - 超网与路由概述

文章目录 一、构造超网1 概念解析2 路由聚合判断网段 3 实例演示几个配置问题&#xff1a;传输过程中的若干问题包的问题传输时丢包的问题 4 判断是子网还是超网 二、路由概述1. 路由的作用2. 多个网段进行联络3. 数据包的传输 一、构造超网 1 概念解析 与划分子网相反&#…

从0到1实现Flink 实战实时风控系统的经验总结

随着互联网金融的快速发展&#xff0c;实时风控系统成为保障业务安全和用户信任的关键。本文将分享从零开始构建Flink实时风控系统的经验&#xff0c;并提供相关示例代码。 一、搭建Flink环境 首先&#xff0c;我们需要搭建Flink环境。以下是一些基本步骤&#xff1a; 安装Ja…

创新、升级丨数据手套FOHEART Pro开启手势识别新篇章!

在人机交互领域&#xff0c;我们始终追求更加自然、逼真的体验。正如现实生活中&#xff0c;我们习惯于通过语言和表情来传达思想和情感&#xff0c;然而&#xff0c;在虚拟世界中&#xff0c;人机交互需要以更加直观、生动的方式进行操作、控制和交互。 为了更好地满足市场的…

css实现姓名两端对齐

1.1 效果 1.2 主要代码 text-align-last: justify; 1.3 html完整代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0&quo…

Vue 生成包含数字大小写字母的随机字符串

generateRandomID() {const characters 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ;const idLength 30; // 字符串长度 这里生成30位的let randomID ;for (let i 0; i < idLength; i) {const randomIndex Math.floor(Math.random() * characters…

数学建模-二氧化碳排放及时空分布测度

二氧化碳排放及时空分布测度 整体求解过程概述(摘要) 面临全球气候变化的巨大挑战&#xff0c;我国积极响应《巴黎协定》的号召&#xff0c;提出“2030年前碳达峰&#xff0c;2060 年前实现碳中和”的碳排放发展目标&#xff0c;并将碳中和相关工作作为 2021 年的重点任务之一…

吉客云与金蝶云星辰业财一体化数据集成

吉客云与金蝶云星辰业财一体化数据集成为例&#xff0c;探讨如何利用轻易云数据集成平台高效整合企业系统。金蝶云星辰在供应链和财务管理方面具有显著优势&#xff0c;而吉客云则专注于订单处理和发货。两者的协同运作&#xff0c;是企业数字化转型的典型案例。 二、集成总体蓝…

python-学生管理|汉罗塔

1.编写程序&#xff0c;实现学生信息管理系统。 运行程序&#xff0c;在控制台输入“1”之后的结果如下所示&#xff1a; 学生管理系统 1.添加学生信息 2.删除学生信息 3.修改学生信息 4.显示所有学生信息 0.退出系统 请选择功能&#xff1a;1 请输入新学生的姓名:小红 请输入…

js的考试试题

一、填空题 JavaScript有两种引用数据类型 &#xff1a;数组_、对象。Javascript通过__setTimeout___延迟指定时间后&#xff0c;去执行某程序。Javascript里String对象通过__indexOf__方法取第一次出现子字符 串的字符位置。Javascript里取字符串的长度是__.length__,取数组的…

聊聊nginx的keepalive相关参数

序 本文主要研究一下nginx的keepalive相关参数 keepalive_timeout Syntax: keepalive_timeout timeout [header_timeout]; Default: keepalive_timeout 75s; Context: http, server, location默认是75s&#xff0c;客户端的一个keep-alive连接在服务端保持open的时间&#…

排序算法:n个0~1000之间的整数,将他们从大到小排序

上榜理由&#xff1a; 如果没见过这种排序题&#xff0c;可能首先想到的就是常用的排序算法&#xff0c;比如快速排序&#xff0c;归并排序&#xff0c;那如果输入的n足够大&#xff0c;时间复杂度肯定比较高。其实题目0-1000的范围是一个题眼&#xff0c;所以一定有更优的排序…

微信小程序加载动态svg数据图片

微信小程序加载动态svg数据图片 解决方案和步骤1. 获取svg数据2. 对数据进行转码3. 在wxml中使用 微信小程序如何加载动态的svg数据图片&#xff1f; 尝试过多种方式都不可行&#xff1a; 在使用在src以base64方式使用 解决方案和步骤 通过远程服务获取svg图片数据&#xff…

商务助理个人简历10篇

商务助理简历模板下载&#xff08;可在线编辑制作&#xff09;&#xff1a;来幻主简历&#xff0c;做好简历&#xff01; 商务助理简历1&#xff1a; 求职意向 求职类型&#xff1a;全职 意向岗位&#xff1a;国际商务、产品助理 意向城市&#xff1a;广东广州 …

ElasticSearch篇---第一篇

系列文章目录 文章目录 系列文章目录前言一、谈谈分词与倒排索引的原理二、说说分段存储的思想三、谈谈你对段合并的策略思想的认识前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分…

【每日一题】确定两个字符串是否接近

文章目录 Tag题目来源题目解读解题思路与实现方法一&#xff1a;计数 其他语言python3 写在最后 Tag 【计数】【字符串】 题目来源 1657. 确定两个字符串是否接近 题目解读 你可以进行以下两种操作&#xff1a; 操作 1&#xff1a;交换任意两个位置的字符&#xff1b;操作 …

浪涌保护器参数指南:浪涌保护器行业选型方案

浪涌保护器&#xff08;SPD&#xff09;是一种用于限制瞬态过电压和泄放浪涌电流的器件&#xff0c;可有效降低电子设备在雷击、电源故障等情况下受到的损害。其主要作用是当系统发生浪涌时&#xff0c;将过电压、过电流泄放到大地&#xff0c;从而保护设备和人身安全。然而浪涌…

什么是Amazon Lambda(无服务器计算服务)

Lambda 在高可用性计算基础设施上运行代码&#xff0c;用于执行计算资源的所有管理工作。这包括服务器和操作系统维护、容量调配和弹性伸缩、代码和安全补丁部署以及代码监控和日志记录。您只需要提供代码。 最近亚马逊云服务提供了超多免费的云服务&#xff0c;快来领取免费套…