- 给定一个排序数组,返回移除相同元素后数组的新长度。
package com.cskaoyan.array.homework;/**1. 给定一个排序数组,返回移除相同元素后数组的新长度。*/
public class Work01 {
public static void main(String[] args){
int[] arr1 = {
1, 1, 2, 2, 3, 4, 5, 5, 6};//一个有序数组int count = 0; //记录有序数组中唯一元素的个数,初始化为0if(arr1.length == 1) //只有一个元素的情况count = 1;else if(arr1.length == 2){
//只有两个元素的情况if(arr1[0] == arr1[1])count = 0;elsecount = 2;}else if(arr1.length > 2) {
//至少有三个元素的情况if(arr1[0] != arr1[1]) //判断第一个元素是否唯一count++;for (int i = 1; i <= arr1.length - 2; i++) {
//有序数组中一个元素既不与它的前一个元素相同也不与它的后一个元素相同,那么它是唯一的if (arr1[i - 1] != arr1[i] && arr1[i] != arr1[i + 1])count++;}if(arr1[arr1.length - 2] != arr1[arr1.length - 1]) //判断最后一个元素是否唯一count++;}System.out.println("移除相同元素后数组的新长度为:" + count);}
}
测试:
- 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标,假设每种输入只会对应一个答案
package com.cskaoyan.array.homework;/*** 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标,假设每种输入只会对应一个答案*/
public class Work02 {
public static void main(String[] args){
int[] nums = {
1, 3, 4, 6, 8, 10, 12};int target = 10;int tag_i = 0,tag_j = 1;//标记所要找到的两个元素的下标for(int i = 0;i < nums.length - 1;i++){
for(int j = i+1;j < nums.length;j++ ){
if(nums[i] + nums[j] == target){
tag_i = i;tag_j = j;break;//因为已经假设每种输入只会对应一个答案,所以找到一组以后就可以马上退出循环}}}System.out.println("请在该数组中和为" + target + "那两个整数为" + nums[tag_i] + "," + nums[tag_j]);System.out.println("它们的数组下标为:" + tag_i + "," + tag_j);}
}
测试:
附加题
1.有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
package com.cskaoyan.array.homework;/*** 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。*/
public class Add01 {
public static void main(String[] args){
int n = 10;//假设有10个人int[] tag = new int [10];//标记数组,所有元素动态初始化为0。//0表示还在圈子,1表示已经退出圈子。int count = 0;//报数计数器int i = 0;//报数者下标,初始化为0。int num = n;//圈子里还有的人数while(true){
//反复循环遍历if(tag[i] == 0) {
//当前对象在圈内count++;if(count % 3 == 0){
//报数至3tag[i] = 1;//退出,使当前对象退出圈子count = 0;//报数器count重置为1num--;//圈内人数减一if(num == 0){
//圈内没有人,则当前退出的人是最后一个退出的。break;}}}i++;if(i == n){
//防止数组越界,遍历到最后一个人,则回到第一个位置i = 0;}}System.out.println("最后留下的是原来第" + (i + 1) +"号的那位");//注:第一个人记为第一号}
}
测试: