Doegネットワーク - ペンの質問

データベース

分析:

選択 SC.S#  からの 

    選択  最大(GRADE)の  よう年生から SC SC.Cの#1 = 'C2'

として一時

参加 SCの temp.grade = sc.GRADE

または:

(からsc.S#を選択

SC SC.C#1 = 'C2' からRK(グレードDESC順)上のS#、RANK()を選択します 

)SC

どこRK = 1

 

トップ3つの等級を見つけるために学生数:

(からtemp.S#を選択

    選択  ランク()オーバー sc.gradeのDESC)RK、* SCから

)温度として

ここで、RK <= 3

C#が、性能ランクに応じてグループ化:

選択  ランク()オーバーによるパーティションのC#による順 sc.gradeのDESC)、* SCから

 

並べ替え:

ROW_NUMBER() :123

ランク() 並行して第一の表示、後者は延期:113

DENSE_RANK() 連続的に並置されるように、後者:112

C

ENAME、(EMPから選択分(SAL))EMPここSAL <= + 1000からSALを選択

分析:選択分(SAL)EMPからは、最低賃金を見つけます

(EMPから選択分(SAL))+ 1000年の最低賃金プラス千元

SAL <=(EMPから分(SAL)を選択)+ 1000は、最低賃金$ 1,000を超えません

B:セレクト  SAL + 1000   (EMPから選択分(SAL))EMPからSAL <= + 1000

A:選択ENAME、EMPからSALどこSAL <= 1000

D:セレクトENAME、SAL EMPからSAL >(EMPから分(SAL)を選択)+ 1000年

 

マルチプロセスのメモリ割り当て

 

 

空欄に入力します。

バイナリツリーに複数のツリーは2つのステップを必要とする:バイナリツリー右として二分木、その兄弟ノードの左ノードとマルチノードツリーの最初の息子

データベースの保護は一般的に分割されたセキュリティコントロール、整合性の管理、生産管理、データ復旧:

 

分析:オプションBにはない「必然」、「かもしれない」です

分析C:

 

初期データセットは、アルゴリズムの性能には影響はありませんしていますヒープソート

リンク:https://www.nowcoder.com/questionTerminal/dc08e40e6c164dfb89c74c55839dedef?orderByHotValue=1&page=1&onlyReference=false
出典:牛の顧客ネットワーク

の初期状態とは独立して1、アルゴリズムの複雑さは、次のとおりです。選択ソート、ヒープソート、マージソート、基数ソート。

2、に関わらず初期状態の要素の総数を比較:ランキング塩基の順序を選択します。

図3に示すように、移動エレメントの総数は、初期状態とは無関係である:ソート、基数ソートマージ。

 

 

高速行:不安定、最悪O(N×n個)の平均O(N * LOGN)最適O(N * LOGN)

 

 

大きな問題のプログラミング:

public class test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int num[]={-1,0,1,2,-1,4};
		Arrays.sort(num);
		List<List<Integer>> res=new ArrayList<List<Integer>>();
		for(int i=0;i<num.length-2;i++) {
			if(i>0&&num[i]==num[i-1])continue;
			int temp=-num[i];
			int l=i+1;
			int r=num.length-1;
			while(l<r) {
				if(num[l]+num[r]>temp) {
					r--;
				}
				else if(num[l]+num[r]<temp) {
					l++;
				}
				else {
					res.add(Arrays.asList(num[i],num[l],num[r]));
					l++;
					r--;
					while(l<r&&l<num.length-2&&num[l]==num[l-1])l++;
					while(l<r&&r>0&&num[r]==num[r+1])r--;
				}
			}
			
		}
		for(int j=0;j<res.size();j++)
			System.out.println(res.get(j));
	}

}

1. 将数组排序
2. 遍历数组,将将 a + b + c = 0 转换为 a + b = -c
3. 如果当前元素与上一个元素一致,直接跳过
4. 定义两个下标,分别从数组两端,即(i+1)跟数组最后一个元素开始,往中间扫描,如果,两元素的和,大于目标值(-c),则后面的下标往前移动;如果两元素的和小于目标值,则前面的下标往后移动;如果正好等于目标值,则发现一组目标,两下标均往中间移动
5. 两下标往中间移动的同时,判断是否与上一个相同,如果相同,继续移动
6. 输出结果

思路:

  1. 首先对数组进行排序,时间复杂度为O(n*logn)
  2. 然后对数组进行两层的遍历,先取出当前遍历的数字为nums[i],然后从数组两侧取出数字分别为nums[begin]和nums[end],然后三个数求和值为sum
  3. sum == 0,将三个数加入结果之中,同时将两侧的下标向中间移动,直到不与之前取出的数字相同,避免出现重复的三元组
  4. sum > 0,因为数组有序,说明右侧的数字过大,所以下标左移,故而执行end–
  5. sum < 0,因为数组有序,说明左侧的数字过小,所以下标右移,所以执行begin++
  6. 因为两层的遍历时间复杂度为O(n^2),O(n*logn) + O(n^2) = O(n^2),所以总体时间复杂度为O(n^2)

 

 

おすすめ

転載: blog.csdn.net/qq_39474604/article/details/94318971