制作网站公司唐山/石家庄网站建设案例

制作网站公司唐山,石家庄网站建设案例,西安免费网站搭建制作,wordpress 网站暂停1. 请找出增序排列中一个数字第一次和最后一次出现的数组下标 定义 由于数组是增序排列的,我们可以利用二分查找的特性来高效地定位目标数字。对于查找第一次出现的位置,当中间元素等于目标数字时,我们需要继续向左搜索,以确保找…

1. 请找出增序排列中一个数字第一次和最后一次出现的数组下标

  • 定义

由于数组是增序排列的,我们可以利用二分查找的特性来高效地定位目标数字。对于查找第一次出现的位置,当中间元素等于目标数字时,我们需要继续向左搜索,以确保找到最左边的目标数字;对于查找最后一次出现的位置,当中间元素等于目标数字时,我们需要继续向右搜索,以确保找到最右边的目标数字。

  • 要点
  1. 采用二分查找算法,其时间复杂度为 O(logn),可以大大提高查找效率。
  2. 分别编写两个二分查找函数,一个用于查找第一次出现的位置,另一个用于查找最后一次出现的位置。

代码示例

java

public class FindFirstAndLastPosition {public static int[] searchRange(int[] nums, int target) {int first = findFirst(nums, target);int last = findLast(nums, target);return new int[]{first, last};}private static int findFirst(int[] nums, int target) {int left = 0, right = nums.length - 1;int result = -1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] >= target) {right = mid - 1;if (nums[mid] == target) {result = mid;}} else {left = mid + 1;}}return result;}private static int findLast(int[] nums, int target) {int left = 0, right = nums.length - 1;int result = -1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] <= target) {left = mid + 1;if (nums[mid] == target) {result = mid;}} else {right = mid - 1;}}return result;}public static void main(String[] args) {int[] nums = {1, 2, 2, 2, 3, 4, 4, 5};int target = 2;int[] range = searchRange(nums, target);System.out.println("First position: " + range[0]);System.out.println("Last position: " + range[1]);}
}

  • 应用

若数组不是严格增序,存在重复元素且可能有相等元素打乱顺序的情况,可先对数组进行排序,再使用上述方法。不过排序会增加额外的时间复杂度,如使用快速排序,时间复杂度为 O(nlogn)。

2. 如何实现海量数据去重

  • 定义
  1. 哈希表:利用哈希表的特性,其键具有唯一性。将数据作为键插入哈希表中,重复的数据会自动覆盖,最终哈希表中的键即为去重后的数据。
  2. 位图(BitMap):对于整数数据,位图是一个不错的选择。位图是一个二进制数组,每个位代表一个数据,通过设置相应位的值来标记数据的出现情况。

  • 要点
  1. 哈希表适用于各种类型的数据,但需要较多的内存空间,空间复杂度为 O(n)。
  2. 位图适用于整数数据,内存占用较小,但数据范围不能太大。

代码示例(哈希表)

java

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;public class MassiveDataDeduplication {public static List<Integer> deduplicate(List<Integer> data) {Set<Integer> set = new HashSet<>();List<Integer> result = new ArrayList<>();for (int num : data) {if (set.add(num)) {result.add(num);}}return result;}public static void main(String[] args) {List<Integer> data = List.of(1, 2, 2, 3, 4, 4, 5);List<Integer> deduplicatedData = deduplicate(data);System.out.println(deduplicatedData);}
}

  • 应用

当数据量极大,无法全部加载到内存时,可采用分治策略。将数据分成多个小文件,分别对每个小文件进行去重,最后再合并结果。这样可以降低单次处理的数据量,避免内存溢出。

3. 如何找出海量数据中前 10 个最大的数(数据有重复)

  • 定义

可以使用最小堆来解决该问题。首先创建一个大小为 10 的最小堆,将前 10 个数据插入堆中。然后遍历剩余的数据,如果当前数据大于堆顶元素,则将堆顶元素替换为当前数据,并调整堆,以保持最小堆的性质。最后堆中的元素就是前 10 个最大的数。

  • 要点
  1. 最小堆的时间复杂度为 O(nlogk),其中 n 是数据的总数,k 是要找的最大数的个数。
  2. 堆的插入和删除操作的时间复杂度为 O(logk)。

代码示例

java

import java.util.PriorityQueue;public class TopKNumbers {public static int[] topK(int[] nums, int k) {PriorityQueue<Integer> minHeap = new PriorityQueue<>(k);for (int i = 0; i < nums.length; i++) {if (i < k) {minHeap.offer(nums[i]);} else if (nums[i] > minHeap.peek()) {minHeap.poll();minHeap.offer(nums[i]);}}int[] result = new int[k];for (int i = k - 1; i >= 0; i--) {result[i] = minHeap.poll();}return result;}public static void main(String[] args) {int[] nums = {3, 2, 1, 5, 6, 4};int k = 2;int[] topK = topK(nums, k);for (int num : topK) {System.out.print(num + " ");}}
}

  • 应用

可以考虑使用分布式算法,将数据分散到多个节点上,每个节点找出自己的前 10 个最大的数,然后将这些结果合并,再找出最终的前 10 个最大的数。这样可以充分利用分布式系统的并行计算能力,提高处理效率。

4. 数组先升序在降序,找出最大数

  • 定义

由于数组先升序后降序,我们可以使用二分查找来找到最大数。通过比较中间元素和其相邻元素的大小,来判断最大数在左半部分还是右半部分。

  • 要点
  1. 二分查找的时间复杂度为 O(logn),可以高效地找到最大数。
  2. 比较中间元素和其相邻元素的大小,以此来确定最大数的位置。

代码示例

java

public class FindMaxInAscDescArray {public static int findMax(int[] nums) {int left = 0, right = nums.length - 1;while (left < right) {int mid = left + (right - left) / 2;if (nums[mid] < nums[mid + 1]) {left = mid + 1;} else {right = mid;}}return nums[left];}public static void main(String[] args) {int[] nums = {1, 2, 3, 4, 5, 4, 3, 2, 1};int max = findMax(nums);System.out.println("Max number: " + max);}
}

  • 应用

若数组中有重复元素,需要对二分查找的条件进行适当调整。例如,当中间元素与其相邻元素相等时,需要进一步判断左右两侧的趋势。

5. 正整数数组,如何拼出一个最大的正数

  • 定义

自定义排序规则,将数组中的元素进行排序。排序规则是将两个元素拼接成两个字符串,比较这两个字符串的大小,将拼接后较大的字符串对应的元素排在前面。

  • 要点
  1. 自定义排序规则,使用 Comparator 接口。
  2. 将元素拼接成字符串进行比较。

代码示例

java

import java.util.Arrays;
import java.util.Comparator;public class LargestNumber {public static String largestNumber(int[] nums) {String[] strs = new String[nums.length];for (int i = 0; i < nums.length; i++) {strs[i] = String.valueOf(nums[i]);}Arrays.sort(strs, new Comparator<String>() {@Overridepublic int compare(String s1, String s2) {return (s2 + s1).compareTo(s1 + s2);}});if (strs[0].equals("0")) {return "0";}StringBuilder sb = new StringBuilder();for (String str : strs) {sb.append(str);}return sb.toString();}public static void main(String[] args) {int[] nums = {3, 30, 34, 5, 9};String largest = largestNumber(nums);System.out.println("Largest number: " + largest);}
}

  • 应用

若数组中包含负数,需要先将负数进行处理,例如将负数转换为正数,或者在排序时单独处理负数。

6. 一个正整数数组,给其中一个数字加 1,使得所有数乘积最大,找出加 1 的那个数字

  • 定义

遍历数组,计算给每个数字加 1 后的所有数的乘积,找出乘积最大时对应的数字。

  • 要点
  1. 遍历数组,计算每种情况下的乘积。
  2. 记录最大乘积和对应的数字下标。

代码示例

java

public class MaxProductAfterIncrement {public static int findNumberToIncrement(int[] nums) {int maxProduct = Integer.MIN_VALUE;int index = -1;for (int i = 0; i < nums.length; i++) {int product = 1;for (int j = 0; j < nums.length; j++) {if (j == i) {product *= (nums[j] + 1);} else {product *= nums[j];}}if (product > maxProduct) {maxProduct = product;index = i;}}return index;}public static void main(String[] args) {int[] nums = {1, 2, 3};int index = findNumberToIncrement(nums);System.out.println("Index of number to increment: " + index);}
}

  • 应用

可以考虑优化算法,通过数学推导找出更高效的方法。例如,分析数组元素的大小关系,找出对乘积影响最大的元素。

7. 手写快排、堆排 二分查找

  • 快速排序

java

public class QuickSort {public static void quickSort(int[] nums, int left, int right) {if (left < right) {int pivotIndex = partition(nums, left, right);quickSort(nums, left, pivotIndex - 1);quickSort(nums, pivotIndex + 1, right);}}private static int partition(int[] nums, int left, int right) {int pivot = nums[right];int i = left - 1;for (int j = left; j < right; j++) {if (nums[j] < pivot) {i++;swap(nums, i, j);}}swap(nums, i + 1, right);return i + 1;}private static void swap(int[] nums, int i, int j) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}public static void main(String[] args) {int[] nums = {3, 2, 1, 5, 6, 4};quickSort(nums, 0, nums.length - 1);for (int num : nums) {System.out.print(num + " ");}}
}

  • 堆排序

java

public class HeapSort {public static void heapSort(int[] nums) {int n = nums.length;// 构建最大堆for (int i = n / 2 - 1; i >= 0; i--) {heapify(nums, n, i);}// 一个个交换元素for (int i = n - 1; i > 0; i--) {// 将堆顶元素(最大值)与当前未排序部分的最后一个元素交换int temp = nums[0];nums[0] = nums[i];nums[i] = temp;// 重新调整堆heapify(nums, i, 0);}}private static void heapify(int[] nums, int n, int i) {int largest = i;int left = 2 * i + 1;int right = 2 * i + 2;// 如果左子节点大于根节点if (left < n && nums[left] > nums[largest]) {largest = left;}// 如果右子节点大于当前最大节点if (right < n && nums[right] > nums[largest]) {largest = right;}// 如果最大节点不是根节点if (largest != i) {int swap = nums[i];nums[i] = nums[largest];nums[largest] = swap;// 递归调整受影响的子树heapify(nums, n, largest);}}public static void main(String[] args) {int[] nums = {3, 2, 1, 5, 6, 4};heapSort(nums);for (int num : nums) {System.out.print(num + " ");}}
}

  • 二分查找

java

public class BinarySearch {public static int binarySearch(int[] nums, int target) {int left = 0, right = nums.length - 1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] == target) {return mid;} else if (nums[mid] < target) {left = mid + 1;} else {right = mid - 1;}}return -1;}public static void main(String[] args) {int[] nums = {1, 2, 3, 4, 5};int target = 3;int index = binarySearch(nums, target);System.out.println("Index of target: " + index);}
}

8. 手写单词接龙的程序

java

import java.util.*;public class WordChain {public static boolean isValidChain(List<String> words) {if (words.size() <= 1) {return true;}for (int i = 1; i < words.size(); i++) {String prev = words.get(i - 1);String curr = words.get(i);if (prev.charAt(prev.length() - 1) != curr.charAt(0)) {return false;}}return true;}public static void main(String[] args) {List<String> words = Arrays.asList("apple", "elephant", "tiger");boolean isValid = isValidChain(words);System.out.println("Is valid chain: " + isValid);}
}

9. 如何实现括号匹配

  • 定义

使用栈来实现括号匹配。遍历字符串,遇到左括号时将其压入栈中,遇到右括号时,检查栈顶元素是否为对应的左括号,如果是则弹出栈顶元素,否则返回不匹配。最后检查栈是否为空,如果为空则匹配成功。

  • 要点
  1. 使用栈来存储左括号。
  2. 遍历字符串,根据括号类型进行相应的操作。

代码示例

java

import java.util.Stack;public class BracketMatching {public static boolean isValid(String s) {Stack<Character> stack = new Stack<>();for (char c : s.toCharArray()) {if (c == '(' || c == '[' || c == '{') {stack.push(c);} else {if (stack.isEmpty()) {return false;}char top = stack.pop();if ((c == ')' && top != '(') || (c == ']' && top != '[') || (c == '}' && top != '{')) {return false;}}}return stack.isEmpty();}public static void main(String[] args) {String s = "()[]{}";boolean isValid = isValid(s);System.out.println("Is valid: " + isValid);}
}

  • 应用

可以考虑处理多种类型的括号嵌套的情况,以及处理包含其他字符的字符串。在处理时,需要忽略非括号字符,只对括号进行匹配检查。

10. 一个数组存着负数与正数,将正数放在前面,负数放在后面

  • 定义

使用双指针法,一个指针从左往右遍历,一个指针从右往左遍历。当左指针指向负数,右指针指向正数时,交换两个指针所指的元素。

  • 要点
  1. 使用双指针,时间复杂度为 O(n)。
  2. 交换元素的位置。

代码示例

java

public class RearrangeArray {public static void rearrange(int[] nums) {int left = 0, right = nums.length - 1;while (left < right) {while (left < right && nums[left] > 0) {left++;}while (left < right && nums[right] < 0) {right--;}if (left < right) {int temp = nums[left];nums[left] = nums[right];nums[right] = temp;}}}public static void main(String[] args) {int[] nums = {1, -2, 3, -4, 5};rearrange(nums);for (int num : nums) {System.out.print(num + " ");}}
}

  • 应用

若要保持正数和负数的相对顺序不变,可以使用额外的数组来实现。先将正数存入一个数组,再将负数存入另一个数组,最后将两个数组合并。不过这种方法会增加额外的空间复杂度,为 O(n)。

 友情提示:本文已经整理成文档,可以到如下链接免积分下载阅读

https://download.csdn.net/download/ylfhpy/90535149

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

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

相关文章

CentOS 7安装 mysql

CentOS 7安装 mysql 1. yum 安装 mysql 配置mysql源 yum -y install mysql57-community-release-el7-10.noarch.rpm安装MySQL服务器 yum -y install mysql-community-server启动MySQL systemctl start mysqld.service查看MySQL运行状态&#xff0c;运行状态如图&#xff…

docker安装,镜像,常用命令,Docker容器卷,Docker应用部署,自定义镜像,Docker服务编排,创建私有仓库

1.为什么使用docker 如果开发环境和测试环境的允许软件版本不一致&#xff0c;可能会导致项目无法正常启动 把环境和项目一起打包发送给测试环境 1.1docker的概念 开源的应用容器引擎&#xff0c;完全使用沙箱机制&#xff0c;相互隔离&#xff0c;容器性能开销极低 一种容…

Manus的开源替代者之一:OpenManus通用AI智能体框架解析及产品试用

引言 在AI智能体领域&#xff0c;Monica团队近期发布的Manus被誉为全球首个通用型AI智能体。该项目推出后迅速爆红&#xff0c;邀请码一号难求&#xff0c;随之而来的是各路开发者快速构建了众多类似的开源替代方案。其中&#xff0c;MetaGPT团队的5位工程师仅用3小时就开发完…

HDR(HDR10/ HLG),SDR

以下是HDR&#xff08;HDR10/HLG&#xff09;和SDR的详细解释&#xff1a; 1. SDR&#xff08;Standard Dynamic Range&#xff0c;标准动态范围&#xff09; • 定义&#xff1a;SDR是传统的动态范围标准&#xff0c;主要用于8位色深的视频显示&#xff0c;动态范围较窄&…

uni-app页面怎么设计更美观

顶部 页面最顶部要获取到手机设备状态栏的高度&#xff0c;避免与状态栏重叠或者被状态栏挡住 // 这是最顶部的父级容器 <view :style"{ paddingTop: ${statusBarHeight extraPadding}px }">.... </view> export default {data() {return {statusBarH…

江西核威环保科技:打造世界前沿的固液分离设备高新企业

随着市场经济的不断发展&#xff0c;消费者的需求越来越大&#xff0c;为了更好的服务广大新老客户&#xff0c;作为知名品牌的“江西核威环保科技有限公司&#xff08;以下简称江西核威环保科技&#xff09;”&#xff0c;将坚持以“服务为企业宗旨&#xff0c;全力打造世界前…

PTA 1097-矩阵行平移

给定一个&#x1d45b;&#x1d45b;nn的整数矩阵。对任一给定的正整数&#x1d458;<&#x1d45b;k<n&#xff0c;我们将矩阵的奇数行的元素整体向右依次平移1、……、&#x1d458;、1、……、&#x1d458;、……1、……、k、1、……、k、……个位置&#xff0c;平移…

C++蓝桥杯实训篇(一)

片头 嗨~小伙伴们&#xff0c;大家好&#xff01;现在我们来到实训篇啦~本篇章涉及算法知识&#xff0c;比基础篇稍微难一点&#xff0c;我会尽量把习题讲的通俗易懂。准备好了吗&#xff1f;咱们开始咯&#xff01; 第1题 递归实现指数型枚举 我们先画个图~ 从图中&#xff…

CentOS(最小化)安装之后,快速搭建Docker环境

本文以VMware虚拟机中安装最小化centos完成后开始。 1. 检查网络 打开网卡/启用网卡 执行命令ip a查看当前的网络连接是否正常&#xff1a; 如果得到的结果和我一样&#xff0c;有ens网卡但是没有ip地址&#xff0c;说明网卡未打开 手动启用&#xff1a; nmcli device sta…

软考《信息系统运行管理员》- 5.3 信息系统数据资源备份

文章目录 数据资源备份类型按数据备份模式分按备份过程中是否可接收用户响应和数据更新分按数据备份策略分按备份的实现方式分按数据备份的存储方式分 常用备份相关技术磁盘阵列技术双机热备 某公司数据备份管理制度实例 数据资源备份类型 数据备份系统由硬件和软件两部分组成…

H3CNE综合小实验之电视机

H3CNE综合小实验之电视机 一、实验拓扑图 二、实验要求 按照图示配置IP地址&#xff1b;按照图示区域划分配置对应的动态路由协议&#xff1b;在R7上配置dhcp服务器&#xff0c;能够让pc可以获取IP地址&#xff1b;将所有环回⼝宣告进ospf中&#xff0c;将环回⼝7宣告进rip中…

Axios企业级封装实战:从拦截器到安全策略!!!

&#x1f680; Axios企业级封装实战&#xff1a;从拦截器到安全策略 &#x1f527; 核心代码解析 // 创建Axios实例 const service axios.create({baseURL: api, // &#x1f310; 全局API前缀timeout: 0, // ⏳ 永不超时&#xff08;慎用&#xff01;&#xff09;withCrede…

DCAT模型:双交叉注意力革新医学影像诊断,AUC 99.75%

一、研究背景&#xff1a;医学影像诊断的挑战 在医学影像领域&#xff08;如X光、OCT&#xff09;&#xff0c;精准分类疾病直接影响患者治疗决策。传统深度学习模型存在两大痛点&#xff1a; 1.过度自信&#xff1a;即使图像模糊或存在噪声&#xff0c;模型仍可能给出高…

2.2.2 Spark单机版环境

本文介绍了如何搭建和使用Spark单机版环境。首先&#xff0c;确保安装配置好JDK&#xff0c;然后从群共享下载Spark安装包并上传至云主机的/opt目录。接着&#xff0c;解压到/usr/local目录并配置环境变量&#xff0c;通过spark-submit --version验证安装成功。在使用Spark单机…

SAP消息号类型(E/I/W)的定制

比如这样的M8088的标准的消息号&#xff0c;希望变更消息类型&#xff0c;查询之后&#xff0c;网上提供的消息&#xff0c;都是SE91,OMRM&#xff0c;OBA5之类的消息。事实上&#xff0c;SE91是不能变更消息类型的。 而在OMRM界面&#xff0c;只看到有限的几个消息号。 原来&a…

wazuh安全管理工具

Wazuh 通过监控操作系统和应用程序层面的终端设备&#xff0c;增强您基础设施的安全可见性。其核心功能涵盖日志分析、文件完整性监控、入侵检测以及合规性监控。 一、介绍 1. 核心功能 1.1 主机入侵检测&#xff08;HIDS&#xff09; 文件完整性监控&#xff08;FIM&#…

MATLAB 控制系统设计与仿真 - 29

用极点配置设计伺服系统 方法1-前馈修正 对于一个可控的系统&#xff0c;我们知道可以用极点配置来得到系统的动态响应指标&#xff0c;但是系统有时会存在较大的静态误差。 例如&#xff1a; 系统的状态矩阵如下&#xff0c;试求取其阶跃响应。 MATLAB 代码如下&#xff1…

编译原理——自底向上语法优先分析

文章目录 自底向上优先分析概述一、自底向上优先分析概述二、简单优先分析法&#xff08;一&#xff09;优先关系定义&#xff08;二&#xff09;简单优先文法的定义&#xff08;三&#xff09;简单优先分析法的操作步骤 三、算法优先分析法&#xff08;一&#xff09;直观算符…

Opencv计算机视觉编程攻略-第四节 图直方图统计像素

Opencv计算机视觉编程攻略-第四节 图直方图统计像素 1.计算图像直方图2.基于查找表修改图像3.直方图均衡化4.直方图反向投影进行内容查找5.用均值平移法查找目标6.比较直方图搜索相似图像7.用积分图统计图像 1.计算图像直方图 图像统计直方图的概念 图像统计直方图是一种用于描…

5、vim编辑和shell编程【超详细】

一、vim 1、了解 Vim (Vi IMproved) 是一款功能强大的文本编辑器。 正常模式&#xff1a;vim 文件&#xff0c;刚打开的样子vim模式&#xff1a;输入文本的地方命令模式&#xff1a;输入 :wq等等的位置&#xff0c;可以对文本进行一些操作&#xff0c;比如&#xff1a;保存文…