古典的なトピックをブラッシュアップ

コンテンツ

1.代替の追加

2.パスワード強度レベル

3.最新の共通祖先

4.最大ビット数を見つけます


1.代替の追加

Alternative Plusエキスパートが古典的な試験問題について話し合い、技術力を包括的に向上させますhttps://www.nowcoder.com/practice/e7e0d226f1e84ba7ab8b28efc6e1aebc?tpId=8&& tqId = 11065&rp = 1&ru = / activity / oj&qru = / ta / cracking-the-coding-インタビュー/質問ランキング

①タイトルと例:

②方法分析:

質問の意味から、非演算子を使用して演算を完了したいことがわかり、ビット演算子を使用して計算することも簡単に考えられます。

そして、計算する前に知っておく必要があるのは、次のとおりです。

a。2進ビットのXOR演算の結果は、(キャリーケースを考慮せずに)2つの数値の対応する加算の結果です。

b。ビット単位および1ビット左シフトの結果は、2つの数値のキャリーの結果です(キャリーケースのみが考慮されます)

したがって、上記の結論に基づいて、理解を組み合わせるために次の図を作成できます。

③コードは以下の通りです。

import java.util.*;
public class UnusualAdd {
    public int addAB(int A, int B) {
        // write code here
        if(B==0){//要是B为0,则不需要进位,直接可以返回A的值
            return A;
        }
        int sum=0;
        int tmp=0;
        while(B!=0){//即需要进位的时候
            sum=A^B;//将两数相加(不判断进位)
            tmp=(A&B)<<1;//判断进几位
            A=sum;
            B=tmp;
        }//出循环后,然后B=0了,即不需要进位,此时的和就是A的值
        return A;
    }
}

2.パスワード強度レベル

パスワード強度レベルNiurenと古典的な試験問題について話し合い、技術力を総合的に向上させますhttps://www.nowcoder.com/practice/52d382c2a7164767bca2064c1c9d5361?tpId=37&&tqId=21310&rp=1&ru=/activity/oj&qru=/ta/ huawei/質問ランキング

①トピックの例:

 コードは次のとおりです:(この質問はそれほど難しいことではありませんが、もっと面倒なので、コードを直接添付してください)

import java.util.*;
 public class Main { 
public static void main(String[] args){ 
Scanner sc=new Scanner(System.in);
 while(sc.hasNextLine()){
 String str=sc.nextLine(); 
int sum1=getLen(str);
 int sum2=getChar(str);
 int sum3=getNum(str); 
int sum4=getSym(str); 
int sum=0;
 if(sum2==20&&sum3>=1&&sum4>=1){
 sum=sum1+sum2+sum3+sum4+5;
 }else if(sum2==10&&sum3>=1&&sum4>=1){
 sum=sum1+sum2+sum3+sum4+3; 
}else if(sum2==10&&sum3>=1&&sum4==0){ 
sum=sum1+sum2+sum3+sum4+2; 
}else{
sum=sum1+sum2+sum3+sum4; 
}if(sum>=90){
 System.out.println("VERY_SECURE");
 }else if(sum>=80){
 System.out.println("SECURE"); 
}else if(sum>=70){ 
System.out.println("VERY_STRONG"); 
}else if(sum>=60){ 
System.out.println("STRONG"); 
}else if(sum>=50){
System.out.println("AVERAGE");
 }else if(sum>=25){
 System.out.println("WEAK");
 }else if(sum>=0){
 System.out.println("VERY_WEAK");
 } 
} 
}public static int getLen(String str){ 
if(str.length()<=4){
 return 5; 
}else if(7>=str.length()&&str.length()>=5){ 
return 10;
 }else if(str.length()>=8){ 
return 25;
 }return 0;
 }public static int getChar(String str){ 
int small=0; int big=0; for(int i=0;i<str.length();i++){ if(str.charAt(i)>=65&&str.charAt(i)<=90){
 big++;
 }else if(str.charAt(i)>=97&&str.charAt(i)<=122){ 
small++;
 } 
}if(small>0&&big>0){ 
return 20; 
}else if(small>0||big>0){
 return 10; 
}else{
return 0;
 }
 }public static int getNum(String str){ 
int num=0; 
for(int i=0;i<str.length();i++){ 
if(str.charAt(i)-'0'>=0 && str.charAt(i)-'0'<=9){
 num++;
 } 
}if(num>1){ 
return 20;
 }else if(num==1){
 return 10; 
}else{
return 0;
 } 
}public static int getSym(String str){
 int num=0; 
for(int i=0;i<str.length();i++){
 if(!(str.charAt(i)>=65&&str.charAt(i)<=90)&& !(str.charAt(i)>=97&&str.charAt(i)<=122)&& !(str.charAt(i)-'0'>=0&&str.charAt(i)-'0'<=9)){
num++; 
}
 }if(num>1){
 return 25;
 }else if(num==1){
 return 10; 
}else{
return 0; 
}
 } 
}

3.最新の共通祖先

最近の公開Ancestor_NiokeQuestionBa_Niuke.com [Nioke Question Ba]は、公式の問題解決策を備えたさまざまな企業の高頻度の学校採用面接の質問を収集し、Baidu、Ali、Tencent、Netease、およびその他の有名なインターネット企業のオンライン練習を行っています。 Niurenを使用した古典的な試験問題と、技術力を包括的に向上させるhttps://www.nowcoder.com/practice/70e00e490b454006976c1fdf47f155d9?tpId=8&&tqId=11017&rp=1&ru=/activity/oj&qru=/ta/cracking-the-coding-interview / question -ランキング

①タイトルと例:

 ②方法分析: 

タイトルの意味から、同時に、子ノードとその親ノードの対応関係を明確に知ることができます。

その親ノード=左サブツリーノード/2=右サブツリーノード/2;

このようにして、子ノードの親ノードを何度も見つけることができ、最後に、2つのサブツリーが等しい場合、それが最も近い共通の祖先であると見なすことができます。以下は図解です。

③コードは以下の通りです。

import java.util.*;
public class LCA {
    public int getLCA(int a, int b) {
        // write code here
        while(a!=b){
            if(a>b){
                a/=2;
            }else{
                b/=2;
            }
        }
        return a;
    }
}

4.最大ビット数を見つけます

Maximum Consecutive Bits Practiceを見つけ、専門家と古典的な試験問題について話し合い、技術的能力を包括的に向上させますhttps://www.nowcoder.com/practice/4b1658fd8ffb4217bc3b7e85a38cfaf2?tpId=37&& tqId = 21309&rp = 1&ru = / activity / oj&qru = / ta / huawei/質問ランキング

①タイトルと例:

②方法分析:

質問の意味は簡単に理解できますが、1の数は毎回異なる可能性があり、数が不確かであるため、2つの変数を定義し、それらの間の最大値を比較して、必須。同時に、1の数をどのように判断するかという質問があります。ここでは、&on 1を使用して最後の桁を判断します。1の場合はcount++、1でない場合はcount = 0です。判断サイクルが成功するたびに、値>>1を右に1つシフトします。次の判断ができるように、最後のビットを置き換えます。 

 ③コードは以下の通りです。

import java.util.*;
public class Main{
    public static void main(String[]args){
        Scanner scanner=new Scanner(System.in);
        int n=scanner.nextInt();
        int count=0;
        int tmp=0;
        while(n!=0){
        if((n&1)==1){
            count++;
            tmp=Math.max(count,tmp);
        }else{
            count=0;
        }
            n>>=1;
        }
        System.out.println(tmp);
    }
}

おすすめ

転載: blog.csdn.net/weixin_58850105/article/details/124175985