数组中的元素,大部分都出现了2次,只要1个出现了1次,把这2个找出来

e02fdb54d7524710a7d664d082bb7811 

 

牵涉到数组的题目,可以先排序,是个妙招啊


/*数组中的元素,大部分都出现了2次,只要1个出现了1次,把这2个找出来*/


    // 解法1 : 用map, 主要是containsKey的方法的使用,不过要遍历两次

    public static int shuzu(int[]a){


HashMap<Integer,Integer> s= new HashMap();


  for(int i:a){

      if(s.containsKey(i)){

          int value=s.get(i);
          s.put(i,value+1);

      }
  }

        for(int i:a){

            if(s.get(i)==1){

                return i;



            };
        }

        return -1;




    }
    /*
    * 、Arrays.sort 数组排序
2、使用栈进行从小到大入栈,一样的则弹出,不一样则入栈
3、取栈中剩余的元素
    * 
    * */
    public static int shuzu2(int[]a){

      Arrays.sort(a); //返回的是void,因为是在a数组本身上改的,没有new新数组

        Stack<Integer> s=new Stack();


        for(int i:a){
            if(s.isEmpty()|| i!=s.peek()){

                s.push(i);
            }else{


                s.pop();
            }

    s.pop();

        }





    }

数组中一串数,比如 1 2 4 4    4 4 4 4 , 共8个数, 4 出现的次数查过了一半,把4 找出来,没有超过一半的数,返回0(超过一半的只能有1个啊)
还是先排序

public static int half(int[]array){
    Arrays.sort(array);
    int length=array.length/2;
    for(int i=0;i<length;i++){
        if(array[i]==array[i+length]){
            return array[i];

        }


    }

    return 0;



}

 

封装函数实现有序数组(如整数数组)中的二分查通常涉及以下几个步骤: 1. **函数声明**:首先定义一个名为`binarySearch`的函数,接受两个参数:一个已排序的数组`arr`和一个目标值`target`,以及一个可选的返回值类型(例如`int`),用于记录查数。 ```python def binarySearch(arr: List[int], target: int) -> int: ``` 2. **初始化查数**:在函数内部,创建一个变量`count`并将其初始值设为0,这将用于计数查操作。 3. **循环结构**:使用一个while循环,只要数组范围未缩小到0,就继续搜索。每循环都会将`count`加一。 4. **中间元素计算**:数组中间的索引`mid`,通过数组长度的一半来实现。 5. **比较条件**:如果目标值等于中间元素,则返回当前的查数。如果不是,根据目标值与中间元素的大小关系决定是在左半部分还是右半部分递归地进行查。 6. **更新范围**:如果目标值小于中间元素,说明它应该在左半边;反之,在右半边。更新数组范围以便下一次搜索。 7. **跳出循环**:当目标值不在数组范围内(即,左边界大于右边界),退出循环,并返回查数作为结果。 以下是完整的Python实现: ```python from typing import List def binarySearch(arr: List[int], target: int) -> int: count = 0 left, right = 0, len(arr) - 1 while left <= right: count += 1 mid = (left + right) // 2 if arr[mid] == target: return count elif arr[mid] < target: left = mid + 1 else: right = mid - 1 return count # 如果没到,返回查数 # 示例 arr = [1, 3, 5, 7, 9] target = 5 search_count = binarySearch(arr, target) print(f"查数: {search_count}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值