《C语言入门100例》(第27例) 穷举查找

1.1295. 统计位数为偶数的数字

/*给你一个整数数组 nums,请你返回其中位数为 偶数 的数字的个数。*/
class Solution {
    
    
    public int findNumbers(int[] nums) {
    
    
        int count = 0;
        for(int num : nums){
    
    
            count += String.valueOf(num).length() % 2 == 0? 1: 0;
        }
        return count;
    }
}

2.540. 有序数组中的单一元素

/**给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。 */
class Solution {
    
    
    public int singleNonDuplicate(int[] nums) {
    
    
        int left = 0;
        int right = nums.length - 1;
        while (left < right){
    
    
            int mid = (right - left) /2 + left;
            if(nums[mid] == nums[mid - 1]){
    
    //中点跟左边的相等,则判断除开中点,左边还剩几位数
                if((mid - left) %2 == 0){
    
    //偶数,则说明左边的存在这个数,改变right的值
                    right = mid - 2;
                }else {
    
    //为奇数,则这个数在右边,改变left的值
                    left = mid + 1;
                }
            }else if(nums[mid] == nums[mid + 1]){
    
    //中间值右边的数相等,则看右边的数
                if((right - mid)% 2==0){
    
    //偶数的话就,这个数就在右边,改变left的值
                    left = mid + 2;
                }else {
    
    //奇数的话,则此数在左边,改变right的值
                    right = mid - 1;
                }
            }else {
    
    //不存在。返回nums的值
                return nums[mid];
            }
        }
        return nums[right];
    }
}

3.剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

/**输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,
所有偶数在数组的后半部分。 */
/* class Solution {
    public int[] exchange(int[] nums) {
        int left = 0, right = nums.length - 1;
        while(left < right){
            while(left < right && nums[left] % 2 != 0){
                left++;
            }
            while(left < right && nums[right] % 2 == 0){
                right--;
            }
            if(left < right){
                int temp = nums[left];
                nums[left] = nums[right];
                nums[right] = temp;
            }
        }
        return nums;
    }
}*/
class Solution {
    
    
    public int[] exchange(int[] nums) {
    
    
        int i = 0, j = nums.length - 1, tmp;
        while(i < j) {
    
    
            while(i < j && (nums[i] & 1) == 1) i++;//指针 i遇到奇数则执行 i=i+1 跳过,直到找到偶数;
            while(i < j && (nums[j] & 1) == 0) j--;//指针 j遇到偶数则执行 j=j−1 跳过,直到找到奇数;
            tmp = nums[i];//交换 nums[i] 和 nums[j] 值;
            nums[i] = nums[j];
            nums[j] = tmp;
        }
        return nums;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_52230126/article/details/121596659