[编程题] [编程题] 荷兰棋问题
时间:2020-08-08
本文章向大家介绍[编程题] [编程题] 荷兰棋问题,主要包括[编程题] [编程题] 荷兰棋问题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
[编程题] 荷兰棋问题
题目信息
要求把数组中的指定起始位置的元素按照比p小的放一边,比p大的放一边,等于p的放中间.返回相同值的索引值
思路
左边用一个指针不断框比p小的,右边一个指针不断框比p大的,然后中间的值不动。
注意
右边的值交换过来的话,是需要重新对这个值进行一次判断的,而不能直接index++.
Java代码
package interviewcode;
import com.sun.xml.internal.ws.client.MonitorRootClient;
import java.util.Arrays;
/**
* @author jiyongjia
* @create 2020/8/8 - 21:02
* @descp: 要求把数组中的比p小的放一边,比p大的放一边,等于p的放中间.返回相同值的索引值
*/
public class P27_荷兰国棋 {
public static void main(String[] args) {
int[] ints = {2, 3, 21, 21, 4, 2, 5, 3, 723, 223, 12, 63};
System.out.println(Arrays.toString(ints));
int[] test = test(ints, 0, ints.length - 1, 21);
//打印出了相同值的索引第位置
System.out.println(Arrays.toString(test));
System.out.println(Arrays.toString(ints));
}
public static int[] test(int[] arr,int L,int R,int p){
int l = L-1;
int r = R+1;
int cur = L;
while (cur< r){
if(arr[cur] < p){
swap(arr,++l,cur++);
}else if(arr[cur] > p){
swap(arr,--r,cur); //这里先别变,再判断一次这个值【注意】
}else{
cur++;
}
}
return new int[]{l+1,r-1};
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
输出:
以21为例
原文地址:https://www.cnblogs.com/jiyongjia/p/13460636.html
- 用Qt写软件系列五:一个安全防护软件的制作(1)
- Linux文件管理
- 为什么区块链会成为消除数字化营销障碍的解决方案
- TinyOS和Deluge的安装模拟(二)
- Kubernetes的服务网格(第4部分):通过流量切换持续部署
- QTableView表格视图的列宽设置
- OpenProcess打开进程返回错误的问题
- Python标准库01 正则表达式 (re包)
- 剑指OFFER之栈的压入、弹出序列(九度OJ1366)
- Python标准库03 路径与文件 (os.path包, glob包)
- AI人工智能时代已经到来 “北斗即时判”实现纯语音交互
- 剑指OFFER之链表中倒数第k个节点(九度OJ1517)
- 用Qt写软件系列四:定制个性化系统托盘菜单
- Linux简介与厂商版本
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法