蓝桥杯练习二

1.题目:

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

解题思路:

定义一个升序数组和一个目标值,定义getIndex()方法进行二分查找并在main方法中调用。

代码实现:

package day02;
public class t1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[]nums= {-1,0,3,5,9,12};
		int target=getIndex(nums,9);
		System.out.println("索引:"+target);
		
	}
	public static int getIndex(int[] nums,int value) {
		int max=nums.length-1;
		int min=0;
		int mid=(max+min)/2;//找到中间的数组下标
		while(nums[mid]!=value) {//如果nums[mid]不等于value,继续查找
			if(nums[mid]>value) {//如果nums[mid]>value,则最大的下标减小
				max=mid-1;
			}else if(nums[mid]<value) {//如果nums[mid]<value,则最小的下标增加
				min=mid+1;
			}
			//加入判断
			if(min>max) {//查找不到返回-1
				return -1;
			}
			mid=(max+min)/2;
		}
		return mid;
	}

}

结果:

索引:4

2.题目:

一个下标从 0 开始的整数数组 nums 以及一个目标元素 target 。目标下标 是一个满足 nums[i] == target 的下标 i 。将 nums 按非递减 顺序排序后,返回由 nums 中目标下标组成的列表。如果不存在目标下标,返回一个 空 列表。返回的列表必须按递增顺序排列。

解题思路:

定义数组和ArrayList列表,使用sort()方法将数组进行非递减顺序排序,用for和if语句找出目标下标i,添加到列表并输出。

代码实现:

package day02;
import java.util.*;
import java.util.ArrayList;
public class t2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[]nums= {1,2,5,2,3};
		int target=2;
		ArrayList <Integer> array = new ArrayList<Integer>();
		Arrays.sort(nums);
		for(int i=0;i<nums.length;i++) {
			if(nums[i]==target) {
				array.add(i);
			}
		}
		System.out.println(array);
	}
}

结果:

[1, 2]

3.题目:

给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,返回 这个重复的数 。

你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。

代码:

public class t3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[]nums= {3,1,2,4,2};
		int b=0;
		for(int i=0;i<nums.length;i++) {
			for(int x=0;x<i-1;x++) {
				if(nums[i]==nums[x]) {
					b=nums[x];
				}
			}
			//System.out.println(b);
		}
		System.out.println(b);
	}

}

结果:

2

代码运行出来了,但好像和题目前面的代码不一样,回来修改一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值