NotRepent 2024-03-18 18:26 采纳率: 50%
浏览 9
已结题

面试111111111111111

面试

//成绩表A,三列:姓名,性别,成绩,按成绩[80-100],[60-80),60以下 三档进行分组统计除了第一种解法外还有其他哪种解法?
select case when score>=80 and score<=100 then '优'
when score>=60 and score <=80 then '良'
else '差' end as '成绩范围',count(*) as '人数' from scoretable GROUP BY case when score>=80 and score<=100 then '优'
when score>=60 and score <=80 then '良'
else '差' end
**编程题
**
//给定一个有序数组如:[1,2,3,4,5],从数组中查找指定的数据,存在返回对应的索引位置,不存在返回-1 上代码,除了这两种还有哪些解题思路?

public class TestMain {
    public static void main(String[] args) {
        //给定一个有序数组如:[1,2,3,4,5],从数组中查找指定的数据,存在返回对应的索引位置,不存在返回-1
        int index[]={1,2,3,4,45,8,9,10,6};
//        int result = search(index,5);
//        System.out.println(result);
        int result = getIndex(index,6);
        System.out.println(result);
    }
    public static int getIndex(int[] arr,int target){
        if(arr!=null&&arr.length!=0){
            for (int i=0;i<arr.length;i++){
                if (arr[i]==target){
                    return i;
                }
            }
        }
        return -1;
    }
    /**
     *
     * @param arr
     * @param target
     * @return
     */
    public static int search(int[] arr,int target){
        int left = 0;
        int right = arr.length-1;
        while(left<=right){
            int mid = (left+right)/2;
            if(arr[mid]==target){
                return mid;
            }else if(arr[mid]<target){
                left = mid+1;
            }else{
                right = mid-1;
            }
        }
        return -1;
    }

}
  • 写回答

4条回答 默认 最新

  • 关注

    NotRepent 晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    对于特定需求,除了已给出的解法之外,还有以下解法:

    • 二分查找法:对于有序数组,可以利用二分查找来查找指定的数据。具体步骤如下:
      1. 定义左指针left为数组的起始位置,右指针right为数组的结束位置。
      2. 循环查找,直到左指针大于右指针:
        • 计算中间位置mid=(left+right)/2。
        • 如果中间位置的值等于目标值,返回该位置。
        • 如果中间位置的值小于目标值,将左指针移动到mid+1。
        • 如果中间位置的值大于目标值,将右指针移动到mid-1。
      3. 如果循环结束后仍未找到目标值,返回-1。
    public static int binarySearch(int[] arr, int target) {
        int left = 0;
        int right = arr.length - 1;
        while (left <= right) {
            int mid = (left + right) / 2;
            if (arr[mid] == target) {
                return mid;
            } else if (arr[mid] < target) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        return -1;
    }
    
    • 哈希表:将数组中的元素作为键,索引作为值,构建一个哈希表。然后可以通过查询哈希表来查找指定的数据。具体步骤如下:
      1. 定义一个哈希表,键为数组的元素,值为数组的索引。
      2. 遍历数组,将元素和索引添加到哈希表中。
      3. 查询哈希表,如果目标值存在于哈希表中,返回对应的索引;否则返回-1。
    import java.util.HashMap;
    import java.util.Map;
    
    public static int searchWithHashMap(int[] arr, int target) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < arr.length; i++) {
            map.put(arr[i], i);
        }
        return map.containsKey(target) ? map.get(target) : -1;
    }
    

    注意:对于已排序的数组,二分查找是最常见的高效算法。而哈希表适用于无序数组的查找。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月26日
  • 已采纳回答 3月18日
  • 专家修改了标签 3月18日
  • 创建了问题 3月18日

悬赏问题

  • ¥25 LT码在高斯信道下的误码率仿真
  • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?
  • ¥50 复现论文;matlab代码编写
  • ¥30 echarts 3d地图怎么实现一进来页面散点数据和卡片一起轮播
  • ¥15 数字图像的降噪滤波增强
  • ¥15 心碎了,为啥我的神经网络训练的时候第二个批次反向传播会报错呀,第一个批次都没有问题
  • ¥15 MSR2680-XS路由器频繁卡顿问题
  • ¥15 VB6可以成功读取的文件,用C#读不了