理論的部分
- 配列の理解ストレージと分類。
- アレイの必要な長さのように変更することができるダイナミックアレイ。
練習セクション
1.データ・ストレージの問題を解決するためのダイナミックアレイの使用
コードの一部、必要な入力整数書き込むにN
動的配列とを、A
[ストアに2,N]
すべての5又は7との間の倍数、アレイの出力を。
例:
入力: Nは100 = 出力を: 。5 7,101,415,202,125,283,035 40 4,245,495,055,566,063 65 70 75 7,780,848,590,919,598,100
ソリューション:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
int n,*array = 0,j=0;
void Input()
{
int i = 0,num = 0;
scanf("%d",&n);
array = (int *)malloc(sizeof(int)*n);
if(array == 0)
{
printf("error");
}
for(i=2;i<=n;i++)
{
if(i%5==0||i%7==0)
{
array[j]=i;
j++;
}
}
}
void Outpu(){
for(int i=0;i<j;i++)
printf("%d ",array[i]);
}
int main()
{
Input();
Outpu();
free(array);
return 0;
}
2.テプリッツ行列の問題
マトリックスの各方向が右対角線を低下させるために、左上から同じ要素を有する場合、行列はテプリッツ行列です。
与えられたM x N
のみで、テプリッツ行列の場合に返される行列を、True
。
例:
入力: 行列= [ [1,2,3,4]、 [5,1,2,3]、 [9,5,1,2] ] 出力:真
説明:
対角線上の行列で、その: "[9]", "[5, 5]", "[1, 1, 1]", "[2, 2, 2]", "[3, 3]", "[4]"
。それぞれの対角線上のすべての要素は同じなので、答えがありますTrue
。
ソリューション:
matrix = [ [1,2,3,4], [5,1,2,3], [9,5,1,2] ]
def solve(matrix):
for r in range(len(matrix)-1):
for c in range(len(matrix[0])-1):
if matrix[r+1][c+1] and matrix[r][c] != matrix[r+1][c+1]:
return False
return True
solve(matrix)
3. 三数之和
https://leetcode-cn.com/problems/3sum/
n個含む整数の配列を指定しnums
、それを判断するnums
三つの要素があるかどうかa,b,c
ように、a + b + c = 0
?すべての条件が重複したトリプルを見つけることは満足していません。
注:答えは重複したトリプルを含めることはできません。
例:
所与のアレイNUMS = [-1、0、1 、2、-1、-4]、 のようなトリプルのセットの要件を満たす: [ [-1、0、1]、 [-1、-1、2] ]
ソリューション:
public class SumThree {
public static void main(String[] args) {
int[] nums={-1, 0, 1, 2, -1, -4};
List<List<Integer>> ans = new ArrayList<>();
if(nums == null || nums.length < 3){
System.out.println(ans);
}
Arrays.sort(nums); // 排序
for (int i = 0; i < nums.length ; i++) {
if(nums[i] > 0) break;
if(i > 0 && nums[i] == nums[i-1]) continue;
int L = i+1;
int R = nums.length-1;
while(L < R){
int sum = nums[i] + nums[L] + nums[R];
if(sum == 0){
ans.add(Arrays.asList(nums[i],nums[L],nums[R]));
while (L<R && nums[L] == nums[L+1]) L++;
while (L<R && nums[R] == nums[R-1]) R--;
L++;
R--;
}
else if (sum < 0) L++;
else if (sum > 0) R--;
}
}
System.out.println(ans);
}
}