不看后悔一辈子,每日练习(Java练习)
Posted 韶光不负
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不看后悔一辈子,每日练习(Java练习)相关的知识,希望对你有一定的参考价值。
一,给定一个包含n+1个整数的数组nums,其数字在1到n之间(包含1和n),可知至少存在一个重复的整数,假设只有一个重复的整数,请找出这个重复的数。
public class Test {
public static void main(String[] args) {
int arr[] = new int[]{1,3,2,4,5,6,7,8,9,9,10};
int val=repeatNumber2(arr);
System.out.println(val);
for (int i = 0; i <arr.length ; i++) {
if(val==i){
System.out.println(arr[i]);
}
}
}
//此方法必须有序才能查找
public static int repeatNumber1(int[] nums){
int ans=1;
for (int i = 0; i < nums.length-1 ; i++) {
if(0 == (nums[ans] ^ nums[i])){
return ans;
}else {
ans++;
}
}
return -1;
}
//异或方法,二二相同异或为0,0^任何数为它本身
public static int repeatNumber2(int[] nums){
int ans=0;
for (int i = 0; i < nums.length; i++) {
ans^=i;
}
for (int i = 0; i < nums.length; i++) {
ans^=nums[i];
}
return ans;
}
}
二,(力控:905)
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
int arr[]=new int[]{4,3,2,1};
int arrs[]=sort(arr);
for (int i = 0; i <arrs.length ; i++) {
System.out.println(arrs[i]);
}
}
//双指针
public static int[] sort(int []arr){
int right=0;
int left=arr.length-1;
int arrs[]=new int[left+1];
for (int i = 0; i <= left+1 ; i++) {
if(arr[i]%2==0){
arrs[right]=arr[i];
right++;
}else {
arrs[left]=arr[i];
left--;
}
}
return arrs;
}
}
三,小明今年18岁了,按照常理来说点18根蜡烛,他想了想,自己不是常人,18用二进制表示就是10010表示,于是找来了五根蜡烛点燃其中二根,,开开心心过上了生日(点亮表示为1),如果有一个x岁了,需要m根蜡烛,点燃n根,以知x,求m,n(1<=x<=500).
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入您的年龄:");
int age=sc.nextInt();
String age2=additionTwoNumber(age);
int num=age2.length();
System.out.println(age2);
int bright=0;
for (int i = 0; i <age2.length() ; i++) {
if('1'==age2.charAt(i)){
bright++;
}
}
System.out.println("需要:"+num+"根蜡烛");
System.out.println("需要点亮:"+bright+"根蜡烛");
sc.close();
// 使用包装类,把十进制转化为二进制
// String ernum=Integer.toBinaryString(age);
// System.out.println(ernum);
}
//除二取余法,去2取余排列,小编没有倒叙,倒叙就是该数的二进制数
public static String additionTwoNumber(int num){
String s="";
while (num>0){
s+=num%2;
num/=2;
}
return s;
}
}
四,给定一个数组,已知数组中的元素都是成对出现,现在数组中只有一个元素没有成对,请找出这个元素。(力控,136,137题)
如:[1,2,3,4,5,5,4,3,1] 则2没有成对出现。
public class Test {
public static void main(String[] args) {
int arr[] = new int[]{1,1,2,2,3,4,4,};
int val=singleNumber(arr);
System.out.println(val);
}
//异或方法,相同抵消为0,0异或为本身。
public static int singleNumber(int[] nums){
int ans=0;
for (int i = 0; i < nums.length; i++) {
ans^=nums[i];
}
return ans;
}
//重复数值出现多次出现
public int singleNumber(int[] nums) {
int ans=0;
for(int i=0;i<32;i++){
int count=0;
for(int num:nums){
if((num>>>i&1)==1){
count++;
}
}
if(count%3!=0)
ans =ans|1<<i;
}
return ans;
}
}
好了,希望小编的解答对你有所帮助!
以上是关于不看后悔一辈子,每日练习(Java练习)的主要内容,如果未能解决你的问题,请参考以下文章