昨天晚上看到一道java笔试题,然后觉得挺有意思的。
题目如下:
写一个java程序,实现对一个二维数组按指定的列集进行排序。要求实现类似sql中order by的功能,移动时,整行移动,不能打乱整行顺序。
可将二维数组想象成数据库里的一个表记录集,然后按指定的列集进行排序,即order by col1,col2。
以下是我写的代码:
public class SortedByCol {
private int array[][] = new int[][] {
{ 12, 34, 68, 32, 9, 12, 545 },
{ 34, 72, 82, 57, 56, 0, 213 },
{ 12, 34, 68, 32, 21, 945, 23 },
{ 91, 10, 3, 2354, 73, 34, 18 },
{ 12, 83, 189, 26, 27, 98, 33 },
{ 47, 23, 889, 24, 899, 23, 657 },
{ 12, 34, 68, 343, 878, 235, 768 },
{ 12, 34, 98, 4, 56, 78, 12},
{ 26, 78, 2365, 78, 34, 256, 873 } };// 要排序的数组
private HashMap<Integer, List> nums;
private ArrayList<Integer> colist;
private ArrayList<Integer> sortedcolist;
private int col;
public SortedByCol(){
}
private void getCol(int col) {
// TODO Auto-generated method stub
colist = new ArrayList<Integer>();
for (Integer i : nums.keySet()) {
colist.add(nums.get(i).get(col));
}
}
@SuppressWarnings("unchecked")
private void colSort(){
sortedcolist = new ArrayList<Integer>();
sortedcolist = (ArrayList<Integer>) colist.clone();
System.out.println(sortedcolist);
Object[] sortedArray = sortedcolist.toArray(); //pay attention Object
Arrays.sort(sortedArray);
boolean flag = false;
for (Object value : sortedArray) {
if (colist.indexOf(value) != colist.lastIndexOf(value)) { //这里是判断那行重复的
if (!flag) {
flag = true;
for (Integer i : nums.keySet()) {
List li = nums.get(i);
if (li.get(col) == value) {
System.out.println(li);
}
}
}
} else {
int i = colist.indexOf(value);
List li = nums.get(i);
System.out.println(li);
}
}
}
public void sort(int col){
this.col = col;
// 把二维数组的每一行放入一个hashMap中,key:对应的行,value:对应的该行的数据(用
// 一个内部类list来保存
putArrayInHash();
//得到要排序的那一行的数据
getCol(col);
//进行排序
colSort();
}
private void putArrayInHash(){
nums = new HashMap<Integer, List>();
for (int i = 0; i < array.length; i++) {
List list = new List(i);
for (int j = 0; j < array[0].length; j++) {
list.put(array[i][j]);
}
nums.put(i, list);
}
}
private void test() {
System.out.println(array[1][2]);
}
public static void main(String[] args) {
SortedByCol s = new SortedByCol();
s.sort(6); //这里的6是表示选择的列
}
class List{
private ArrayList<Integer> li = new ArrayList<Integer>();
private int id;
public List(int id){
this.id = id;
}
public Integer get(int col) {
return li.get(col);
}
public void put(int j) {
li.add(j);
}
public String toString(){
StringBuilder sb = new StringBuilder();
for (Integer i : li) {
sb.append(' '+String.valueOf(i));
}
return sb.toString();
}
}
}
:)
分享到:
相关推荐
标题中的“答复: 一道经典线程面试题的4种解法”暗示了这是一个关于多线程编程的问题,通常在面试中出现,用于评估候选人的并发处理能力。在这个问题中,可能涉及到同步、线程安全、锁机制等关键概念。 在Java中,...
总之,LeetCode的第14题“最长公共前缀”是一个经典的面试题,它涵盖了字符串处理、算法设计和优化等多个方面的知识,对于提升Java面试的竞争力具有重要意义。通过深入理解和熟练掌握这道题的解法,可以帮助你在面试...
此外,由于这是面试题,还要考虑代码的可读性、效率和空间复杂度。 Java编程方面,我们需要掌握以下要点: 1. 对二维数组的操作:包括初始化、访问、遍历等。 2. 二分查找算法的实现:理解并熟练应用二分查找的过程...
第35题“搜索插入位置”是一道典型的算法题,旨在测试面试者的数组处理和二分查找算法的应用。在这个问题中,我们需要在一个排序好的整数数组中找到一个特定元素应该插入的位置,使得数组依然保持有序。 首先,我们...
Java面试题中的LeetCode题目,尤其是像“第一个错误的版本”这样的问题,旨在考察候选人的编程基础、算法理解以及问题解决能力。通过解答此类问题,面试者能够展示他们的逻辑思维、代码实现和优化技巧,这些都是在...
第66题“加一”是其中一道典型的算法题,涉及到基础的数组操作和逻辑思维。本题解将深入探讨这个问题,并提供相关的Java实现。 题目描述: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现...
在本压缩包中,我们关注的是一个Java编程相关的学习资源,特别是一道源自LeetCode的面试题,题目编号为217,主题是检查数组中是否存在重复元素。这道题目通常出现在求职面试中,用于测试候选人在算法和数据结构方面...
本题解将重点解析LeetCode中的一道面试题——第1207题:“独一无二的出现次数”(Unique Number of Occurrences)。这道题目涉及到了哈希表这一数据结构的应用,对于理解和掌握哈希表在实际问题中的应用有着很好的...
第55题“跳跃游戏”是其中一道经典的动态规划问题,对于求职者来说,理解和掌握这道题的解法不仅能提升面试成功率,也有助于深化对算法的理解。 题目描述: 给定一个非负整数数组,数组中的每个元素代表你在每个...
这是一道典型的哈希表应用问题,也是很多面试中常见的数据结构与算法题。 **问题描述:** 给定一个整数数组`nums`和一个整数目标值`target`,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。你...
在Java编程领域,算法是衡量一个开发者技能的重要标准,尤其对于面试来说,掌握常见的算法题是必不可少的。"JAVA-algorithm-42.rar" 包含了一份珍贵的文档 "JAVA algorithm 42.doc",该文档详尽地列举了42个经典的...
其中,第3题“无重复字符的最长子串”是一道非常经典的字符串处理问题,对于求职面试者来说,掌握这类问题的解法至关重要。这道题目要求我们找出一个字符串中最长的子串,这个子串中的所有字符都不重复。下面将详细...
其中,第15题“三数之和”是一道经典的面试题,它考察了对双指针技术的理解与应用。本压缩包文件“java-leetcode面试题解双指针之第15题三数之和.zip”包含了解决这道问题的Java代码实现。 题目描述:给定一个包含n...
总之,LeetCode第49题的解法展示了哈希表在处理字母异位词问题时的高效性和实用性,是学习和提高Java编程技巧的一个宝贵案例。通过反复练习和分析,开发者可以更好地掌握这类问题的解决策略,为求职面试做好充分准备...
在IT行业的求职过程中,尤其是对于Java工程师而言,面试是一道至关重要的门槛。成功的面试不仅能够展示个人的技术实力,还能体现专业素养与沟通能力。本文将深入解析“Java工程师面试经验交流”这一主题,涵盖面试...
本题解将深入探讨LeetCode上的第4题——“寻找两个正序数组的中位数”,这是一道涉及到数组操作和查找策略的问题,对于理解数据结构和算法有着重要意义。 首先,我们要明确“中位数”的概念。在一组数值中,中位数...
这道第11题“盛最多水的容器”是一道经典的算法问题,对于求职面试者来说是必须掌握的。这个问题涉及到数组处理、动态规划以及双指针等重要概念。 问题描述: 给定一个包含非负整数的数组`heights`,表示一组竖直的...
每一道题都尽可能的多写几种解法,没加注释的应该是最好解法。 除了java之外,也有其他语言的解法,为了效率,并没有把所有的解法都转换为java解法。合格的程序员应该是什么语言都能写的,你可以不擅长一门语言,但...
第12题“整数转罗马数字”是一道常见的算法题,它涉及到数字系统转换、字符串处理以及逻辑思维。下面将详细介绍这个题目及其解决方案。 一、问题描述 题目要求我们将一个整数(1到3999之间)转换成罗马数字。罗马...
同时,这也是一道常出现在求职面试中的题目,熟练掌握此题解法有助于在面试中脱颖而出。对于LeetCode上的其他题目,尤其是与数据结构和算法相关的,同样值得开发者投入时间去练习和掌握,以提升自己的编程技能。