コンテンツ
1.LeetCode228.要約間隔
トピック
繰り返し要素のない順序付けられた整数配列numsが与えられます。
配列内のすべての数値を正確にカバーする最小の順序付き間隔範囲のリストを返します。つまり、numsのすべての要素は、ある区間範囲によって正確にカバーされ、ある範囲に属しているがnumsには属していない数値xはありません。
入力:nums = [0,1,2,4,5,7]
出力:["0-> 2"、 "4-> 5"、 "7"]
Xiaobianクッキングソリューション
public static List<String> summaryRanges(int[] nums) {
int step = -1;
int next = 0;
int over = 0;
int curren = 0;
List<String> list = new ArrayList<>();
for(int i = 0;i<nums.length;i++){
int c = nums[i];
if (i<=curren + step){
continue;
}
curren = i;
String temp = "";
step = 0;
if(i+1+step == nums.length){
list.add(String.valueOf(c));
break;
}
next = nums[i+1+step];
while (next - c == 1+step){
over = next;
step++;
if(i+1+step < nums.length){
next = nums[i+1+step];
}
}
if (step == 0){
temp = String.valueOf(c);
}else{
temp += c + "->"+over;
}
list.add(temp);
}
return list;
}
十分なトラブル、料理。
国を指す大ボス
public static List<String> summaryRanges2(int[] nums) {
List<String> ret = new ArrayList<String>();
int i = 0;
int n = nums.length;
while (i < n) {
int low = i;
i++;
while (i < n && nums[i] == nums[i - 1] + 1) {
i++;
}
int high = i - 1;
StringBuffer temp = new StringBuffer(Integer.toString(nums[low]));
if (low < high) {
temp.append("->");
temp.append(Integer.toString(nums[high]));
}
ret.add(temp.toString());
}
return ret;
}
2.LeetCode231.2の力
トピック
整数nが与えられた場合、整数が2の累乗であるかどうかを判断してください。そうである場合はtrueを返し、そうでない場合はfalseを返します。
n == 2xのような整数xがある場合、nは2の累乗と見なされます。
Xiaobianクッキングソリューション
public static boolean isPowerOfTwo(int n) {
if (n == 1){
return true;
}
while (true){
if (n/2 >1 && n%2==0){
n = n/2;
}else{
if (n == 2){
return true;
}else{
return false;
}
}
}
}
思考分析
nnが正の整数であり、nnの2進表現に11個の11しか含まれていない場合に限り、数nnは22の累乗です。
したがって、ビット演算を使用してnnのバイナリ表現の下位11を抽出し、残りの値が00であるかどうかを判断することを検討できます。n&(n-1)
ここで、\ texttt {&}&はビット単位のAND演算を意味します。このビット演算トリックは、nnのバイナリ表現の最下位ビット11を直接削除できます。
国を指す大ボス
public boolean isPowerOfTwo(int n) {
return n > 0 && (n & (n - 1)) == 0;
}
バイナリは、ああ恥ずかしい、演奏があまり得意ではありません。
3.LeetCode205.有効な文字アナグラム
トピック
2つの文字列sとtが与えられた場合、tがsのアナグラムであるかどうかを判別する関数を記述します。
注:sとtの各文字が同じ回数出現する場合、sとtは互いのアナグラムと呼ばれます。
Xiaobian問題解決のアイデア
すべての文字の数を取り出してマップに入れます.2つの文字列がアナグラムの場合、マップは等しくなければなりません。
Xiaobianクッキングソリューション
public static boolean isAnagram(String s, String t) {
Map<Character,Integer> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if(map.containsKey(c)){
map.put(c,map.get(c)+1);
}else{
map.put(c,1);
}
}
Map<Character,Integer> map2 = new HashMap<>();
for (int i = 0; i < t.length(); i++) {
char c = t.charAt(i);
if(map2.containsKey(c)){
map2.put(c,map2.get(c)+1);
}else{
map2.put(c,1);
}
}
return map.equals(map2);
}
思考分析
tは、「等しくソートされた2つの文字列」に相当するssのアナグラムです。したがって、文字列ssとttをそれぞれ並べ替えて、並べ替えられた文字列が等しいかどうかを判断できます。さらに、ssとttの長さが異なる場合、ttはssのアナグラムであってはなりません。
国を指す大ボス
public static boolean isAnagram(String s, String t) {
char[] c1 = s.toCharArray();
char[] c2 = t.toCharArray();
Arrays.sort(c1);
Arrays.sort(c2);
return Arrays.equals(c1,c2);
}
为什么80%的码农做不了架构师?>>>
Java列ディレクトリ|ここをクリック
4.パブリックアカウントのNezhaプログラミングに従い、1024に返信し、マインドマップを取得し、不規則な本の配達活動を行います
- エントリーからプロジェクト戦闘までのJava(フルビデオバージョン)
- NoSQLデータベースの紹介と実践(MongoDB、Redisに基づく)
- Node + MongoDB+Reactプロジェクト開発
- エントリーから実際の戦闘までVue.js3.0を簡単に習得できます(ケース、ビデオ、カラーバージョン)
公開番号に注意してください:Nezhaプログラミング
Nezhaプログラミングは毎週高品質の記事を更新しています。注意を払った後、[CSDN]に返信して、Javaマインドマップ、Java学習資料、および大規模なインタビュー資料を受け取ります。
私にWeChatを追加してください:18525351592
あなたを技術交換グループに引き込みます。グループには多くの技術的な大物があり、技術を一緒に交換し、一緒に前進し、一緒に大きな工場に入り、技術書を無料で購入します~~