प्रौद्योगिकी साझेदारी

जावा एल्गोरिदम दिवस12

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

जावा एल्गोरिदम दिवस12

  • १९९ द्विचक्रीयवृक्षस्य दक्षिणदृश्यम्
  • ६३७ द्विचक्रीयवृक्षाणां स्तरसरासरी
  • ५१५ प्रत्येकस्मिन् वृक्षपङ्क्तौ अधिकतमं मूल्यं ज्ञातव्यम्
  • ४२९ एन-अरी वृक्षस्य स्तरक्रमपरिभ्रमणम्
  • 116 प्रत्येकस्य नोड् इत्यस्य अग्रिमं दक्षिणं नोड् सूचकं पूरयन्तु

१९९ द्विचक्रीयवृक्षस्य दक्षिणदृश्यम्

अयं प्रश्नः अद्यापि लेयर क्रमिक-भ्रमणस्य विषये अस्ति, परन्तु प्रक्रिया किञ्चित् भिन्ना अस्ति ।
कृपया चित्रविवरणं योजयन्तु
अस्य प्रश्नस्य विषये मम प्रारम्भिकं चिन्तनं गलतम् आसीत् यतोहि अहं प्रारम्भे अस्य चित्रस्य आधारेण तस्य विषये चिन्तितवान् । मया चिन्तितम् यत् मम केवलं प्रत्येकस्य स्तरस्य अन्तिमः नोड् विस्तारः करणीयः अस्ति तथा च तत् एव । तथापि वस्तुतः तत् गलतम् अस्ति। यदि भवान् एतत् विचारं अनुसरति तर्हि यदि उपरिष्टात् चित्रे नोड् ४ नास्ति तर्हि नोड् ५ परिणामसमूहे सर्वथा योजयितुं न शक्यते । अतः एषः विचारः प्रशस्तः नास्ति।

सम्यक् विचारः : १.
उपर्युक्तस्थितेः निवारणाय वामपक्षस्य विस्तारः अपि कर्तुं शक्यते । अतः सम्यक् संचालनम् अस्ति। प्रत्येकं स्तरं प्रत्येकं नोड् च विस्तारयितुं आवश्यकं भवति, परन्तु प्रत्येकस्य स्तरस्य अन्तिमतत्त्वं एव परिणामसमूहे योजयितुं आवश्यकम् ।
परिणामसमूहे योजनीयं अन्तिमं तत्त्वं कथं लिखितव्यम्?
प्रत्येकं स्तरः आकारस्य उपयोगं करोति, अतः for लूप् इत्यस्य समये गणनायां ध्यानं ददातु, अन्तिमे च परिणामान् संग्रहयन्तु ।

class Solution {
    public List<Integer> rightSideView(TreeNode root) {
        List<Integer> result = new ArrayList<>();
        Deque<TreeNode> que = new ArrayDeque<>();
        if(root==null){
            return result;
        }
        
        que.offerLast(root);
        while(!que.isEmpty()){
            int size = que.size();
            for(int i = 0;i<size;i++){
                TreeNode temp = que.pollFirst();
                if(i==size-1){
                    result.add(temp.val);
                }
                
                if(temp.left!=null){
                    que.offerLast(temp.left);
                }
                if(temp.right!=null){
                    que.offerLast(temp.right);
                }
                


            }
        }

        return result;

    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

६३७ द्विचक्रीयवृक्षाणां स्तरसरासरी

केवलं प्रत्येकस्य स्तरस्य औसतमूल्यं ज्ञातव्यम् ।अद्यापि बोर्डप्रश्नः अस्ति

class Solution {
    public List<Double> averageOfLevels(TreeNode root) {
        List<Double> result = new ArrayList<>();
        Deque<TreeNode> que = new ArrayDeque<>();
        if(root==null){
            return result;
        }

        que.offerLast(root);
        while(!que.isEmpty()){
            int size = que.size();
            double sum = 0;
            double avg = 0;
            for(int i = 0;i<size;i++){
                TreeNode temp = que.pollFirst();
                sum += temp.val;
                if(temp.left!=null){
                    que.offerLast(temp.left);
                }
                if(temp.right!=null){
                    que.offerLast(temp.right);
                }
                
            }
            avg = sum/size;
            result.add(avg);
        }

        return result;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

५१५ प्रत्येकस्मिन् वृक्षपङ्क्तौ अधिकतमं मूल्यं ज्ञातव्यम्

इदमपि टेम्पलेट् प्रश्नः अस्ति, केवलं प्रत्येकं पङ्क्तिं संसाधयन् अधिकतमं मूल्यं निर्वाहयन्तु ।
केवलं स्मर्तव्यं यत् int इत्यस्य न्यूनतमं मूल्यं Integer.MIN_VALUE अस्ति ।

class Solution {
    public List<Integer> largestValues(TreeNode root) {
        List<Integer> result = new ArrayList<>();
        Deque<TreeNode> que = new ArrayDeque<>();
        if(root==null){
            return result;
        }

        que.offerLast(root);
        while(!que.isEmpty()){
            int size = que.size();
            int max = Integer.MIN_VALUE;
            for(int i = 0;i<size;i++){
                TreeNode temp = que.pollFirst();
                if(temp.val > max){
                    max = temp.val;
                }
                if(temp.left!=null){
                    que.offerLast(temp.left);
                }
                if(temp.right!=null){
                    que.offerLast(temp.right);
                }
            }
            result.add(max);
        }

        return result;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

४२९ एन-अरी वृक्षस्य स्तरक्रमपरिभ्रमणम्

अहं केवलं विस्तारविधिं परिवर्तयामि वाम-दक्षिण-उपवृक्षयोः विस्तारस्य स्थाने, अहं प्रत्यक्षतया बालसूचीं स्टैक् मध्ये योजितवान् ।
तस्मिन् एकः विधिः प्रयुक्तः अस्ति यस्याः शिक्षणं आवश्यकम् अस्ति।
ArrayDeque Deque कार्यान्वितं करोति, Deque च Queue अन्तरफलकं उत्तराधिकारं प्राप्नोति, Queue च Collection अन्तरफलकं उत्तराधिकारं प्राप्नोति, अतः अस्य addAll मेथड् अस्ति । addAll इत्यस्य पैरामीटर्स् इत्यस्य विषये तस्य पैरामीटर् प्रकारः Collection प्रकारः अस्ति, यस्य अर्थः अस्ति यत् सः Collection इत्यस्य अन्तरफलकं कार्यान्वितं किमपि वस्तु प्राप्तुं शक्नोति । अस्मिन् भवन्तः चिन्तयितुं शक्नुवन्ति प्रत्येकं एकं स्तम्भसंरचना अन्तर्भवति ।

/*
// Definition for a Node.
class Node {
    public int val;
    public List<Node> children;

    public Node() {}

    public Node(int _val) {
        val = _val;
    }

    public Node(int _val, List<Node> _children) {
        val = _val;
        children = _children;
    }
};
*/

class Solution {
    public List<List<Integer>> levelOrder(Node root) {
        List<List<Integer>> result = new ArrayList<>();
        Deque<Node> que = new ArrayDeque<>();
        if(root == null){
            return result;
        }

        que.offerLast(root);
        while(!que.isEmpty()){
            int size = que.size();
            List<Integer> curList = new ArrayList<>();
            while(size>0){
                Node temp = que.pollFirst();
                curList.add(temp.val);
                //就是扩展方式变了,变为直接把子节点全部加入到队列中,这也等价于将里面的每个元素从尾部依次加入队列当中。
                que.addAll(temp.children);
                size--;
            }
            result.add(curList);
        }

        return result;
        
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

११६ प्रत्येकस्य नोड् इत्यस्य अग्रिमं दक्षिणं नोड् सूचकं पूरयति

विचारः- स्तर-क्रमिक-परिभ्रमणात् भेदः अस्ति यत् प्रत्येकं स्तरं संसाधयन् परिवर्तनं भवति । प्रत्येकं स्तरं प्राप्य प्रथमं नोडं पृथक् निष्कासयितुं आवश्यकं भवति अवश्यं, तत् बहिः निष्कास्य प्रथमं विस्तारितव्यम्, यतः अद्यापि अग्रिमः स्तरः अस्ति । ततः स्तरस्य अवशिष्टानि नोड्स् भ्रमितुं आरभत । पारगमनं मुख्यतया वर्तमान que इत्यस्य आकारेण कार्यान्वितं भवति यतः अस्य स्तरस्य प्रथमः नोड् बहिः कृतः अस्ति, अतः traversal इत्यस्य समये i =1 तः आरभ्यते । प्रत्येकस्य नोडस्य संसाधनकाले यत् कर्तव्यं तत् सूचनस्य परिवर्तनं करणीयम् । अर्थात् प्रथमस्य नोड् इत्यस्य अग्रिमः नोड् पश्चात् स्टैक् तः पोप् कृतं द्वितीयं नोड् इत्येतम् सूचयति, ततः cur अग्रिमम् गच्छति । तथा च अस्मिन् क्रमे वाम-दक्षिण-बाल-नोड्-इत्येतयोः विस्तारं कर्तुं स्मर्यताम् ।

/*
// Definition for a Node.
class Node {
    public int val;
    public Node left;
    public Node right;
    public Node next;

    public Node() {}
    
    public Node(int _val) {
        val = _val;
    }

    public Node(int _val, Node _left, Node _right, Node _next) {
        val = _val;
        left = _left;
        right = _right;
        next = _next;
    }
};
*/

class Solution {
    public Node connect(Node root) {
        Deque<Node> que = new ArrayDeque<>();
        if(root==null){
            return root;
        }

        que.offerLast(root);
        while(!que.isEmpty()){
            //每层先取出第一个节点
            int size = que.size();
            Node cur = que.pollFirst();
            //扩展它
            if(cur.left!=null){
                que.offerLast(cur.left);
            }
            if(cur.right!=null){
                que.offerLast(cur.right);
            }
            for(int i = 1;i<size;i++){
                Node next = que.pollFirst();
                if(next.left!=null){
                    que.offerLast(next.left);
                }
                if(next.right!=null){
                    que.offerLast(next.right);
                }
                cur.next = next;
                cur = next;
            }
            

        }
        return root;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59